한양과학기술고등학교

에듀테크 프로젝트 대시보드

FastAPI 서버구축 가이드

FastAPI Gunicorn Nginx Systemd HTTPS / Certbot Ubuntu 24.04

1. 시스템 업데이트 및 필수 패키지 설치

시스템 패키지를 최신화하고 파이썬 가상 환경 구축을 위한 도구를 설치합니다.

1
패키지 업데이트 및 Nginx 설치
$sudo apt update && sudo apt upgrade -y
$sudo apt install -y python3-pip python3-venv nginx

2. 가상 환경 설정 및 FastAPI 설치

프로젝트 폴더를 생성하고 가상 환경을 만들어 의존성 충돌을 방지합니다.

2
가상 환경 생성 및 패키지 설치
# 프로젝트 폴더 생성 및 이동
$mkdir ~/my_fastapi_app && cd ~/my_fastapi_app
# 가상 환경 생성 및 활성화
$python3 -m venv venv
$source venv/bin/activate
# FastAPI 및 서버 실행을 위한 패키지 설치
$pip install fastapi "uvicorn[standard]" gunicorn

3. FastAPI 애플리케이션 작성

간단한 테스트용 main.py 파일을 생성합니다.

3
파일 생성
$nano main.py
🐍 main.py
from fastapi import FastAPI app = FastAPI() @app.get("/") def read_root(): return {"Hello": "AWS Lightsail"}

4. Systemd 서비스 등록 (자동 실행)

서버가 재부팅되어도 API가 자동으로 실행되도록 설정합니다.

4
서비스 파일 생성
$sudo nano /etc/systemd/system/fastapi.service
⚙️ /etc/systemd/system/fastapi.service
[Unit] Description=Gunicorn instance to serve FastAPI After=network.target [Service] User=ubuntu Group=www-data WorkingDirectory=/home/ubuntu/my_fastapi_app Environment="PATH=/home/ubuntu/my_fastapi_app/venv/bin" ExecStart=/home/ubuntu/my_fastapi_app/venv/bin/gunicorn \ -w 4 \ -k uvicorn.workers.UvicornWorker \ main:app \ --bind unix:/home/ubuntu/my_fastapi_app/app.sock [Install] WantedBy=multi-user.target

서비스 시작 및 활성화:

4-2
서비스 등록 및 시작
$sudo systemctl start fastapi
$sudo systemctl enable fastapi

5. Nginx 리버스 프록시 설정

Nginx를 통해 외부 포트(80)의 요청을 내부 소켓 파일로 전달합니다.

5
Nginx 설정 파일 생성
$sudo nano /etc/nginx/sites-available/fastapi
🌐 /etc/nginx/sites-available/fastapi
server { listen 80; server_name YOUR_PUBLIC_IP; # 또는 도메인 location / { include proxy_params; proxy_pass http://unix:/home/ubuntu/my_fastapi_app/app.sock; } }

설정 적용:

5-2
Nginx 활성화 및 재시작
$sudo ln -s /etc/nginx/sites-available/fastapi /etc/nginx/sites-enabled
$sudo nginx -t
$chmod 711 /home/ubuntu
$sudo systemctl restart nginx

6. 소스 수정 후 재시작

코드를 수정한 뒤에는 아래 순서로 서비스를 재시작합니다.

6
가상 환경 활성화 후 재시작
$source venv/bin/activate
$sudo systemctl restart fastapi

로그 확인

서비스 오류 발생 시 아래 명령어로 최근 200줄의 로그를 확인합니다.

$sudo journalctl -u fastapi -n 200

HTTPS 설정 방법

사전 준비 — 방화벽 포트 개방

HTTPS 통신을 위해 Lightsail 콘솔에서 443 포트를 먼저 열어야 합니다.

Lightsail 콘솔에서 443 포트 개방 순서
  • Lightsail 콘솔 접속 후 해당 인스턴스 클릭
  • Networking(네트워킹) 탭 선택
  • IPv4 Firewall(방화벽) 항목에서 + Add rule(규칙 추가) 클릭
  • Application에서 HTTPS 선택 (TCP, 443 포트) 후 Create(생성)

방법 A — Ubuntu/Debian 직접 설치 환경 (표준)

apt install로 Nginx를 직접 설치했다면 이 방법이 가장 표준적입니다.

Certbot 및 Nginx 플러그인 설치
$sudo apt update
$sudo apt install certbot python3-certbot-nginx -y
인증서 발급 및 Nginx 자동 설정
Certbot이 Nginx 설정 파일을 자동으로 분석하여 SSL 설정을 추가합니다. 이메일 주소 입력 → 약관 동의(A) → 이메일 수신 여부(Y/N) 순으로 진행합니다.
$sudo certbot --nginx -d 도메인주소.com -d www.도메인주소.com
⚠️ 주의사항
  • 도메인주소.com 부분에 실제 연결된 도메인을 입력하세요
  • 성공 시 Nginx 설정 파일에 SSL 경로가 자동 추가되고 Nginx가 재시작됩니다

자동 갱신 확인

Let's Encrypt 인증서는 90일마다 만료되지만, Certbot이 자동으로 갱신 스케줄러를 등록합니다. 아래 명령어로 정상 작동 여부를 테스트합니다.

자동 갱신 테스트
$sudo certbot renew --dry-run
✅ 성공 메시지
  • "Congratulations, all simulated renewals succeeded" 메시지가 나오면 정상입니다
  • 이후 인증서 갱신은 Certbot이 자동으로 처리합니다
"배포는 되돌릴 수 있어야 한다 — 백업 없는 배포는 없다"