Files
live-hub-py/.env.example
T
yml2213 2f5a63ae27 feat(auth): 新增手机号与 DCAuth 设备认证登录
- 登录链路改为用户名 + 密码 + 短信验证码 + DCAuth v2 设备签名
- 新增 login_sms_codes / user_devices / device_challenges 三张表,迁移 0063/0064
- 设备绑定只比对 deviceId + publicKey,每账号一个 active 设备,管理员可重置
- 保留未绑定手机号账号的密码登录兜底,绑定后强制安全登录
- 登录页与用户管理页支持验证码、DCAuth 轮询、手机号绑定与设备重置
2026-10-21 22:00:03 +08:00

141 lines
5.9 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ===== 环境变量配置 =====
# 复制此文件为 .env 并修改相应值
# Docker 部署时 docker-compose.yml 会自动读取 .env 文件
# JWT 密钥(生产环境必须设置!)
# 生成方式: python -c "import secrets; print(secrets.token_urlsafe(32))"
JWT_SECRET_KEY=
# 敏感字段落盘加密密钥(生产环境必须设置且长期保持不变!)
# 用于加密账号密码、邮箱密码、Cookie、代理密钥等数据库字段
# 生成方式: python -c "import secrets; print(secrets.token_urlsafe(32))"
APP_ENCRYPTION_KEY=
# 默认管理员账号(仅首次启动建库时生效)
ADMIN_USERNAME=admin
ADMIN_PASSWORD=admin123
# Docker 对外端口(容器内仍监听 8800;服务器当前使用 8000)
APP_PORT=8000
# 应用日志等级:DEBUG、INFO、WARNING、ERROR、CRITICAL;生产环境建议保持 INFO。
LOG_LEVEL=INFO
# 单日日志 app-YYYY-MM-DD.log 达到该大小时自动压缩归档;支持 K/M/G,例如 100M。
LOG_ROTATION_SIZE=50M
# 压缩归档保留天数;到期后写日志时自动清理。
LOG_RETENTION_DAYS=14
# 日志目录由启动脚本固定:./dev.sh 使用项目 logs/,Docker 使用挂载的 /app/logs。
# CK 重登保护:单账号最多尝试次数与总耗时秒数,超时/失败均保留旧 Cookie。
COOKIE_RELOGIN_MAX_RETRIES=5
COOKIE_RELOGIN_MAX_TOTAL_TIME=600
# Docker 构建镜像源(网络可访问官方源时保持 false;国内服务器可改为 true)
USE_CHINA_MIRRORS=false
# MySQL 配置(生产环境必须设置密码;默认只映射到宿主机 127.0.0.1,供本地 dev.sh 使用)
# 默认使用 DaoCloud 镜像,与既有部署保持一致;可按需覆盖为其他可用地址。
# MYSQL_IMAGE=docker.m.daocloud.io/library/mysql:8.4
MYSQL_DATABASE=douyu_login
MYSQL_USER=douyu_login
MYSQL_PASSWORD=
MYSQL_ROOT_PASSWORD=
MYSQL_BIND_HOST=127.0.0.1
MYSQL_HOST_PORT=3307
# MySQL 性能观测;同机部署资源紧张时可先使用 256M。
MYSQL_INNODB_BUFFER_POOL_SIZE=512M
MYSQL_SLOW_QUERY_LOG=1
MYSQL_LONG_QUERY_TIME=1
# 本地调试后端连接 MySQL(./dev.sh 使用;默认连接上面的宿主机端口)
DEV_DB_HOST=127.0.0.1
DEV_DB_PORT=3307
# 直接运行后端时使用;./dev.sh 会自动按 DEV_DB_* 和 MYSQL_* 生成这些变量
# DB_HOST=127.0.0.1
# DB_PORT=3307
# DB_NAME=douyu_login
# DB_USER=douyu_login
# DB_PASSWORD=
# 数据库连接池配置(仅 MySQL 生效)
DB_POOL_SIZE=20
DB_MAX_OVERFLOW=20
DB_POOL_TIMEOUT=30
DB_POOL_RECYCLE=1800
# Cookie 安全标志(生产环境 HTTPS 部署时设为 true)
COOKIE_SECURE=false
# 本地调试端口(./dev.sh / deploy.sh dev 使用;Docker 生产默认 8800)
# BACKEND_PORT=8800
# FRONTEND_PORT=5174
# BACKEND_HOST=0.0.0.0
# FRONTEND_HOST=0.0.0.0
# CORS 允许的源(逗号分隔,不设则默认开发环境)
# CORS_ORIGINS=https://example.com,https://www.example.com
# 应用宝充值 Worker(与 Web 合并在同一容器;生产环境必须设置为随机长密钥)
# 生成方式: python3 -c "import secrets; print(secrets.token_urlsafe(32))"
YYB_WORKER_KEY=
# Docker 与 dev.sh 均通过本机 Worker 访问,无需设置 YYB_WORKER_URL。
# YYB_WORKER_URL=http://127.0.0.1:8810
# YYB_WORKER_TIMEOUT=30
# 本地调试 Worker(仅 dev.sh 使用,默认只绑定 127.0.0.1)
# YYB_WORKER_PORT=8810
# DEV_YYB_WORKER_URL=http://127.0.0.1:8810
# 鱼翅直充供应商 API(供应商确认网关地址及订单查询字段后启用)
# AppKey 当前文档未说明其传输字段,保留以供后续确认,不会自动发送。
FISH_FIN_RECHARGE_BASE_URL=
FISH_FIN_RECHARGE_APP_ID=
FISH_FIN_RECHARGE_APP_KEY=
FISH_FIN_RECHARGE_APP_SECRET=
# 公网回调地址;不填则只通过 queryOrderV2 轮询订单状态。
FISH_FIN_RECHARGE_NOTIFY_URL=
# FISH_FIN_RECHARGE_TIMEOUT=20
# 排查供应商协议时临时开启;协议参数会按 DEBUG 级别脱敏输出,排查后建议关闭。
FISH_FIN_RECHARGE_DEBUG=false
# Roundcube 邮件验证码读取服务地址(可选;不填则使用默认服务)
# MAIL_ROUNDCUBE_URL=http://127.0.0.1:8000/
# ---- 文件存储:在线协作的图片上传 ----
# local = 存本地 ./data/file_storage(开发/测试默认,无需对象存储);
# oss = 阿里云 OSS 或任意 S3 兼容存储,生产用这个。
OSS_MODE=local
# ECS 与桶同地域时必须用内网 endpoint:免公网流量费、延迟低。
# 本机(非 ECS)调试要改成公网:https://oss-cn-hangzhou.aliyuncs.com
# OSS_ENDPOINT=https://oss-cn-hangzhou-internal.aliyuncs.com
# OSS_BUCKET=live-hub-assets
# OSS_ACCESS_KEY_ID=
# OSS_ACCESS_KEY_SECRET=
# 实测该 RAM 子账号的权限边界(2026-10-16,ossutil 2.1.2):桶内 ListObjects /
# PutObject / GetObject / DeleteObject 都通;ListBuckets、GetBucketStat、
# GetObjectAcl、跨桶访问一律 403。所以代码**不调** HeadBucket/GetBucketStat
# (见 file_storage.S3ObjectStorage.ensure_ready),RAM 策略也不用放开这些。
# region 默认从 endpoint 推导(oss-cn-hangzhou-internal → oss-cn-hangzhou),一般不用配。
# OSS_REGION=
# 上传大小上限(MB,默认 10)。前端会在上传前把长边压到 1600 以内。
# OSS_MAX_UPLOAD_SIZE_MB=10
# local 模式的对象根目录(默认 ./data/file_storage,已随 data/ 一起忽略)
# OSS_LOCAL_ROOT=
# OSS_PREFIX 是 P2 资料收集(collect)用的前缀,本功能由 scene 决定命名空间。
# ---- 登录短信(用户名 + 密码 + 短信验证码 + DCAuth 设备签名)----
# mock(默认):只写日志、不真实发送、不限制每日次数;
# aliyun:阿里云 Dysmsapi(RPC 签名),需要下面四项凭据。
WORKER_SMS_PROVIDER=mock
WORKER_SMS_ACCESS_KEY_ID=
WORKER_SMS_ACCESS_KEY_SECRET=
WORKER_SMS_SIGN_NAME=
WORKER_SMS_TEMPLATE_CODE=
# 验证码有效期 / 重发冷却 / 真实渠道每日上限
WORKER_SMS_CODE_TTL_SECONDS=300
WORKER_SMS_COOLDOWN_SECONDS=60
WORKER_SMS_DAILY_LIMIT=10
# Uvicorn reload(开发模式设为 true,生产环境保持 false)
UVICORN_RELOAD=false