-
Notifications
You must be signed in to change notification settings - Fork 845
Expand file tree
/
Copy path.env.prod.example
More file actions
325 lines (305 loc) · 13.8 KB
/
Copy path.env.prod.example
File metadata and controls
325 lines (305 loc) · 13.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
APP_NAME=GEOFlow
APP_ENV=production
# 可留空:首次启动时容器入口会 key:generate 写回本文件(.env.prod 可写挂载);亦可宿主机 php artisan key:generate --show 预填。
APP_KEY=
APP_DEBUG=false
APP_URL=https://your-domain.com
SITE_URL=
ASSET_URL=
# Docker 的 PHP-FPM 必经 Nginx;REMOTE_ADDR 只信任当前直接调用方。接入 CDN 时追加其实际网段。
TRUSTED_PROXIES=REMOTE_ADDR
# Laravel Boost 仅用于本地调试;生产/公开部署应关闭浏览器日志脚本注入。
BOOST_BROWSER_LOGS_WATCHER=false
APP_TIMEZONE=Asia/Shanghai
# --- GEOFlow(遗留 config.php 对齐,见 config/geoflow.php)---
SITE_NAME="智能GEO内容系统"
SITE_FULL_NAME="GEO+AI内容生成系统"
SITE_URL="${APP_URL}"
SITE_DESCRIPTION=
SITE_KEYWORDS=
ADMIN_BASE_PATH=geo_admin
# 前台 Blade 翻译语言(与 APP_LOCALE 独立;默认 zh_CN 对齐旧站中文导航)
GEOFLOW_PUBLIC_LOCALE=zh_CN
# AI 工作台可由超级管理员在网站设置中开启;这里提供首次保存前的默认值和服务器紧急关闭能力。
GEOFLOW_ADMIN_UI_V3_ENABLED=true
GEOFLOW_AI_WORKSPACE_RUNTIME_ENABLED=false
GEOFLOW_AI_WORKSPACE_FORCE_DISABLED=false
GEOFLOW_AI_WORKSPACE_RETENTION_DAYS=90
GEOFLOW_AI_WORKSPACE_GLOBAL_CONCURRENCY=10
GEOFLOW_AI_WORKSPACE_CONCURRENCY_CACHE_STORE=redis
GEOFLOW_AI_WORKSPACE_ADMIN_DAILY_MODEL_CALLS=200
GEOFLOW_AI_WORKSPACE_MODEL_TOTAL_TIMEOUT=90
GEOFLOW_AI_WORKSPACE_MODEL_ATTEMPT_TIMEOUT=30
GEOFLOW_AI_WORKSPACE_HISTORY_CHAR_BUDGET=16000
GEOFLOW_AI_WORKSPACE_REQUIRE_VERIFIED_MODEL=true
GEOFLOW_HOSTED_SITES_ENABLED=false
GEOFLOW_PRIMARY_HOSTS=your-domain.com,www.your-domain.com
GEOFLOW_HOSTED_SITE_ROOT_DOMAINS=sites.your-domain.com
GEOFLOW_NGINX_PRIMARY_HOST=your-domain.com
GEOFLOW_NGINX_PRIMARY_ALIASES=www.your-domain.com
GEOFLOW_NGINX_HOSTED_ROOT_DOMAIN=sites.your-domain.com
GEOFLOW_NGINX_PUBLIC_SCHEME=https
GEOFLOW_NGINX_PUBLIC_PORT=443
GEOFLOW_HOSTED_SITE_RESOLVER_POSITIVE_TTL=300
GEOFLOW_HOSTED_SITE_RESOLVER_NEGATIVE_TTL=30
GEOFLOW_HOSTED_SITE_DAILY_PUBLISH_LIMIT=3
GEOFLOW_HOSTED_SITE_MIN_PUBLISH_INTERVAL_MINUTES=360
GEOFLOW_HOSTED_SITE_MIN_ARTICLES_BEFORE_INDEX=10
GEOFLOW_HOSTED_SITE_FAILURE_COOLDOWN_THRESHOLD=3
GEOFLOW_HOSTED_SITE_FAILURE_COOLDOWN_MINUTES=60
GEOFLOW_HOSTED_SITE_RESERVATION_TTL_MINUTES=30
GEOFLOW_HOSTED_SITE_RECONCILE_LIMIT=500
GEOFLOW_HOSTED_SITE_STALE_SENDING_SECONDS=150
GEOFLOW_HOSTED_SITE_CERTIFIED_THEMES=default
GEOFLOW_HOSTED_SITE_NETWORK_PREFLIGHT=true
GEOFLOW_HOSTED_SITE_PREFLIGHT_TIMEOUT=8
GEOFLOW_HOSTED_SITE_PREFLIGHT_FRESH_MINUTES=15
GEOFLOW_HOSTED_SITE_INDEX_OBSERVATION_MINUTES=30
# Docker 入口:迁移完成后是否执行 php artisan optimize(默认 true)
AUTO_OPTIMIZE=true
# Docker init 服务启动时修正 storage/bootstrap/cache 权限;常驻服务已关闭重复扫描。
AUTO_FIX_STORAGE_PERMISSIONS=true
GEOFLOW_ITEMS_PER_PAGE=12
GEOFLOW_ADMIN_ITEMS_PER_PAGE=20
GEOFLOW_TITLE_AI_MAX_MANUAL_RETRIES=3
GEOFLOW_TITLE_AI_SUBMIT_RATE_PER_MINUTE=6
GEOFLOW_TITLE_AI_SUBMIT_IP_RATE_PER_MINUTE=12
GEOFLOW_TITLE_AI_MAX_ACTIVE_RUNS_PER_ADMIN=3
GEOFLOW_TITLE_AI_MAX_PENDING_TITLES_PER_MODEL=300000
GEOFLOW_TITLE_AI_MAX_COUNT=100000
GEOFLOW_TITLE_AI_CONFIRMATION_THRESHOLD=1000
GEOFLOW_TITLE_AI_BATCH_SIZE=50
GEOFLOW_TITLE_AI_RATE_PER_MINUTE=30
GEOFLOW_TITLE_AI_MAX_EMPTY_BATCHES=3
GEOFLOW_TITLE_AI_MAX_BATCH_ATTEMPTS=3
GEOFLOW_TITLE_AI_MAX_REQUEST_MULTIPLIER=3
GEOFLOW_TITLE_AI_REQUEST_TIMEOUT_SECONDS=90
GEOFLOW_TITLE_AI_LEASE_SECONDS=420
GEOFLOW_TITLE_AI_RECOVERY_STALE_SECONDS=300
GEOFLOW_AI_QUALITY_REQUEST_TIMEOUT_SECONDS=160
GEOFLOW_AI_QUALITY_DEADLINE_SECONDS=180
GEOFLOW_AI_QUALITY_SAMPLED_FALLBACK_SECONDS=45
GEOFLOW_AI_QUALITY_SAMPLED_REQUEST_TIMEOUT_SECONDS=35
GEOFLOW_AI_QUALITY_SAMPLED_MAX_CHARACTERS=6000
GEOFLOW_AI_QUALITY_SAMPLED_MAX_RANGES=12
GEOFLOW_AI_QUALITY_FULL_ONLINE_MAX_CHARACTERS=60000
GEOFLOW_AI_QUALITY_SAMPLED_AUTO_RELEASE_ENABLED=true
GEOFLOW_AI_QUALITY_PERSISTENCE_RESERVE_SECONDS=10
GEOFLOW_AI_QUALITY_WORKER_STALE_SECONDS=300
GEOFLOW_AI_QUALITY_JOB_TIMEOUT_SECONDS=245
GEOFLOW_AI_QUALITY_WORKER_TIMEOUT_SECONDS=250
GEOFLOW_AI_QUALITY_STOP_GRACE_PERIOD=260s
GEOFLOW_AI_QUALITY_MAX_OUTPUT_TOKENS=2048
GEOFLOW_AI_QUALITY_MAX_MODEL_CANDIDATES=2
GEOFLOW_AI_QUALITY_MAX_EVIDENCE=12
GEOFLOW_AI_QUALITY_MAX_EVIDENCE_CHARACTERS=6000
GEOFLOW_AI_QUALITY_MAX_FACT_RETRIEVALS=6
GEOFLOW_AI_QUALITY_QUEUE=ai-quality
GEOFLOW_AI_QUALITY_BACKFILL_QUEUE=ai-quality-backfill
AI_QUALITY_QUEUE_REPLICAS=2
GEOFLOW_AI_QUALITY_EXECUTION_VERSION=legacy
GEOFLOW_AI_QUALITY_PRINCIPLE_V2_PERCENT=0
GEOFLOW_AI_QUALITY_FAST_V2_PERCENT=0
GEOFLOW_AI_QUALITY_SCORING_V2_PERCENT=0
GEOFLOW_AI_QUALITY_SHADOW_V2_PERCENT=0
GEOFLOW_AI_QUALITY_EVIDENCE_CACHE_TTL_SECONDS=86400
GEOFLOW_AI_QUALITY_EVIDENCE_CACHE_ENABLED=true
GEOFLOW_AI_QUALITY_CIRCUIT_CONSECUTIVE_FAILURES=5
GEOFLOW_AI_QUALITY_CIRCUIT_SAMPLE_SIZE=10
GEOFLOW_AI_QUALITY_CIRCUIT_FAILURE_PERCENT=50
GEOFLOW_AI_QUALITY_CIRCUIT_OPEN_SECONDS=60
GEOFLOW_AI_QUALITY_FRONT_QUEUE_WAIT_SECONDS=10
GEOFLOW_AI_QUALITY_BACKFILL_QUOTA_RESERVE=2
GEOFLOW_AI_QUALITY_RECOVERY_STALE_SECONDS=60
GEOFLOW_AI_QUALITY_STRUCTURED_REPROBE_SECONDS=86400
GEOFLOW_AI_QUALITY_OPTIMIZATION_ENABLED=false
GEOFLOW_AI_QUALITY_OPTIMIZATION_AUTO_APPLY_ENABLED=false
GEOFLOW_AI_QUALITY_OPTIMIZATION_PERCENT=0
GEOFLOW_AI_QUALITY_OPTIMIZATION_AUTO_APPLY_PERCENT=0
GEOFLOW_AI_QUALITY_OPTIMIZATION_QUEUE=ai-content-optimization
GEOFLOW_AI_QUALITY_OPTIMIZATION_BULK_QUEUE=ai-content-optimization-bulk
GEOFLOW_AI_QUALITY_OPTIMIZATION_BULK_QUOTA_RESERVE=2
GEOFLOW_AI_QUALITY_OPTIMIZATION_MAX_MODEL_ATTEMPTS=2
GEOFLOW_AI_QUALITY_OPTIMIZATION_MAX_ROUNDS=3
GEOFLOW_AI_QUALITY_OPTIMIZATION_MAX_EDIT_CHARACTERS=8000
GEOFLOW_AI_QUALITY_OPTIMIZATION_ROUND_ESTIMATED_SECONDS=235
GEOFLOW_AI_QUALITY_OPTIMIZATION_LEASE_SECONDS=300
GEOFLOW_AI_QUALITY_OPTIMIZATION_RECOVERY_STALE_SECONDS=300
GEOFLOW_AI_QUALITY_OPTIMIZATION_JOB_TIMEOUT_SECONDS=850
GEOFLOW_AI_QUALITY_OPTIMIZATION_WORKER_TIMEOUT_SECONDS=900
AI_QUALITY_OPTIMIZATION_QUEUE_REPLICAS=2
GEOFLOW_DEBUG_KNOWLEDGE_QUERY_EMBEDDING=false
# 匿名统计默认关闭;启用时还需配置 HTTPS 采集地址。
GEOFLOW_TELEMETRY_ENABLED=false
GEOFLOW_TELEMETRY_ENDPOINT=
GEOFLOW_TELEMETRY_INTERVAL_SECONDS=86400
# 私网出站仅允许精确 host:port(逗号分隔);留空时全部拒绝,不支持通配符或路径。
GEOFLOW_OUTBOUND_PRIVATE_TARGETS=
GEOFLOW_OUTBOUND_JSON_MAX_BYTES=4194304
GEOFLOW_OUTBOUND_AI_MAX_BYTES=8388608
GEOFLOW_OUTBOUND_IMPORT_MAX_BYTES=5242880
GEOFLOW_OUTBOUND_METADATA_MAX_BYTES=1048576
GEOFLOW_OUTBOUND_RESPONSE_MAX_BYTES=52428800
# 安全出站网关会绕过系统/进程 HTTP 代理并固定已校验 IP,避免代理改写目标。
GEOFLOW_UPLOAD_URL=/assets/images/
GEOFLOW_MAX_UPLOAD_BYTES=2097152
# 旧客户端直接提交图片路径的兼容开关,默认关闭;仅在受控迁移窗口临时开启。
GEOFLOW_LEGACY_IMAGE_PATH_INPUT=false
# 全新空库的手动迁移可在单次命令中临时设为 true;Docker init 服务已限定作用域,已有迁移历史或业务数据时该标志无效。
GEOFLOW_SECURITY_FRESH_INSTALL_CONFIRMED=false
# 已有数据升级专用的一次性确认;仅在 down、停止并排空全部 web/worker/scheduler/在途请求后临时改为 true,迁移完成立即恢复 false。
GEOFLOW_SECURITY_UPGRADE_DRAIN_CONFIRMED=false
# 完成 managed image hash readiness 并确认全部进程均为新版本前保持默认 false。
GEOFLOW_MANAGED_IMAGE_DELETION_ENABLED=false
# 安全审计判定 deleting 操作中断的短阈值,以及 present 无引用成为长期 orphan 的独立阈值。
GEOFLOW_SECURITY_AUDIT_DELETING_STALE_MINUTES=15
GEOFLOW_SECURITY_AUDIT_ORPHAN_AGE_HOURS=24
GEOFLOW_CACHE_ENABLED=true
GEOFLOW_CACHE_TTL=3600
GEOFLOW_MAX_LOGIN_ATTEMPTS=5
GEOFLOW_LOGIN_LOCKOUT_SECONDS=900
GEOFLOW_ADMIN_REMEMBER_MINUTES=43200
GEOFLOW_SESSION_TIMEOUT=2592000
GEOFLOW_API_LOGIN_RATE_LIMIT_ATTEMPTS=10
GEOFLOW_API_LOGIN_RATE_LIMIT_DECAY=60
GEOFLOW_API_TOKEN_DEFAULT_TTL_DAYS=30
# 首次 seed 写入的默认后台账号;重复执行不会覆盖已有账号。生产环境请务必填写强密码;若留空且账号尚不存在,seed 会生成一次性随机密码并仅输出到初始化日志。
GEOFLOW_ADMIN_USERNAME=admin
GEOFLOW_ADMIN_EMAIL=admin@example.com
GEOFLOW_ADMIN_PASSWORD=
# 默认 db:seed 只创建管理员;生产环境不要开启,除非明确需要写入前台演示分类和文章。
GEOFLOW_SEED_FRONTEND_DEMO=false
# 默认管理员尚未成功登录前,登录页会展示一次初始账号提示;生产对外部署如不希望页面提示,可设为 false。
GEOFLOW_INITIAL_ADMIN_HINT_ENABLED=false
GEOFLOW_KNOWLEDGE_EMBEDDING_JOB_SIZE=32
GEOFLOW_WORKER_STALE_SECONDS=120
# 变更后所有管理员会再次看到后台项目说明弹窗
GEOFLOW_WELCOME_INTRO_VERSION=3.0
# 后台右上角通知会每天最多拉取一次 GitHub version.json;如需关闭,设置为 false
GEOFLOW_UPDATE_CHECK_ENABLED=true
GEOFLOW_UPDATER_INSTANCE_ID=primary
GEOFLOW_UPDATER_READ_TIMEOUT_SECONDS=10
GEOFLOW_UPDATER_SOCKET=/run/geoflow-updater/geoflow-updater.sock
GEOFLOW_UPDATER_CONTROL_TOKEN_FILE=/run/secrets/geoflow-updater-control-token
GEOFLOW_UPDATER_HOST_ROOT=
GEOFLOW_UPDATE_METADATA_URL=https://raw.githubusercontent.com/yaojingang/GEOFlow/main/version.json
GEOFLOW_UPDATE_METADATA_CACHE_TTL=86400
GEOFLOW_UPDATE_CENTER_ENABLED=true
GEOFLOW_UPDATE_REQUIRE_ADMIN_PASSWORD=true
APP_LOCALE=zh_CN
APP_FALLBACK_LOCALE=en
APP_FAKER_LOCALE=en_US
APP_MAINTENANCE_DRIVER=file
# APP_MAINTENANCE_STORE=database
BCRYPT_ROUNDS=12
LOG_CHANNEL=daily
LOG_STACK=single
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=warning
# Docker Compose 默认值;若改为宿主机直连数据库/Redis,再按实际环境修改。
DB_CONNECTION=pgsql
DB_HOST=postgres
DB_PORT=5432
DB_DATABASE=geo_flow
DB_USERNAME=geo_user
DB_PASSWORD=geo_password
# 仅用于 compose 卷路径插值(见 docker-compose.prod.yml);postgres 镜像凭据使用上方 DB_*。
POSTGRES_DATA_DIR=./docker-data/prod/postgres
# PG16/17 默认使用 /var/lib/postgresql/data;PG18+ 官方镜像建议挂载 /var/lib/postgresql。
POSTGRES_CONTAINER_DATA_DIR=/var/lib/postgresql
SESSION_DRIVER=database
SESSION_LIFETIME=43200
SESSION_ENCRYPT=false
# HTTPS 部署保持 true;直接使用 http://IP:端口 时必须设为 false。
SESSION_SECURE_COOKIE=true
SESSION_SAME_SITE=lax
SESSION_PATH=/
SESSION_DOMAIN=null
BROADCAST_CONNECTION=reverb
REVERB_APP_ID=geoflow-reverb-app
REVERB_APP_KEY=geoflow-reverb-key
REVERB_APP_SECRET=change-this-reverb-secret
REVERB_HOST=your-domain.com
REVERB_PORT=443
REVERB_SCHEME=https
REVERB_BROADCAST_HOST=reverb
REVERB_BROADCAST_PORT=18080
REVERB_BROADCAST_SCHEME=http
REVERB_SERVER_HOST=0.0.0.0
REVERB_SERVER_PORT=18080
REVERB_SERVER_PATH=/reverb
REVERB_ALLOWED_ORIGINS=your-domain.com,www.your-domain.com
FILESYSTEM_DISK=local
QUEUE_CONNECTION=redis
# QUEUE_CONNECTION=sqs 时必须填写真实队列 Visibility Timeout,且该值必须大于 930 秒。
SQS_VISIBILITY_TIMEOUT=0
DB_QUEUE_RETRY_AFTER=960
CACHE_STORE=redis
CACHE_LIMITER_STORE=database
# CACHE_PREFIX=
MEMCACHED_HOST=127.0.0.1
REDIS_CLIENT=phpredis
REDIS_HOST=redis
# 无密码时留空;勿写 null 字面量,否则 redis 启动脚本会把密码当成非空字符串。
REDIS_PASSWORD=
REDIS_PORT=6379
# 须大于应用内最长队列任务 timeout(系统更新任务为 900 秒)
REDIS_QUEUE_RETRY_AFTER=960
APP_CONTAINER_MEMORY_LIMIT=768m
QUEUE_CONTAINER_MEMORY_LIMIT=384m
KNOWLEDGE_QUEUE_CONTAINER_MEMORY_LIMIT=256m
AI_QUALITY_QUEUE_CONTAINER_MEMORY_LIMIT=384m
AI_QUALITY_BACKFILL_QUEUE_CONTAINER_MEMORY_LIMIT=256m
HORIZON_MAX_PROCESSES=3
# 管理员 AI 模型隔离采用扩展、回填、Shadow、强制收口四阶段发布。
GEOFLOW_ADMIN_AI_OWNERSHIP_WRITE_ENABLED=true
GEOFLOW_ADMIN_AI_SHADOW_ENABLED=true
GEOFLOW_ADMIN_AI_ACCESS_ENFORCE_ENABLED=false
GEOFLOW_ADMIN_AI_REVOCATION_ENFORCE_ENABLED=false
MAIL_MAILER=log
MAIL_SCHEME=null
MAIL_HOST=127.0.0.1
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_FROM_ADDRESS="hello@example.com"
MAIL_FROM_NAME="${APP_NAME}"
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
AWS_USE_PATH_STYLE_ENDPOINT=false
VITE_APP_NAME="${APP_NAME}"
WEB_PORT=18080
# 多版本同机部署时每套实例必须错开:项目名、网络、WEB_PORT、数据目录。
# 镜像默认是 {COMPOSE_PROJECT_NAME}-app / -web;-p 会覆盖项目名并参与镜像插值,其他隔离项仍使用本文件中的值。
COMPOSE_PROJECT_NAME=geoflow-laravel-prod
DOCKER_NETWORK_NAME=geoflow-prod-net
DOCKER_NETWORK_SUBNET=10.88.0.0/16
DOCKER_NETWORK_GATEWAY=10.88.0.1
AUTO_WAIT_FOR_DB=true
# Docker 基础镜像(官方短名即可)。国内 ECS 拉取慢时:
# 方案 A(推荐):本机开 Clash + deploy-scripts/start-docker-pull-tunnel.sh 隧道
# 方案 B:/etc/docker/daemon.json 配置阿里云镜像加速器
# 方案 C:改为镜像代理前缀,如 m.daocloud.io/docker.io/library/redis:8-alpine
# 默认镜像名为 {COMPOSE_PROJECT_NAME}-app / -web,一般不用再写。
# 仅当预构建部署或要强制指定 tag 时才取消注释。
# GEOFLOW_APP_IMAGE=geoflow-app-prod:latest
# GEOFLOW_WEB_IMAGE=geoflow-web-prod:latest
COMPOSER_IMAGE=composer:2
PHP_FPM_IMAGE=php:8.4-fpm-bookworm
NGINX_IMAGE=nginx:1.31.1-alpine
PGVECTOR_IMAGE=pgvector/pgvector:pg18
REDIS_IMAGE=redis:8-alpine
# 仅当上述镜像地址不含可识别主版本(例如使用纯 digest)时,为独立更新工具显式指定。
GEOFLOW_UPDATER_POSTGRES_MAJOR=
GEOFLOW_UPDATER_REDIS_MAJOR=
# PHP Redis 扩展版本;构建时会下载 https://pecl.php.net/get/redis-${PECL_REDIS_VERSION}.tgz,避免 PECL latest 元数据漂移。
PECL_REDIS_VERSION=6.3.0
# 生产镜像构建期 Composer 镜像;留空可恢复官方 Packagist。
COMPOSER_PACKAGIST_MIRROR=
# --- 生产 Docker 入口 geoflow-entrypoint-prod ---
# init 服务使用以下 AUTO_* 执行迁移和首次安装;常驻服务不接收 .env.prod 作为容器环境变量。
AUTO_MIGRATE=true
AUTO_INSTALL_ONCE=true
AUTO_OPTIMIZE=true