diff --git a/Caddyfile b/Caddyfile index 6e8d11e..5f1b0c5 100644 --- a/Caddyfile +++ b/Caddyfile @@ -1,11 +1,24 @@ # Caddy 配置文件 - 前端静态文件 + 后端 API 反向代理 # 最小化配置,符合 Caddy 2.x 最佳实践 # +# 地址配置说明: +# - 前端地址从环境变量 FRONTEND_ADDRESS 读取,可以是: +# * 域名(如 example.com):自动启用 HTTPS,Caddy 会从 Let's Encrypt 获取 SSL 证书 +# * 端口(如 :8080):使用 HTTP +# - 如果未设置 FRONTEND_ADDRESS,默认使用 :8080 +# - 后端端口从环境变量 BACKEND_PORT 读取,默认 9001(使用 {$BACKEND_PORT:9001} 语法) +# - 可在 .env 文件中设置: +# FRONTEND_ADDRESS=example.com # 使用域名(推荐生产环境,自动 SSL) +# 或 +# FRONTEND_ADDRESS=:8080 # 使用端口(开发环境) +# BACKEND_PORT=9001 +# - 注意:使用域名时,确保 DNS 已解析,Caddy 会自动获取 SSL 证书 +# # 使用说明: -# 1. 生产环境:将 :8080 替换为你的域名(如 example.com) -# 2. 确保域名 DNS 已解析到服务器 IP -# 3. 确保防火墙开放 80 和 443 端口 -# 4. Caddy 会自动从 Let's Encrypt 获取和续期 SSL 证书 +# 1. 生产环境:设置 FRONTEND_ADDRESS=your-domain.com,Caddy 会自动获取 SSL 证书 +# 2. 开发环境:设置 FRONTEND_ADDRESS=:8080 或使用默认值 +# 3. 确保域名 DNS 已解析到服务器 IP(使用域名时) +# 4. 确保防火墙开放相应端口(80、443 用于域名,或自定义端口) # 5. 可选:取消注释 email 行,用于证书到期通知 { # 自动 HTTPS 配置(Let's Encrypt) @@ -18,7 +31,7 @@ } } -:8080 { +{$FRONTEND_ADDRESS::8080} { # 静态资源缓存 @static { file @@ -42,7 +55,7 @@ # API 反向代理 handle /api/* { - reverse_proxy localhost:9001 { + reverse_proxy localhost:{$BACKEND_PORT:9001} { header_up X-Real-IP {remote_host} header_up X-Forwarded-For {remote_host} header_up X-Forwarded-Proto {scheme} @@ -51,7 +64,7 @@ # 后端 API 反向代理 handle /jingrow* { - reverse_proxy localhost:9001 { + reverse_proxy localhost:{$BACKEND_PORT:9001} { header_up X-Real-IP {remote_host} header_up X-Forwarded-For {remote_host} header_up X-Forwarded-Proto {scheme} diff --git a/setup_production.sh b/setup_production.sh index 296e8a5..e321708 100755 --- a/setup_production.sh +++ b/setup_production.sh @@ -267,6 +267,12 @@ generate_caddy_service() { mkdir -p "$TMP_DIR" local service_file="$TMP_DIR/caddy.service" + local env_file_line="" + + # 如果 .env 文件存在,使用 EnvironmentFile 引用(Caddyfile 会读取环境变量) + if [ -f "$PROJECT_ROOT/.env" ]; then + env_file_line="EnvironmentFile=${PROJECT_ROOT}/.env" + fi cat > "$service_file" <