2.2 KiB
Deployment
Environments
- development
- test/CI
- production
Docker Compose
Baseline services:
- frontend
- API
- worker
- PostgreSQL
- Redis
- reverse proxy
Persistent data:
- PostgreSQL data
- Redis data where needed
- image storage
Production Compose
The repository includes compose.production.yaml with separate API, worker,
web, PostgreSQL, and Redis services. It exposes only the Nginx web service and
keeps database and Redis ports internal to the Compose network.
Before starting, create a production .env containing real values for
POSTGRES_DB, POSTGRES_USER, POSTGRES_PASSWORD, DATABASE_URL,
REDIS_URL, SMTP_URL, SMTP_FROM, and a stable base64-encoded 32-byte
MFA_ENCRYPTION_KEY. Do not use the fixture pricing provider in production.
Start the stack and apply migrations with:
docker compose -f compose.production.yaml up -d --build postgres redis
docker compose -f compose.production.yaml run --rm api npm run db:migrate
docker compose -f compose.production.yaml up -d --build api worker web
The default web port is 8080 and can be changed with WEB_PORT. The API and
worker images share the same Node workspace image; the web image builds the Vue
application and serves it through Nginx with SPA fallback and internal /api
proxying.
Reverse proxy
Responsible for:
- HTTPS/TLS
- routing
- compression
- security headers
- rate limiting where appropriate
Configuration
Environment variables/secrets:
- database connection
- Redis connection
- authentication/session secrets
- provider credentials
- email credentials
- storage credentials
Application settings such as pricing strategy and site settings belong in the database.
Backups
Back up:
- PostgreSQL
- image storage
- required environment/configuration information
Retention policy and restore procedures must be documented for production.
Disaster recovery should allow reconstruction elsewhere from database backup, image backup, and deployment/environment configuration.
Future hosting
Initial deployment targets a home server/NAS. The architecture should allow later movement to an online server or managed infrastructure without redesigning the domain model.