services: db: image: postgres:16-alpine restart: unless-stopped environment: POSTGRES_USER: ${POSTGRES_USER:-doceditor} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-doceditor} POSTGRES_DB: ${POSTGRES_DB:-doceditor} volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: [ "CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-doceditor} -d ${POSTGRES_DB:-doceditor}", ] interval: 5s timeout: 5s retries: 10 start_period: 10s backend: build: context: ./backend restart: unless-stopped depends_on: db: condition: service_healthy environment: DATABASE_URL: postgresql+psycopg2://${POSTGRES_USER:-doceditor}:${POSTGRES_PASSWORD:-doceditor}@db:5432/${POSTGRES_DB:-doceditor} SECRET_KEY: ${SECRET_KEY:-change-me-in-production} ADMIN_EMAIL: ${ADMIN_EMAIL:-admin@example.com} ADMIN_USERNAME: ${ADMIN_USERNAME:-admin} ADMIN_PASSWORD: ${ADMIN_PASSWORD:-admin123} FRONTEND_URL: ${FRONTEND_URL:-http://localhost:5173} CORS_ORIGINS: ${CORS_ORIGINS:-http://localhost:5173,http://localhost:3000} UPLOAD_DIR: /app/uploads EXPORT_DIR: /app/exports SMTP_HOST: ${SMTP_HOST:-} SMTP_PORT: ${SMTP_PORT:-587} SMTP_USER: ${SMTP_USER:-} SMTP_PASSWORD: ${SMTP_PASSWORD:-} SMTP_FROM: ${SMTP_FROM:-noreply@example.com} SMTP_USE_TLS: ${SMTP_USE_TLS:-true} ACTIVATION_CODE_EXPIRE_HOURS: ${ACTIVATION_CODE_EXPIRE_HOURS:-24} PASSWORD_RESET_CODE_EXPIRE_HOURS: ${PASSWORD_RESET_CODE_EXPIRE_HOURS:-1} volumes: - uploads_data:/app/uploads - exports_data:/app/exports ports: - "${BACKEND_PORT:-8000}:8000" frontend: build: context: ./frontend restart: unless-stopped depends_on: - backend ports: - "${FRONTEND_PORT:-5173}:80" volumes: postgres_data: uploads_data: exports_data: