에듀테크 프로젝트 대시보드
배포 (Gunicorn + Uvicorn + Nginx)
이 서버의 운영 구조. 자세한 초기 세팅은 FastAPI 서버구축 가이드 참고, 여기서는 요점만.
gunicorn app.main:app \
-k uvicorn.workers.UvicornWorker \
-w 4 \
-b 127.0.0.1:8001 \
--timeout 60 --graceful-timeout 30 \
--access-logfile - --error-logfile -워커 수 -w: CPU 코어 기준 2 × cores + 1 에서 시작해 부하 보고 조정. DB 커넥션 상한과 함께 계산 (풀·트랜잭션).
# /etc/systemd/system/fastapi-school.service
[Unit]
Description=fastapi-school
After=network.target postgresql.service
[Service]
User=ubuntu
Group=ubuntu
WorkingDirectory=/home/ubuntu/offset0xf/school
EnvironmentFile=/home/ubuntu/offset0xf/school/.env
ExecStart=/home/ubuntu/offset0xf/school/venv/bin/gunicorn main:app \
-k uvicorn.workers.UvicornWorker -w 4 -b 127.0.0.1:8001 --timeout 60
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl restart fastapi-school
sudo journalctl -u fastapi-school -flocation / {
proxy_pass http://127.0.0.1:8001;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 300s;
}X-Forwarded-Proto 를 넘겨야 앱이 https 를 인식합니다. 필요 시 --forwarded-allow-ips / ProxyHeadersMiddleware.
git pull
source venv/bin/activate && pip install -r requirements.txt
alembic upgrade head
sudo systemctl reload fastapi-school # HUP -> 워커 graceful 교체/docs 는 운영에서 노출 여부 결정 (FastAPI(docs_url=None) 또는 Nginx 에서 차단).env 권한 chmod 600, git 제외/health) 추가