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>
This commit is contained in:
163
docs/deploy-ubuntu-fastapi.md
Normal file
163
docs/deploy-ubuntu-fastapi.md
Normal file
@@ -0,0 +1,163 @@
|
||||
# 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) 서버 패키지 설치
|
||||
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install -y python3 python3-venv python3-pip git
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2) 코드 배치
|
||||
|
||||
```bash
|
||||
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) 가상환경 + 의존성 설치
|
||||
|
||||
```bash
|
||||
cd /opt/mopf
|
||||
python3 -m venv venv
|
||||
./venv/bin/pip install -r requirements.txt
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4) systemd로 앱 상시 실행
|
||||
|
||||
1) 서비스 파일 복사
|
||||
|
||||
```bash
|
||||
sudo cp /opt/mopf/ops/mopf.service /etc/systemd/system/mopf.service
|
||||
```
|
||||
|
||||
2) 권한/유저 확인
|
||||
|
||||
- 기본 템플릿은 `www-data`로 실행합니다.
|
||||
- `/opt/mopf`를 `www-data`가 읽을 수 있어야 하고, DB 파일 디렉토리(`/opt/mopf/data`)는 쓰기가 가능해야 합니다.
|
||||
|
||||
```bash
|
||||
sudo chown -R www-data:www-data /opt/mopf
|
||||
sudo chmod -R 755 /opt/mopf
|
||||
sudo chmod -R 775 /opt/mopf/data
|
||||
```
|
||||
|
||||
3) 환경변수 수정(권장)
|
||||
|
||||
`/etc/systemd/system/mopf.service`에서 아래를 원하는 값으로 바꾸세요.
|
||||
|
||||
- `MOPF_DATABASE_URL=sqlite:////opt/mopf/data/all_prompt.db`
|
||||
- `MOPF_SALT=CHANGE_ME_TO_RANDOM_STRING` ← 반드시 랜덤 문자열로 변경 권장
|
||||
|
||||
4) 실행/자동시작
|
||||
|
||||
```bash
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable --now mopf
|
||||
sudo systemctl status mopf --no-pager
|
||||
```
|
||||
|
||||
로그 확인:
|
||||
|
||||
```bash
|
||||
journalctl -u mopf -f
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5) Caddy로 HTTPS 리버스 프록시
|
||||
|
||||
### 옵션 A) Caddy를 “호스트에 직접 설치”(가장 간단)
|
||||
|
||||
```bash
|
||||
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 설정:
|
||||
|
||||
```bash
|
||||
sudo cp /opt/mopf/ops/Caddyfile.mopf /etc/caddy/Caddyfile
|
||||
sudo mkdir -p /etc/caddy
|
||||
sudo nano /etc/caddy/Caddyfile
|
||||
```
|
||||
|
||||
`CADDY_EMAIL`은 보통 systemd 환경변수로 넣습니다:
|
||||
|
||||
```bash
|
||||
sudo systemctl edit caddy
|
||||
```
|
||||
|
||||
내용 예시:
|
||||
|
||||
```ini
|
||||
[Service]
|
||||
Environment="CADDY_EMAIL=you@example.com"
|
||||
```
|
||||
|
||||
적용/재시작:
|
||||
|
||||
```bash
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl restart caddy
|
||||
sudo systemctl status caddy --no-pager
|
||||
```
|
||||
|
||||
### 옵션 B) “기존 docker-compose의 Caddy”를 그대로 쓴다면
|
||||
|
||||
이미 `docker-compose.yml`에서 Caddy가 80/443을 점유 중이면,
|
||||
`Caddyfile`의 `reverse_proxy web:3000`을 `reverse_proxy 127.0.0.1:8000`으로 바꿔야 합니다.
|
||||
|
||||
---
|
||||
|
||||
## 6) 동작 확인
|
||||
|
||||
- `https://prompt.ncue.net/` 접속
|
||||
- 프롬프트 등록: `https://prompt.ncue.net/new`
|
||||
- 검색: `https://prompt.ncue.net/search?q=...`
|
||||
|
||||
서버 로컬에서 빠른 체크:
|
||||
|
||||
```bash
|
||||
curl -I http://127.0.0.1:8000/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 7) 업데이트(코드 갱신)
|
||||
|
||||
```bash
|
||||
cd /opt/mopf
|
||||
sudo -u www-data git pull
|
||||
sudo systemctl restart mopf
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user