Files
FastapiAdmin/docker/.env.example
T
zhangtao c73daa7eae chore(deploy): 健康检查发正确 Host、list 型配置改 JSON、Host 校验收窄
- backend 健康检查改为发送正确的 Host 头(而非放宽 ALLOWED_HOSTS);
  配合 ALLOW_LOCALHOST_HOSTS=false,Host: localhost 现在返回 400,容器自检仍 exit 0
- OAUTH_ALLOWED_HOSTS / CORS_STRICT_STARTUP / SCHEDULER_ALLOW_CODE_EXEC 接入 compose 注入
- ⚠️ OAUTH_ALLOWED_HOSTS 是 list[str],必须写 JSON 数组:本次部署曾因写成逗号分隔字符串
  导致启动期 SettingsError、容器重启、网关 502(已修复,并在 compose 默认值中固化 JSON 形态)
- DEPLOYMENT.md 新增「配置取值格式」章节记录该坑与排查方法
- AUDIT-REPORT.md 更新修复进展(含复核 t12 驳回与 t13/t14 通过、残余项)

线上验证:四端 200;Host=localhost → 400;健康检查 exit 0;公网 docs/.DS_Store → 403
2026-10-04 05:12:37 +08:00

70 lines
3.4 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.
# ============================================================================
# Docker 部署环境变量示例
# 用法:cp docker/.env.example docker/.env 然后改成真实值(.env 不会被提交)
# 注意:本文件会被提交到仓库,只放占位符,不要写真实口令
# ============================================================================
# ---------- 数据库(MySQL)----------
MYSQL_ROOT_PASSWORD=change_me_root_password
MYSQL_DATABASE=fastapiadmin
MYSQL_USER=fastapiadmin
MYSQL_PASSWORD=change_me_app_password
MYSQL_PORT=3306
# 说明:compose 把 MySQL 端口绑定在 127.0.0.1(只对本机开放),
# 容器之间通过 app_network 互联,不依赖宿主机端口。
# ---------- Redis ----------
REDIS_PASSWORD=change_me_redis_password
REDIS_PORT=6379
# ---------- 后端 ----------
BACKEND_PORT=8001
# 使用的后端镜像 tag:
# 3.0.0 表示「当前线上版本」(deploy-artifacts.sh 部署时写入)
# mysql-<时间戳> MySQL 驱动变体
# postgres-<时间戳> PostgreSQL 驱动变体(切换数据库时手动指定)
BACKEND_IMAGE_TAG=3.0.0
LOGGER_LEVEL=INFO
# 运行环境,对应 backend/env/.env.{dev,prod}
DEPLOY_ENV=prod
# 数据库类型(仅当使用外部数据库、不靠 compose 注入时才有意义)
# DATABASE_TYPE=mysql
# ---------- 安全相关(生产必填,禁止留空或用示例值)----------
# 令牌签名密钥:openssl rand -hex 32
# 注意:更换该值会使所有已签发令牌失效(用户需重新登录)
SECRET_KEY=change_me_generate_with_openssl_rand_hex_32
# 落库敏感数据(存储源口令、接口密钥)的加密主密钥:openssl rand -hex 32
# 留空时由 SECRET_KEY 派生;轮换步骤见 DEPLOYMENT.md 第 3 节
DATA_ENCRYPTION_KEY=
# 轮换前的旧主密钥(逗号分隔),仅用于解密历史密文,验证后可清空
DATA_ENCRYPTION_OLD_KEYS=
# 生产跨域白名单(逗号分隔);不配置时不再回落通配
PROD_CORS_ORIGINS=https://service.fastapiadmin.com
# 只信任该网段内的反向代理传来的 X-Forwarded-*(切勿使用 *)
FORWARDED_ALLOW_IPS=10.255.178.0/24
# 演示模式:true 时禁止写操作;生产需要可写请改为 false
DEMO_ENABLE=true
# Host 头校验范围:false 时 ALLOWED_HOSTS 只保留生产域名(不并入 localhost)。
# 容器健康检查已配置为发送正确的 Host,因此生产建议 false;
# 若你的健康检查/探针确实以 Host: localhost 访问容器,再设为 true。
ALLOW_LOCALHOST_HOSTS=false
# OAuth 回调与换取令牌允许的 Host。
# ⚠️ 该字段在应用里是 list[str]:必须写 **JSON 数组**,写成逗号分隔字符串会让服务启动失败
# (pydantic-settings 解析报 SettingsError,容器会不断重启)。
# 逗号分隔只适用于 str 类型字段,例如上面的 PROD_CORS_ORIGINS。
OAUTH_ALLOWED_HOSTS=["service.fastapiadmin.com","*.fastapiadmin.com"]
# 生产未配置 PROD_CORS_ORIGINS 时是否直接启动失败:false=仅告警(默认),true=严格
CORS_STRICT_STARTUP=false
# 定时任务是否允许执行用户提交的代码块(等同 RCE 能力,生产保持 false)
SCHEDULER_ALLOW_CODE_EXEC=false
# ---------- Nginx ----------
HTTP_PORT=80
HTTPS_PORT=443
# nginx 镜像版本(由 docker-compose.override.yaml 读取;留空用 1.27-alpine)
NGINX_TAG=1.27-alpine
# ---------- 项目 ----------
PROJECT_NAME=FastapiAdmin