Includes FastAPI+Jinja2+HTMX+SQLite implementation with seed categories, plus deployment templates. Co-authored-by: Cursor <cursoragent@cursor.com>
150 lines
3.0 KiB
Markdown
150 lines
3.0 KiB
Markdown
# 서버에서 바로 실행 배포 가이드 (도커 없이)
|
||
|
||
목표: `prompt.ncue.net` → (Nginx 리버스프록시) → `localhost:3000`(Next.js)
|
||
|
||
## 1) 서버 준비
|
||
|
||
- Node.js LTS 설치(권장 20.x 이상)
|
||
- PostgreSQL은 외부(`ncue.net/all_prompt`) 사용
|
||
- `git`, `build-essential`(일부 패키지 빌드 필요 시) 설치
|
||
|
||
## 2) 코드 배포(예시)
|
||
|
||
```bash
|
||
cd /opt
|
||
sudo git clone <YOUR_REPO_URL> all-prompt
|
||
cd /opt/all-prompt/apps/web
|
||
sudo npm ci
|
||
```
|
||
|
||
## 3) 환경변수 설정
|
||
|
||
`.env`를 생성한다(예: `/opt/all-prompt/apps/web/.env`).
|
||
|
||
```bash
|
||
DATABASE_URL="postgresql://ncue:<PASSWORD>@ncue.net:5432/all_prompt?schema=public"
|
||
NEXT_PUBLIC_SITE_URL="https://prompt.ncue.net"
|
||
NODE_ENV="production"
|
||
PORT=3000
|
||
```
|
||
|
||
## 4) DB 스키마 적용(1회)
|
||
|
||
> 이미 DB에 테이블이 있다면 생략 가능.
|
||
|
||
### A안(권장): psql로 DDL 적용
|
||
|
||
```bash
|
||
export PGPASSWORD="<PASSWORD>"
|
||
psql -h ncue.net -U ncue -d all_prompt -f db/schema.sql
|
||
```
|
||
|
||
### B안: Prisma db push(DDL 대신 Prisma 기준)
|
||
|
||
```bash
|
||
npm run prisma:generate
|
||
npm run db:push
|
||
```
|
||
|
||
## 5) 시드 데이터(1회)
|
||
|
||
```bash
|
||
npm run db:seed
|
||
```
|
||
|
||
## 6) 빌드/실행
|
||
|
||
```bash
|
||
npm run build
|
||
npm run start
|
||
```
|
||
|
||
이제 `http://localhost:3000`에서 동작해야 한다.
|
||
|
||
## 7) systemd로 상시 실행
|
||
|
||
### 7.1 서비스 유저(권장)
|
||
|
||
```bash
|
||
sudo useradd -r -s /usr/sbin/nologin allprompt || true
|
||
sudo chown -R allprompt:allprompt /opt/all-prompt
|
||
```
|
||
|
||
### 7.2 유닛 파일 생성
|
||
|
||
`/etc/systemd/system/allprompt-web.service`
|
||
|
||
```ini
|
||
[Unit]
|
||
Description=all prompt (모프) Next.js web
|
||
After=network.target
|
||
|
||
[Service]
|
||
Type=simple
|
||
User=allprompt
|
||
WorkingDirectory=/opt/all-prompt/apps/web
|
||
Environment=NODE_ENV=production
|
||
Environment=PORT=3000
|
||
EnvironmentFile=/opt/all-prompt/apps/web/.env
|
||
ExecStart=/usr/bin/npm run start
|
||
Restart=always
|
||
RestartSec=3
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
```
|
||
|
||
적용:
|
||
|
||
```bash
|
||
sudo systemctl daemon-reload
|
||
sudo systemctl enable --now allprompt-web
|
||
sudo systemctl status allprompt-web
|
||
```
|
||
|
||
## 8) Nginx 리버스프록시로 prompt.ncue.net 연결
|
||
|
||
### 8.1 Nginx 설치 및 서버블록
|
||
|
||
`/etc/nginx/sites-available/prompt.ncue.net`
|
||
|
||
```nginx
|
||
server {
|
||
listen 80;
|
||
server_name prompt.ncue.net;
|
||
|
||
location / {
|
||
proxy_pass http://127.0.0.1:3000;
|
||
proxy_http_version 1.1;
|
||
proxy_set_header Host $host;
|
||
proxy_set_header X-Real-IP $remote_addr;
|
||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||
proxy_set_header X-Forwarded-Proto $scheme;
|
||
proxy_set_header Upgrade $http_upgrade;
|
||
proxy_set_header Connection "upgrade";
|
||
}
|
||
}
|
||
```
|
||
|
||
활성화:
|
||
|
||
```bash
|
||
sudo ln -s /etc/nginx/sites-available/prompt.ncue.net /etc/nginx/sites-enabled/prompt.ncue.net
|
||
sudo nginx -t && sudo systemctl reload nginx
|
||
```
|
||
|
||
### 8.2 HTTPS(권장): Let’s Encrypt
|
||
|
||
```bash
|
||
sudo apt-get update
|
||
sudo apt-get install -y certbot python3-certbot-nginx
|
||
sudo certbot --nginx -d prompt.ncue.net
|
||
```
|
||
|
||
## 9) 배포 후 확인
|
||
|
||
- `https://prompt.ncue.net/api/health`
|
||
- `https://prompt.ncue.net/entities`
|
||
- `https://prompt.ncue.net/prompts`
|
||
|