Docker healthcheck、.env.example 清理死变量并补全缺失配置、web 端口绑定 localhost

This commit is contained in:
2569718930@qq.com
2026-05-18 22:57:00 +08:00
parent d4640a578d
commit 473ed82202
2 changed files with 24 additions and 25 deletions
+12 -16
View File
@@ -36,6 +36,7 @@ TELEGRAM_QUERY_TOPIC_CHAT_ID=
TELEGRAM_QUERY_TOPIC_ID=
TELEGRAM_QUERY_TOPIC_MAP=
POLYWEATHER_BOT_GROUP_INVITE_URL=
POLYWEATHER_APP_URL=https://polyweather-pro.vercel.app
# High-frequency airport push loop. Keep this at 1 on shared 1CPU VPS.
TELEGRAM_AIRPORT_PUSH_ENABLED=true
TELEGRAM_AIRPORT_PUSH_INTERVAL_SEC=60
@@ -63,23 +64,8 @@ POLYWEATHER_METAR_CLUSTER_TIMEOUT_SEC=3.5
METAR_CACHE_TTL_SEC=600
JMA_AMEDAS_CACHE_TTL_SEC=120
METEOBLUE_CACHE_TTL_SEC=7200
# - emos_shadow: user-facing probability stays legacy, EMOS is generated for comparison.
# - emos_primary: only after offline evaluation passes and manual rollout is approved.
POLYWEATHER_PROBABILITY_ENGINE=legacy
POLYWEATHER_EMOS_AUTO_MIN_SAMPLES=50
POLYWEATHER_EMOS_AUTO_MAX_DELTA_CRPS=0
POLYWEATHER_EMOS_AUTO_MAX_DELTA_MAE=0.05
POLYWEATHER_EMOS_AUTO_MIN_DELTA_BUCKET_HIT_RATE=-0.05
# Optional: cap recent probability snapshots used by EMOS retraining.
# Recommended on VPS: do not train there; pull the SQLite DB to a local machine.
# POLYWEATHER_EMOS_TRAINING_SNAPSHOT_LIMIT=20000
# Optional: set this to a writable runtime path if you manually deploy a
# locally trained EMOS calibration file.
# POLYWEATHER_PROBABILITY_CALIBRATION_FILE=/var/lib/polyweather/probability_calibration/default.json
POLYWEATHER_LGBM_ENABLED=false
POLYWEATHER_LGBM_MODEL_PATH=/app/artifacts/models/lgbm_daily_high.txt
POLYWEATHER_LGBM_SCHEMA_PATH=/app/artifacts/models/lgbm_daily_high_schema.json
POLYWEATHER_LGBM_MIN_HISTORY_POINTS=3
########################################
# 4) Auth / entitlement
@@ -113,9 +99,19 @@ NEXT_PUBLIC_POLYWEATHER_DISABLE_EAGER_SUMMARIES=false
# bypass Vercel Functions / Fluid Compute instead of going through Next.js API proxies.
# Example: NEXT_PUBLIC_POLYWEATHER_API_BASE_URL=https://api.example.com
NEXT_PUBLIC_POLYWEATHER_API_BASE_URL=
# Set to "true" to enable app analytics event tracking (conversion funnel etc.)
NEXT_PUBLIC_POLYWEATHER_APP_ANALYTICS=false
########################################
# 7) Optional modules
# 7) Admin / Ops
########################################
# Comma-separated admin email list for /ops dashboard access
POLYWEATHER_OPS_ADMIN_EMAILS=
# KNMI 10-minute observation data (Amsterdam)
KNMI_API_KEY=
########################################
# 8) Optional modules
########################################
# Optional OpenAI-compatible market scan review for Pro users
+12 -9
View File
@@ -10,15 +10,15 @@ services:
container_name: polyweather_bot
restart: unless-stopped
volumes:
# Persist runtime data outside git workspace.
# Host path defaults to /var/lib/polyweather and can be overridden in .env.
- ${POLYWEATHER_RUNTIME_DATA_DIR:-/var/lib/polyweather}:/var/lib/polyweather
# Keep /app/data compatibility for existing cache/state defaults.
- ${POLYWEATHER_RUNTIME_DATA_DIR:-/var/lib/polyweather}:/app/data
- ./bot.log:/app/bot.log # 挂载日志文件
# UID/GID are mainly useful on Linux hosts to avoid root-owned output files.
# Windows / macOS can usually keep the fallback values.
- ./bot.log:/app/bot.log
user: "${UID:-1000}:${GID:-1000}"
healthcheck:
test: ["CMD", "python", "-c", "import sqlite3; c=sqlite3.connect('/var/lib/polyweather/polyweather.db'); c.execute('SELECT 1'); c.close()"]
interval: 60s
timeout: 10s
retries: 3
polyweather_web:
<<: *polyweather-base
@@ -26,11 +26,14 @@ services:
restart: unless-stopped
command: python web/app.py
volumes:
# Web service shares the same runtime data directory as bot/state tasks.
- ${POLYWEATHER_RUNTIME_DATA_DIR:-/var/lib/polyweather}:/var/lib/polyweather
- ${POLYWEATHER_RUNTIME_DATA_DIR:-/var/lib/polyweather}:/app/data
ports:
- "8000:8000"
# UID/GID are mainly useful on Linux hosts to avoid root-owned output files.
- "127.0.0.1:8000:8000"
user: "${UID:-1000}:${GID:-1000}"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/healthz"]
interval: 30s
timeout: 5s
retries: 3