한양과학기술고등학교

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

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이 자동으로 처리합니다
"배포는 되돌릴 수 있어야 한다 — 백업 없는 배포는 없다"