본문 바로가기
System/Server

[cafe24] rocky linux + apache + php 환경에 fastapi 추가하기

by BitSense 2025. 3. 3.

Rocky8에 Apache와 PHP가 기본으로 설치되어 있더라도 FastAPI 애플리케이션을 함께 운영할 수 있습니다. 일반적인 방법은 FastAPI를 Uvicorn(또는 Gunicorn+Uvicorn 워커)으로 실행하고, Apache를 리버스 프록시로 설정하는 것입니다. 아래 단계별로 설명드립니다:

  1. Python 및 FastAPI 설치
    • Python3, pip, venv가 설치되어 있지 않다면 설치합니다.
      sudo dnf install python3 python3-pip python3-venv
      
    • FastAPI와 Uvicorn을 위한 가상환경을 생성합니다.
      mkdir /opt/myfastapi
      cd /opt/myfastapi
      python3 -m venv venv
      source venv/bin/activate
      pip install fastapi uvicorn
      
    • FastAPI 애플리케이션 파일(e.g. app.py)을 작성합니다.
  2. FastAPI 서버 실행
    • 테스트로 Uvicorn 서버를 시작합니다.
      uvicorn app:app --host 127.0.0.1 --port 8000
      
    • 서버가 정상적으로 동작하는지 브라우저나 curl로 확인합니다.
  3. Apache 리버스 프록시 설정
    • Apache에서 mod_proxy와 mod_proxy_http 모듈이 활성화되어 있는지 확인합니다. (Rocky8의 Apache는 기본적으로 설치되어 있으므로 필요시 설정 파일에서 확인)
    • Apache의 VirtualHost 설정 파일(예: /etc/httpd/conf.d/fastapi.conf)에 아래 내용을 추가합니다:
      <VirtualHost *:80>
          ServerName fastapi.example.com
          ProxyPreserveHost On
          ProxyPass / http://127.0.0.1:8000/
          ProxyPassReverse / http://127.0.0.1:8000/
      </VirtualHost>
      
    • 설정 후 Apache를 재시작합니다.
      sudo systemctl restart httpd
      
  4. 운영 환경 구성 (선택 사항)
    • FastAPI 서버를 시스템 서비스로 등록하면 서버 재시작 시 자동으로 실행되도록 할 수 있습니다. 예를 들어 /etc/systemd/system/fastapi.service 파일을 생성해 아래와 같이 작성합니다:
      [Unit]
      Description=FastAPI Application
      After=network.target
      
      [Service]
      User=your_user
      Group=your_group
      WorkingDirectory=/opt/myfastapi
      ExecStart=/opt/myfastapi/venv/bin/uvicorn app:app --host 127.0.0.1 --port 8000
      Restart=always
      
      [Install]
      WantedBy=multi-user.target
      
    • 파일 저장 후, 서비스 등록 및 시작:
      sudo systemctl daemon-reload
      sudo systemctl enable fastapi.service
      sudo systemctl start fastapi.service
      

이렇게 하면 Apache가 포트 80에서 들어오는 요청을 FastAPI 서버(포트 8000)로 전달하게 되어 기존 Apache+PHP 환경과 병행하여 FastAPI 애플리케이션을 운영할 수 있습니다.

반응형