services: # Nginx reverse proxy and static file server nginx: image: nginx:alpine container_name: etsy-nginx ports: - "3000:80" volumes: - ./nginx.deploy.conf:/etc/nginx/nginx.conf:ro - client_dist:/usr/share/nginx/html:ro depends_on: etsy-tracker: condition: service_healthy restart: unless-stopped networks: - etsy-network healthcheck: test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost/health"] interval: 30s timeout: 10s retries: 3 start_period: 20s # Etsy Finance Tracker API Server (built locally) etsy-tracker: build: context: . dockerfile: Dockerfile container_name: etsy-finance-tracker expose: - "8080" environment: - NODE_ENV=production - PORT=8080 - CLIENT_URL=http://nginx volumes: # Persistent data storage - etsy_data:/app/data # Optional: Mount uploads directory - etsy_uploads:/app/uploads # Share client build with nginx - client_dist:/usr/share/nginx/html restart: unless-stopped networks: - etsy-network healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s # Copy client files to shared volume and start server command: > sh -c " echo '🚀 Starting Etsy Finance Tracker API Server...'; echo '📁 Checking for client files...'; ls -la /app/client/dist/ || echo 'No client dist directory found'; echo '📋 Copying client files to shared volume...'; mkdir -p /usr/share/nginx/html; cp -rv /app/client/dist/* /usr/share/nginx/html/ 2>/dev/null || echo 'Copy failed or no files to copy'; echo '✅ Client files in shared volume:'; ls -la /usr/share/nginx/html/ || echo 'No files in shared volume'; echo '🔍 Starting Node.js server on port 8080...'; exec node server/dist/index.js " volumes: etsy_uploads: driver: local client_dist: driver: local etsy_data: driver: local networks: etsy-network: driver: bridge