FastAPI
Gunicorn
Nginx
Systemd
HTTPS / Certbot
Ubuntu 24.04
1. 시스템 업데이트 및 필수 패키지 설치
시스템 패키지를 최신화하고 파이썬 가상 환경 구축을 위한 도구를 설치합니다.
$sudo apt update && sudo apt upgrade -y
$sudo apt install -y python3-pip python3-venv nginx
2. 가상 환경 설정 및 FastAPI 설치
프로젝트 폴더를 생성하고 가상 환경을 만들어 의존성 충돌을 방지합니다.
# 프로젝트 폴더 생성 및 이동
$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 파일을 생성합니다.
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "AWS Lightsail"}
4. Systemd 서비스 등록 (자동 실행)
서버가 재부팅되어도 API가 자동으로 실행되도록 설정합니다.
$sudo nano /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
서비스 시작 및 활성화:
$sudo systemctl start fastapi
$sudo systemctl enable fastapi
5. Nginx 리버스 프록시 설정
Nginx를 통해 외부 포트(80)의 요청을 내부 소켓 파일로 전달합니다.
$sudo nano /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;
}
}
설정 적용:
$sudo ln -s /etc/nginx/sites-available/fastapi /etc/nginx/sites-enabled
$sudo nginx -t
$chmod 711 /home/ubuntu
$sudo systemctl restart nginx
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를 직접 설치했다면 이 방법이 가장 표준적입니다.
$sudo apt update
$sudo apt install certbot python3-certbot-nginx -y
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이 자동으로 처리합니다
"배포는 되돌릴 수 있어야 한다 — 백업 없는 배포는 없다"