Create wiki page 'Deployment'
68
Deployment.md
Normal file
68
Deployment.md
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
# Deployment
|
||||||
|
|
||||||
|
Production deployment uses Docker Compose (`compose.prod.yml`) with four services behind Nginx.
|
||||||
|
|
||||||
|
## Services
|
||||||
|
|
||||||
|
| Service | Image | Description |
|
||||||
|
|---|---|---|
|
||||||
|
| `proxy` | Nginx (custom) | TLS termination, reverse proxy |
|
||||||
|
| `thoughts-frontend` | Built from `thoughts-frontend/Dockerfile` | Next.js SSR frontend |
|
||||||
|
| `thoughts-backend` | Built from `thoughts-backend/Dockerfile` | Rust API server |
|
||||||
|
| `database` | `postgres:latest` | PostgreSQL with persistent volume |
|
||||||
|
|
||||||
|
## Steps
|
||||||
|
|
||||||
|
### 1. Clone and configure
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone <repo-url>
|
||||||
|
cd thoughts
|
||||||
|
|
||||||
|
# Backend env
|
||||||
|
cp thoughts-backend/.env.example thoughts-backend/.env
|
||||||
|
# Edit: DATABASE_URL, JWT_SECRET, etc.
|
||||||
|
|
||||||
|
# Root env (shared by compose)
|
||||||
|
cp .env.example .env
|
||||||
|
# Edit: POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DB, domain settings
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Build and start
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose -f compose.prod.yml up -d --build
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Run migrations
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose -f compose.prod.yml exec thoughts-backend \
|
||||||
|
./migration
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Nginx / TLS
|
||||||
|
|
||||||
|
The `nginx/nginx.conf` routes traffic:
|
||||||
|
|
||||||
|
- `yourdomain.com/api/*` → `thoughts-backend:3001`
|
||||||
|
- `yourdomain.com/*` → `thoughts-frontend:3000`
|
||||||
|
|
||||||
|
For TLS, add a Certbot/Let's Encrypt step or use an external TLS terminator in front of the Nginx container.
|
||||||
|
|
||||||
|
## CI/CD
|
||||||
|
|
||||||
|
A Gitea Actions workflow lives at `.gitea/workflows/deploy.yml`. It builds and pushes Docker images on push to `master` and triggers a redeploy on your server.
|
||||||
|
|
||||||
|
## Updating
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git pull
|
||||||
|
docker compose -f compose.prod.yml up -d --build
|
||||||
|
# Run migrations if schema changed
|
||||||
|
docker compose -f compose.prod.yml exec thoughts-backend ./migration
|
||||||
|
```
|
||||||
|
|
||||||
|
## Data Persistence
|
||||||
|
|
||||||
|
PostgreSQL data is stored in a named Docker volume. It survives container restarts and `docker compose down`. Use `docker compose down -v` only if you intentionally want to wipe the database.
|
||||||
Reference in New Issue
Block a user