services: db: image: postgres:17-alpine volumes: - postgres_data:/var/lib/postgresql/data/ environment: - POSTGRES_USER=${POSTGRES_USER} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} - POSTGRES_DB=${POSTGRES_DB} healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"] interval: 5s timeout: 5s retries: 5 networks: - app-network restart: unless-stopped backend: build: context: ./backend dockerfile: Dockerfile target: production env_file: - .env environment: - DATABASE_URL=${DATABASE_URL} - SECRET_KEY=${SECRET_KEY} - DATA_FILES_DIR=${DATA_FILES_DIR} - HOST_DATA_FILES_DIR=${HOST_DATA_FILES_DIR} - ENVIRONMENT=production - DEBUG=false - BACKEND_CORS_ORIGINS=${BACKEND_CORS_ORIGINS} depends_on: db: condition: service_healthy networks: - app-network restart: unless-stopped volumes: - ${HOST_DATA_FILES_DIR}:${DATA_FILES_DIR} frontend: build: context: ./frontend dockerfile: Dockerfile target: runner args: - NEXT_PUBLIC_API_URL=${NEXT_PUBLIC_API_URL} - NEXT_PUBLIC_APP_URL=${NEXT_PUBLIC_APP_URL} environment: - NODE_ENV=production - NEXT_PUBLIC_API_URL=${NEXT_PUBLIC_API_URL} - NEXT_PUBLIC_APP_URL=${NEXT_PUBLIC_APP_URL} depends_on: - backend networks: - app-network restart: unless-stopped volumes: postgres_data: networks: app-network: driver: bridge