version: '3.8' services: # Backend API server backend: build: context: . dockerfile: Dockerfile container_name: recipe-manager-backend ports: - "3000:3000" # Expose for direct API access (optional, can remove if only accessed via frontend) volumes: - recipe-data:/app/data # Persist SQLite database environment: NODE_ENV: production DATABASE_PATH: /app/data/recipes.db healthcheck: test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:3000/api/recipes"] interval: 30s timeout: 10s retries: 3 start_period: 10s restart: unless-stopped networks: - recipe-network # Frontend (React + nginx) frontend: build: context: ./frontend dockerfile: Dockerfile container_name: recipe-manager-frontend ports: - "8080:80" # Access app at http://localhost:8080 depends_on: backend: condition: service_healthy healthcheck: test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost/health"] interval: 30s timeout: 10s retries: 3 start_period: 5s restart: unless-stopped networks: - recipe-network volumes: # Named volume for SQLite database persistence recipe-data: driver: local networks: # Internal network for service communication recipe-network: driver: bridge