Files
Productier/DEPLOYMENT.md
T
Tomas Dvorak 3cb40adb23 first commit
2026-04-10 12:04:09 +02:00

142 lines
3.5 KiB
Markdown

# Productier Deployment Guide
## Quick Start
### Local/Self-Hosted (Recommended)
From the project root:
```bash
# 1. Copy and configure environment
cp .env.example .env
# 2. Start all services
docker compose up -d
# 3. Access the application
# Frontend: http://localhost:5173
# API: http://localhost:48080
# Auth: http://localhost:43001
```
The root `.env` file contains all configuration for local development and self-hosting.
### Remote Deployment (Backend Only)
For deploying the backend API separately:
```bash
cd apps/backend
# 1. Copy and configure environment
cp remote.env .env
# Edit .env with your production values
# 2. Start the API service
docker compose -f docker-compose.remote.yml up -d
```
### Remote Deployment (Frontend Only)
For deploying the frontend separately:
```bash
cd apps/frontend
# 1. Build with environment variables
source ../apps/frontend/remote.env
docker build \
--build-arg VITE_FRONTEND_URL=$VITE_FRONTEND_URL \
--build-arg VITE_AUTH_URL=$VITE_AUTH_URL \
--build-arg VITE_API_URL=$VITE_API_URL \
--build-arg VITE_DEV_MAILBOX_ENABLED=false \
-t productier-frontend \
-f Dockerfile \
..
# 2. Run the container
docker run -d -p 80:80 productier-frontend
```
Or use npm for development:
```bash
cd apps/frontend
npm run dev
```
## Environment Files
| File | Purpose | Location |
|------|---------|----------|
| `.env` | Local/self-hosted deployment | Project root |
| `apps/backend/remote.env` | Remote backend deployment | apps/backend/ |
| `apps/frontend/remote.env` | Remote frontend build | apps/frontend/ |
## Required Configuration
### Backend (API)
| Variable | Description | Required |
|----------|-------------|----------|
| `DATABASE_URL` | PostgreSQL connection string | Yes |
| `AUTH_SERVICE_URL` | URL of auth service | Yes |
| `BETTER_AUTH_SECRET` | Secret for auth tokens (32+ chars) | Yes |
| `MAIL_ENCRYPTION_KEY` | Secret for mail encryption (32+ chars) | Yes |
| `CORS_ALLOW_ORIGINS` | Comma-separated allowed origins | Yes |
### Auth Service
| Variable | Description | Required |
|----------|-------------|----------|
| `DATABASE_URL` | PostgreSQL connection string | Yes |
| `BETTER_AUTH_SECRET` | Secret for auth tokens | Yes |
| `FRONTEND_URL` | Frontend URL for redirects | Yes |
| `AUTH_MAGIC_LINK_PROVIDER` | `dev-mailbox` or `smtp` | Yes |
| `AUTH_SMTP_*` | SMTP settings (if using SMTP) | Conditional |
### Frontend
| Variable | Description | Required |
|----------|-------------|----------|
| `VITE_FRONTEND_URL` | Public frontend URL | Yes |
| `VITE_AUTH_URL` | Public auth service URL | Yes |
| `VITE_API_URL` | Public API URL | Yes |
## Production Deployment
For full production deployment with TLS, use the infra compose:
```bash
cd infra
# 1. Copy and configure production environment
cp ../.env.production.example .env.production
# Edit .env.production with your domain and secrets
# 2. Deploy
docker compose -f docker-compose.prod.yml --env-file .env.production up -d
```
This includes:
- Caddy reverse proxy with automatic TLS
- All services with health checks
- Security hardening (read-only filesystems, no new privileges)
- Structured logging with rotation
## Health Endpoints
- API: `GET /v1/health`
- Auth: `GET /health`
- Frontend: `GET /` (nginx health)
## File Storage
The backend supports two storage backends:
1. **Local** (default): Files stored in `FILE_STORAGE_DIR`
2. **S3**: Configure `S3_*` variables and set `FILE_STORAGE_PROVIDER=s3`
## Database Migrations
Migrations run automatically on startup. The migrations directory can be customized via `DB_MIGRATIONS_DIR`.