task-board/docker-compose.yml
2025-06-24 14:26:42 +04:00

86 lines
2.3 KiB
YAML

version: '3.8'
services:
postgres:
image: postgres:15-alpine
container_name: taskboard-postgres
restart: unless-stopped
environment:
POSTGRES_DB: taskboard
POSTGRES_USER: taskboard_user
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-your_secure_password_here}
PGDATA: /var/lib/postgresql/data/pgdata
volumes:
- postgres_data:/var/lib/postgresql/data
- ./init-scripts:/docker-entrypoint-initdb.d
ports:
- "5432:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U taskboard_user -d taskboard"]
interval: 30s
timeout: 10s
retries: 5
start_period: 30s
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
networks:
- taskboard-network
- nginx-proxy-manager_default
app:
build:
context: .
dockerfile: Dockerfile
container_name: taskboard-app
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
environment:
NODE_ENV: production
DATABASE_URL: postgresql://taskboard_user:${POSTGRES_PASSWORD:-your_secure_password_here}@postgres:5432/taskboard
NEXTAUTH_URL: ${NEXTAUTH_URL:-http://localhost:3000}
NEXT_PUBLIC_APP_URL: ${NEXTAUTH_URL:-http://localhost:3000}
AUTH_SECRET: ${AUTH_SECRET:-your_auth_secret_change_this_in_production}
AUTHENTIK_ID: ${AUTHENTIK_ID:-}
AUTHENTIK_SECRET: ${AUTHENTIK_SECRET:-}
VIRTUAL_HOST: ${VIRTUAL_HOST:-taskboard.local}
VIRTUAL_PORT: 3000
LETSENCRYPT_HOST: ${LETSENCRYPT_HOST:-}
LETSENCRYPT_EMAIL: ${LETSENCRYPT_EMAIL:-}
volumes:
- app_uploads:/app/uploads
- app_logs:/app/logs
ports:
- "3000:3000"
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:3000/api/health || exit 1"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
logging:
driver: "json-file"
options:
max-size: "50m"
max-file: "5"
networks:
- taskboard-network
- nginx-proxy-manager_default
volumes:
postgres_data:
driver: local
app_uploads:
driver: local
app_logs:
driver: local
networks:
taskboard-network:
driver: bridge
nginx-proxy-manager_default:
external: true