configure Caddy via environment variables

This commit is contained in:
jingrow 2025-11-22 18:06:41 +08:00
parent 77d50c4791
commit 52b613f76a
2 changed files with 27 additions and 7 deletions

View File

@ -1,11 +1,24 @@
# Caddy 配置文件 - 前端静态文件 + 后端 API 反向代理
# 最小化配置,符合 Caddy 2.x 最佳实践
#
# 地址配置说明:
# - 前端地址从环境变量 FRONTEND_ADDRESS 读取,可以是:
# * 域名(如 example.com自动启用 HTTPSCaddy 会从 Let's Encrypt 获取 SSL 证书
# * 端口(如 :8080使用 HTTP
# - 如果未设置 FRONTEND_ADDRESS默认使用 :8080
# - 后端端口从环境变量 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.comCaddy 会自动获取 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:{env.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:{env.BACKEND_PORT:9001} {
header_up X-Real-IP {remote_host}
header_up X-Forwarded-For {remote_host}
header_up X-Forwarded-Proto {scheme}

View File

@ -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" <<EOF
[Unit]
@ -280,6 +286,7 @@ Type=notify
User=${SERVICE_USER}
Group=${SERVICE_GROUP}
WorkingDirectory=${PROJECT_ROOT}
${env_file_line}
ExecStart=${CADDY_INSTALL_DIR}/caddy run --environ --config ${CADDY_CONFIG_DIR}/Caddyfile
ExecReload=${CADDY_INSTALL_DIR}/caddy reload --config ${CADDY_CONFIG_DIR}/Caddyfile --force
TimeoutStopSec=5s