# 每日報導 APP - Docker Compose # 適用於 1Panel 部署 version: '3.8' services: # FastAPI 應用 app: build: . container_name: daily-news-app restart: unless-stopped ports: - "8000:8000" environment: - APP_ENV=production - DEBUG=false - DB_HOST=mysql - DB_PORT=3306 - DB_NAME=${DB_NAME:-daily_news_app} - DB_USER=${DB_USER:-root} - DB_PASSWORD=${DB_PASSWORD} - SECRET_KEY=${SECRET_KEY} - JWT_SECRET_KEY=${JWT_SECRET_KEY} - LDAP_SERVER=${LDAP_SERVER} - LDAP_BASE_DN=${LDAP_BASE_DN} - LLM_PROVIDER=${LLM_PROVIDER:-gemini} - GEMINI_API_KEY=${GEMINI_API_KEY} - GEMINI_MODEL=${GEMINI_MODEL:-gemini-1.5-pro} - OPENAI_API_KEY=${OPENAI_API_KEY} - OPENAI_MODEL=${OPENAI_MODEL:-gpt-4o} - OLLAMA_ENDPOINT=${OLLAMA_ENDPOINT:-http://ollama:11434} - OLLAMA_MODEL=${OLLAMA_MODEL:-llama3} - SMTP_HOST=${SMTP_HOST} - SMTP_PORT=${SMTP_PORT:-587} - SMTP_USERNAME=${SMTP_USERNAME} - SMTP_PASSWORD=${SMTP_PASSWORD} - SMTP_FROM_EMAIL=${SMTP_FROM_EMAIL} - DIGITIMES_USERNAME=${DIGITIMES_USERNAME} - DIGITIMES_PASSWORD=${DIGITIMES_PASSWORD} volumes: - ./uploads:/app/uploads - ./logs:/app/logs depends_on: mysql: condition: service_healthy networks: - daily-news-network healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000/health"] interval: 30s timeout: 10s retries: 3 # MySQL 資料庫 mysql: image: mysql:8.0 container_name: daily-news-mysql restart: unless-stopped environment: - MYSQL_ROOT_PASSWORD=${DB_PASSWORD} - MYSQL_DATABASE=${DB_NAME:-daily_news_app} - MYSQL_CHARSET=utf8mb4 - MYSQL_COLLATION=utf8mb4_unicode_ci volumes: - mysql_data:/var/lib/mysql - ./scripts/init.sql:/docker-entrypoint-initdb.d/init.sql:ro ports: - "3306:3306" networks: - daily-news-network healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 10s timeout: 5s retries: 5 command: - --character-set-server=utf8mb4 - --collation-server=utf8mb4_unicode_ci - --event-scheduler=ON # Ollama (可選,地端 LLM) ollama: image: ollama/ollama:latest container_name: daily-news-ollama restart: unless-stopped volumes: - ollama_data:/root/.ollama ports: - "11434:11434" networks: - daily-news-network profiles: - ollama deploy: resources: reservations: devices: - driver: nvidia count: all capabilities: [gpu] networks: daily-news-network: driver: bridge volumes: mysql_data: ollama_data: