services: postgres: image: postgres:15-alpine container_name: book-guardian-db restart: unless-stopped environment: POSTGRES_USER: ${POSTGRES_USER:-library_user} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-library_password} POSTGRES_DB: ${POSTGRES_DB:-personal_library} ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: [ "CMD-SHELL", "pg_isready -U library_user -d personal_library" ] interval: 10s timeout: 5s retries: 5 networks: - book-guardian-network app: build: context: . dockerfile: Dockerfile container_name: book-guardian-app restart: unless-stopped environment: - DATABASE_URL=${DATABASE_URL:-postgresql://library_user:library_password@postgres:5432/personal_library?schema=public} - NODE_ENV=${NODE_ENV:-production} - NEXTAUTH_URL=${NEXTAUTH_URL} - NEXTAUTH_SECRET=${NEXTAUTH_SECRET} - GOOGLE_CLIENT_ID=${GOOGLE_CLIENT_ID} - GOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET} - OPENAI_API_KEY=${OPENAI_API_KEY} - OPENAI_MODEL=${OPENAI_MODEL} - AI_PROVIDER=${AI_PROVIDER} ports: - "3003:3000" depends_on: postgres: condition: service_healthy healthcheck: test: [ "CMD-SHELL", "wget --no-verbose --tries=1 --spider http://127.0.0.1:3000 || exit 1" ] interval: 30s timeout: 10s retries: 3 start_period: 40s networks: - book-guardian-network command: sh -c "npx prisma migrate deploy && node server.js" volumes: postgres_data: networks: book-guardian-network: driver: bridge