合入 main 的推广追踪(adtracking)模块,并解决与分销业务的 8 处冲突。 冲突解决原则:两边的字段、菜单与路由全部保留,不删任何一方。 后端: - model/order.go:保留分销字段注释块,追加 SourceTrackCode - model/user.go:追加 RegisterTrackCode;TokenVersion 默认值保持 1 (与本库 users.token_version 列默认值一致) - auth/repository.go:两处建号结构体同时写入 RegisterTrackCode 与 TokenVersion - order/dto.go:OrderDTO 同时暴露 distribution_site_id 与 source_track_code; CreateRequest 同时接受 distribution_site_code 与 track_code - order/presenter.go:同时映射 DistributionSiteID 与 SourceTrackCode 前端: - orders/api/orders.ts:createOrder 同时携带 distribution_site_code 与 track_code - layouts/AdminLayout.vue:分销管理菜单组与推广追踪菜单组并列保留 - router/adminRoutes.ts:分销 4 条路由与 tracking-links 路由并列保留 迁移:feature 侧 000064-000067 已在前一提交顺延为 000065-000068, 为 main 的 000064_ad_tracking 让号,合并后编号 000063→000068 连续无重复。
112 lines
2.7 KiB
Caddyfile
112 lines
2.7 KiB
Caddyfile
{
|
|
email {$CADDY_EMAIL}
|
|
}
|
|
|
|
# 反代到后端时,用 Caddy 实测到的对端地址覆盖 X-Real-IP,
|
|
# 防止客户端伪造 X-Forwarded-For 影响限流、审计和支付下单的 client_ip。
|
|
(backend_proxy) {
|
|
header_up X-Real-IP {remote_host}
|
|
header_up X-Forwarded-Proto {scheme}
|
|
}
|
|
|
|
# 公开 API 反代片段:主站与选号网共用。
|
|
(public_api) {
|
|
@api_sse {
|
|
path /api/chats/events /api/admin/chats/events
|
|
}
|
|
|
|
handle @api_sse {
|
|
reverse_proxy backend:8080 {
|
|
flush_interval -1
|
|
import backend_proxy
|
|
}
|
|
}
|
|
|
|
handle /api/* {
|
|
request_body {
|
|
max_size 11MB
|
|
}
|
|
reverse_proxy backend:8080 {
|
|
import backend_proxy
|
|
}
|
|
}
|
|
|
|
handle /r/* {
|
|
reverse_proxy backend:8080 {
|
|
import backend_proxy
|
|
}
|
|
}
|
|
|
|
@health path /health /health/ready
|
|
handle @health {
|
|
reverse_proxy backend:8080 {
|
|
import backend_proxy
|
|
}
|
|
}
|
|
}
|
|
|
|
# 主站与过渡子域名共享同一套配置:域名迁移期间新旧域名同时可访问,
|
|
# 避免 DNS 缓存未生效导致部分用户打不开。迁移完成后可移除 h5.{$CADDY_DOMAIN}。
|
|
{$CADDY_DOMAIN}, h5.{$CADDY_DOMAIN} {
|
|
encode zstd gzip
|
|
|
|
header {
|
|
Strict-Transport-Security "max-age=31536000"
|
|
X-Content-Type-Options "nosniff"
|
|
X-Frame-Options "DENY"
|
|
Referrer-Policy "strict-origin-when-cross-origin"
|
|
Permissions-Policy "camera=(), microphone=(), geolocation=()"
|
|
Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' https: data: blob:; font-src 'self' data:; connect-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'none'; form-action 'self'"
|
|
}
|
|
|
|
import public_api
|
|
|
|
# 生产后台页面使用构建时配置的隐藏入口,旧 /admin 入口直接返回 404。
|
|
@legacy_admin path /admin /admin/*
|
|
handle @legacy_admin {
|
|
respond 404
|
|
}
|
|
|
|
# 其余流量返回主站前端静态资源。
|
|
handle {
|
|
root * /srv/dist
|
|
try_files {path} /index.html
|
|
file_server
|
|
}
|
|
}
|
|
|
|
# 分销管理后台使用独立 React + Ant Design 静态资源,API 与主站复用 backend。
|
|
distribution.{$CADDY_DOMAIN} {
|
|
encode zstd gzip
|
|
import public_api
|
|
handle {
|
|
root * /srv/distribution-admin
|
|
try_files {path} /index.html
|
|
file_server
|
|
}
|
|
}
|
|
|
|
# 选号网(hfb_show):仅当 CADDY_SHOW_DOMAIN 有值时由部署脚本启用 conf.d/show.caddy。
|
|
# 未配置时 conf.d 为空,不影响主站。
|
|
import /etc/caddy/conf.d/*.caddy
|
|
|
|
# Beszel 自带登录与权限控制;单独子域避免与业务站点的 CSP、路由相互影响。
|
|
monitor.{$CADDY_DOMAIN} {
|
|
encode zstd gzip
|
|
|
|
request_body {
|
|
max_size 10MB
|
|
}
|
|
|
|
reverse_proxy beszel:8090 {
|
|
transport http {
|
|
read_timeout 360s
|
|
}
|
|
}
|
|
}
|
|
|
|
# gitea 自托管代码库
|
|
gitea.hao858.com {
|
|
reverse_proxy gitea:3000
|
|
}
|