Files
prompt/docs/deploy-ubuntu-fastapi.md
dsyoon 27540269b7 Initial commit: add FastAPI MVP (모프) and existing web app
Includes FastAPI+Jinja2+HTMX+SQLite implementation with seed categories, plus deployment templates.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-16 17:17:22 +09:00

3.5 KiB

Ubuntu 22.04(22.14가 아니라 보통 22.04입니다) + systemd + Caddy로 모프(FastAPI) 배포

목표:

  • https://prompt.ncue.net → Caddy(자동 HTTPS) → uvicorn(FastAPI)(localhost:8000)
  • DB는 기본 SQLite 파일(서버 로컬) 사용

기존 저장소에는 Next.js/도커 배포 문서(docs/deploy-ubuntu-docker.md)가 있습니다.
이 문서는 루트의 main.py(FastAPI 버전 모프) 를 서버에 올리는 방법입니다.


0) 전제

  • DNS: prompt.ncue.net A 레코드가 서버 공인 IP를 가리킴
  • 방화벽: TCP 80/443 오픈

1) 서버 패키지 설치

sudo apt update
sudo apt install -y python3 python3-venv python3-pip git

2) 코드 배치

sudo mkdir -p /opt/mopf
sudo mkdir -p /opt/mopf/data
sudo chown -R $USER:$USER /opt/mopf

cd /opt/mopf
git clone <YOUR_REPO_URL> .

3) 가상환경 + 의존성 설치

cd /opt/mopf
python3 -m venv venv
./venv/bin/pip install -r requirements.txt

4) systemd로 앱 상시 실행

  1. 서비스 파일 복사
sudo cp /opt/mopf/ops/mopf.service /etc/systemd/system/mopf.service
  1. 권한/유저 확인
  • 기본 템플릿은 www-data로 실행합니다.
  • /opt/mopfwww-data가 읽을 수 있어야 하고, DB 파일 디렉토리(/opt/mopf/data)는 쓰기가 가능해야 합니다.
sudo chown -R www-data:www-data /opt/mopf
sudo chmod -R 755 /opt/mopf
sudo chmod -R 775 /opt/mopf/data
  1. 환경변수 수정(권장)

/etc/systemd/system/mopf.service에서 아래를 원하는 값으로 바꾸세요.

  • MOPF_DATABASE_URL=sqlite:////opt/mopf/data/all_prompt.db
  • MOPF_SALT=CHANGE_ME_TO_RANDOM_STRING ← 반드시 랜덤 문자열로 변경 권장
  1. 실행/자동시작
sudo systemctl daemon-reload
sudo systemctl enable --now mopf
sudo systemctl status mopf --no-pager

로그 확인:

journalctl -u mopf -f

5) Caddy로 HTTPS 리버스 프록시

옵션 A) Caddy를 “호스트에 직접 설치”(가장 간단)

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install -y caddy

Caddy 설정:

sudo cp /opt/mopf/ops/Caddyfile.mopf /etc/caddy/Caddyfile
sudo mkdir -p /etc/caddy
sudo nano /etc/caddy/Caddyfile

CADDY_EMAIL은 보통 systemd 환경변수로 넣습니다:

sudo systemctl edit caddy

내용 예시:

[Service]
Environment="CADDY_EMAIL=you@example.com"

적용/재시작:

sudo systemctl daemon-reload
sudo systemctl restart caddy
sudo systemctl status caddy --no-pager

옵션 B) “기존 docker-compose의 Caddy”를 그대로 쓴다면

이미 docker-compose.yml에서 Caddy가 80/443을 점유 중이면, Caddyfilereverse_proxy web:3000reverse_proxy 127.0.0.1:8000으로 바꿔야 합니다.


6) 동작 확인

  • https://prompt.ncue.net/ 접속
  • 프롬프트 등록: https://prompt.ncue.net/new
  • 검색: https://prompt.ncue.net/search?q=...

서버 로컬에서 빠른 체크:

curl -I http://127.0.0.1:8000/

7) 업데이트(코드 갱신)

cd /opt/mopf
sudo -u www-data git pull
sudo systemctl restart mopf