mirror of
https://github.com/fastapiadmin/FastapiAdmin.git
synced 2026-10-14 13:06:51 +00:00
- 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
70 lines
3.4 KiB
Bash
70 lines
3.4 KiB
Bash
# ============================================================================
|
||
# 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
|