# 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. 生产环境：设置 FRONTEND_ADDRESS=your-domain.com，Caddy 会自动获取 SSL 证书
# 2. 开发环境：设置 FRONTEND_ADDRESS=:8080 或使用默认值
# 3. 确保域名 DNS 已解析到服务器 IP（使用域名时）
# 4. 确保防火墙开放相应端口（80、443 用于域名，或自定义端口）
# 5. 可选：取消注释 email 行，用于证书到期通知
{
	# 自动 HTTPS 配置（Let's Encrypt）
	# email your-email@example.com  # 可选：用于证书到期通知
	# acme_ca https://acme-v02.api.letsencrypt.org/directory  # 默认使用 Let's Encrypt

	log {
		output stdout
		format console
	}
}

{$FRONTEND_ADDRESS::8080} {
	# 静态资源缓存
	@static {
		file
		path *.js *.css *.png *.jpg *.jpeg *.gif *.svg *.ico *.woff *.woff2 *.ttf *.eot
	}
	header @static Cache-Control "public, max-age=31536000, immutable"

	# HTML 不缓存
	@html {
		file
		path *.html
	}
	header @html Cache-Control "no-cache"

	# 安全头
	header {
		X-Content-Type-Options "nosniff"
		X-Frame-Options "SAMEORIGIN"
		Referrer-Policy "strict-origin-when-cross-origin"
	}

	# API 反向代理
	handle /api/* {
		reverse_proxy localhost:{$BACKEND_PORT:9001} {
			header_up X-Real-IP {remote_host}
		}
	}

	# 后端 API 反向代理
	handle /jingrow* {
		reverse_proxy localhost:{$BACKEND_PORT:9001} {
			header_up X-Real-IP {remote_host}
		}
	}

	# 文件服务（直接服务文件系统，无需 FastAPI）
	handle /files/* {
		root * apps/jingrow/jingrow/public
		encode gzip zstd
		file_server
	}

	# 前端静态文件 + SPA 路由支持
	handle {
		root * apps/jingrow/frontend/dist
		encode gzip zstd
		try_files {path} /index.html
		file_server
	}
}
