# ═══════════════════════════════════════════════════════════════ # docker-compose.external-db.yml — 模式二:使用现有 MySQL # # 适用场景: # - 已有云数据库(如 RDS、本项目使用的 pma.hty1024.com:31000) # - 不想在容器内运行 MySQL # # 用法: # cp .env.external-db.example .env.external-db # # 编辑 .env.external-db 填写实际数据库连接信息 # docker compose -f docker-compose.external-db.yml \ # --env-file .env.external-db up -d # # 包含服务: # app — Flask + Gunicorn # nginx — Nginx 反向代理(可选,使用 --profile nginx 启用) # ═══════════════════════════════════════════════════════════════ services: # ── Flask 应用 ────────────────────────────────────────────── app: build: context: . dockerfile: Dockerfile image: resource-library:latest container_name: resource_library_app restart: unless-stopped environment: FLASK_ENV: ${FLASK_ENV:-production} SECRET_KEY: ${SECRET_KEY} DATABASE_URL: ${DATABASE_URL} # 完整连接串,见 .env.external-db.example ADMIN_USERNAME: ${ADMIN_USERNAME:-admin} ADMIN_PASSWORD: ${ADMIN_PASSWORD:-Admin@123456} ADMIN_EMAIL: ${ADMIN_EMAIL:-admin@example.com} GUNICORN_WORKERS: ${GUNICORN_WORKERS:-4} GUNICORN_TIMEOUT: ${GUNICORN_TIMEOUT:-120} MAX_UPLOAD_SIZE_MB: ${MAX_UPLOAD_SIZE_MB:-500} LOG_LEVEL: ${LOG_LEVEL:-info} # 外部数据库等待超时(秒) DB_WAIT_SECONDS: ${DB_WAIT_SECONDS:-30} volumes: - uploads_data:/app/app/static/uploads ports: - "${APP_PORT:-5000}:5000" extra_hosts: # 将外部数据库主机名加入容器 hosts(若使用域名访问外部 DB) # 格式:- "db-host:实际IP" # 若主机名可正常解析则不需要此配置 - "host-gateway:host-gateway" networks: - frontend logging: driver: json-file options: max-size: "20m" max-file: "5" # ── Nginx 反向代理(可选)────────────────────────────────── nginx: image: nginx:1.27-alpine container_name: resource_library_nginx restart: unless-stopped profiles: ["nginx"] depends_on: - app ports: - "${NGINX_HTTP_PORT:-80}:80" - "${NGINX_HTTPS_PORT:-443}:443" volumes: - ./docker/nginx.conf:/etc/nginx/conf.d/default.conf:ro - uploads_data:/app/app/static/uploads:ro networks: - frontend logging: driver: json-file options: max-size: "10m" max-file: "3" # ── 持久化卷 ──────────────────────────────────────────────────── volumes: uploads_data: name: resource_library_uploads # ── 网络 ──────────────────────────────────────────────────────── networks: frontend: name: resource_library_frontend