支持 MySQL 迁移与性能优化

This commit is contained in:
yml2213
2026-07-25 10:23:19 +08:00
parent df4297bee5
commit 32f9eadfdb
9 changed files with 460 additions and 33 deletions
+46 -3
View File
@@ -1,16 +1,31 @@
services:
douyu-login:
build: .
build:
context: .
args:
# 服务器默认走阿里云镜像;本地测试设为 false。
USE_CHINA_MIRRORS: ${USE_CHINA_MIRRORS:-true}
container_name: douyu-login
restart: unless-stopped
ports:
- "8800:8800"
# 保持现有服务端口;可通过 APP_PORT 覆盖。
- "${APP_PORT:-8000}:8800"
volumes:
# 持久化数据库和日志
# 持久化运行时文件和日志,数据库由 mysql-data 卷管理。
- ./data:/app/data
- ./logs:/app/logs
environment:
- TZ=Asia/Shanghai
# MySQL 仅在 Compose 内网开放,不映射宿主机端口。
- DB_HOST=mysql
- DB_PORT=3306
- DB_NAME=${MYSQL_DATABASE:-douyu_login}
- DB_USER=${MYSQL_USER:-douyu_login}
- DB_PASSWORD=${MYSQL_PASSWORD:?请在 .env 中设置 MYSQL_PASSWORD}
- DB_POOL_SIZE=${DB_POOL_SIZE:-20}
- DB_MAX_OVERFLOW=${DB_MAX_OVERFLOW:-20}
- DB_POOL_TIMEOUT=${DB_POOL_TIMEOUT:-30}
- DB_POOL_RECYCLE=${DB_POOL_RECYCLE:-1800}
# JWT 密钥(生产环境务必修改,可用 python -c "import secrets; print(secrets.token_urlsafe(32))" 生成)
- JWT_SECRET_KEY=${JWT_SECRET_KEY:-}
# 敏感字段落盘加密密钥(生产环境务必长期保持不变)
@@ -26,6 +41,9 @@ services:
- MAIL_ROUNDCUBE_URL=${MAIL_ROUNDCUBE_URL:-}
# Uvicorn reload(生产环境保持 false
- UVICORN_RELOAD=${UVICORN_RELOAD:-false}
depends_on:
mysql:
condition: service_healthy
# 增加文件描述符限制,避免 "Too many open files" 错误
ulimits:
nofile:
@@ -36,3 +54,28 @@ services:
interval: 30s
timeout: 5s
retries: 3
mysql:
image: docker.m.daocloud.io/library/mysql:8.4
container_name: douyu-login-db
restart: unless-stopped
environment:
- TZ=Asia/Shanghai
- MYSQL_DATABASE=${MYSQL_DATABASE:-douyu_login}
- MYSQL_USER=${MYSQL_USER:-douyu_login}
- MYSQL_PASSWORD=${MYSQL_PASSWORD:?请在 .env 中设置 MYSQL_PASSWORD}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:?请在 .env 中设置 MYSQL_ROOT_PASSWORD}
volumes:
- mysql-data:/var/lib/mysql
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_0900_ai_ci
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h localhost -uroot -p$$MYSQL_ROOT_PASSWORD --silent"]
interval: 10s
timeout: 5s
retries: 12
start_period: 20s
volumes:
mysql-data: