基础设施与域名规划
本篇是完整上线指南的第一阶段:让系统以生产配置对外提供服务,讲清楚域名怎么分、证书谁来管、哪些环境变量缺了起不来、网关对外开哪些口。部署操作本身见对应部署文档,本篇只做决策与核对。
面向本地联调(内网穿透、自签证书)的方案不在本篇,见本地联调。
域名规划
系统对外共五个必绑域名,各自承载不同角色,建议独立规划(可共享一台服务器,但不要共用域名);另有一个可选的移动端 API 域名,供小程序/APP 走独立接入线时使用:
| 域名 | 承载 | 访问者 | HTTPS |
|---|---|---|---|
| 运营端域名 | Web 管理端(运营方) | 内部运营人员 | 必须 |
| 商户端域名 | Web 商户端 | 商户 | 必须 |
| 支付网关域名(H5) | 收银台 / 聚合扫码 / 认证中转页 | 付款人 | 必须(面向付款人的页面,HTTP 会被浏览器与微信/支付宝拒绝) |
| 后端 API 域名 | unipay 开放接口 + 通道回调入口 | 商户业务系统、微信/支付宝服务器 | 必须 |
| Artemis 控制台域名 | 消息队列控制台 | 内部运维 | 必须(不建议走 CDN) |
| 移动端 API 域名(可选) | 小程序/APP 登录态接口 + 收银开放接口专用入口 | 管理端/商户端小程序与 APP | 必须(小程序仅允许 HTTPS 域名) |
四点决策依据:
- 域名须完成 ICP 备案:微信/支付宝在配置支付目录、授权域名、二维码规则时都会校验备案与归属,未备案域名无法通过通道侧配置。
- 五个必绑域名与后端「端点配置」一一对应(见平台初始化 - 端点配置),部署域名与端点配置不一致是上线后跳转 404、回调失败的最常见原因。
- 移动端 API 域名是可选的隔离进阶项:不绑定时小程序/APP 经后端 API 域名接入即可正常使用(见下文网关对外接口);需要把自家客户端与第三方对接分开、让登录接口只经专用域名暴露时再绑定。它不对应「端点配置」中的任何一项,小程序合法域名登记两者取一即可。
- 一键部署的面板会按各域名绑定目标生成网关路由(网关管理 - 域名绑定与 CDN 外层接入);源码静态部署需自行在 nginx 中规划,示例见项目构建 - 静态部署。
部署路径选择
| 路径 | 适合 | 依赖 |
|---|---|---|
| 一键部署(运维面板) | 多数生产部署:单机 Docker 化,面板托管网关/证书/升级 | x86_64 Linux、≥8GB 内存、root、联网拉镜像 |
| 源码构建 + 静态部署 | 需要定制 nginx/自管 K8s、或离线裁剪 | 自备 JDK/Node/中间件与 nginx 配置能力 |
两条路径的应用配置项完全一致(见配置说明),差异只在证书与网关的托管方式:
- 一键部署的证书归属:网关源站零证书、恒走 HTTP,HTTPS 由外层 CDN / 网关终结,证书的签发、续期、验证都在外层控制台完成,面板不负责证书。生产推荐「经 CDN 回源」模式(含回源鉴权 Token)。
- 静态部署的证书归属:证书配在你自己的 nginx 层,面向付款人的 H5 域名必须配。
中间件生产要求
PostgreSQL、Redis、Artemis 三件中间件的生产要求(一键部署已按此装配,自建时逐项核对):
- 凭证:三者全部改掉默认/空密码(一键部署在面板「数据安全」中改密);Artemis 默认空口令在生产环境必须设置。
- 资源:内存档位参考面板配置 - 内存档位(compact ≥4GB / standard ≥8GB 推荐 / enhanced ≥16GB)。
- 可达性:中间件与业务容器端口默认不映射宿主机(端口暴露默认 off),保持默认即可;调试时临时开
local(绑 127.0.0.1),不要开public。
生产环境变量
源码/静态部署从 application-prod.yml 占位符读取环境变量;一键部署在面板「业务环境 → 主应用 → 应用配置」中维护等价项。标必填的变量缺失时启动直接失败(fail-fast),漏配在启动时就会暴露,不会拖到运行期。
变量分几组,完整清单见配置说明 - 生产环境变量清单:
| 组 | 关键项 | 说明 |
|---|---|---|
| 部署模式 | DEPLOY_MODE=PROD | 见下节切换生产模式 |
| 数据库 | DB_USERNAME / DB_PASSWORD(必填) | PG 凭证 |
| Redis | REDIS_PASSWORD(必填) | — |
| 消息队列 | ARTEMIS_USER / ARTEMIS_PASSWORD | 默认空串,生产必须设置 |
| 业务密钥 | RSA_PRIVATE_KEY / RSA_PUBLIC_KEY / ENCRYPT_KEY(32 字符,必填) | 平台级签名与数据加密密钥 |
| 通道子应用 | CHANNEL_*_TRANSPORT_KEY(必填) | 主应用与通道子应用的传输密钥,缺失启动失败 |
| IP 库 | IP2REGION_* | 风控地区拦截依赖,路径与版本须与实际 xdb 文件一致 |
| 交易 | TRADE_SYNC_ENABLED=true | 交易同步任务,生产建议开启 |
业务密钥不要重新生成
RSA/AES/通道传输密钥在首次部署时自动生成并固化。重新生成会导致已加密数据无法解密(通道密钥密文、敏感配置等),生产环境不要执行「重新生成」。
网关对外接口
一键部署的网关在「对外接口」按路径前缀放行外部请求,未放行的路径一律拒绝(面板网关 - 对外接口)。四个接口组的默认状态与上线核对点:
| 接口 | 用途 | 默认 | 说明 |
|---|---|---|---|
/unipay | 商户业务系统调用开放接口 | 开 | 有 API 对接商户时必须保持开启 |
/unipay/callback | 微信/支付宝等通道回调平台 | 开 | 走支付宝/微信通道时必须保持开启 |
/app-*(小程序 / APP API) | 管理端/商户端小程序与 APP 的登录态接口 | 开 | 小程序/APP 的接入生命线,见下文 |
/epay | 易支付兼容接口 | 关 | 用易支付协议对接时开(见可选功能) |
/admin/、/mch/、/swagger-ui/ 等 | 管理端与商户端 Web API | 恒封禁 | 管理流量由前端域名的 /api/ 转发承载;/demo/、/test/ 保持封禁 |
小程序/APP 接入路线(面板开关卡底部的状态行实时显示当前生效路线):
- 兼容方式(默认):小程序构建时 API 地址留空(即用后端 API 域名),依赖
/app-*开关开启——默认开箱即用,不要随意关闭; - 专用入口(需第六个域名):绑定移动端 API 域名并在小程序构建时填入该地址,该域名恒放行、不受开关影响;存量小程序/APP 全部切换后,建议关闭
/app-*开关,让登录接口只经专用域名暴露; - 失联:关闭
/app-*且未绑定移动端 API 域名 = 小程序无法登录(面板关闭时有防呆确认);直接用 IP 访问时登录态接口恒不开放(登录端点防暴力破解)。
关闭 /unipay 的后果:商户系统所有 API 调用被网关拒绝(404/拒绝访问);关闭 /unipay/callback 的后果:通道回调进不来,所有订单停在待支付,只能靠手动「同步」拉状态。上线后「接口全不通」先查这里。
源码静态部署没有这层开关,等价控制在你自己的 nginx 路由中,注意不要把 /demo/、/test/、swagger 一并暴露到公网。
切换生产模式
一键部署默认以 DEV 模式完成安装(放开沙箱与开发超管,便于联调)。上线前必须切换:
- 在面板「业务环境 → 主应用 → 应用配置」中将部署模式切为 PROD,系统会强制关闭沙箱与开发超管;PROD 下手工开启这两个值会被启动检查直接拦截;
- 重启业务容器生效(运行时配置只需重启,无需重建镜像,见面板配置 - 生效方式);
- 确认启动后界面不再出现任何沙箱入口(沙箱产品被自动重置为生产,详见支付能力 - 产品环境)。
DEV 模式不能用于生产
开发超管账号(固定弱口令)在 DEV 模式下可登录运营端、沙箱产品可见。对外网开放的部署不能停留在 DEV 模式。
源码部署对应为启动参数 --spring.profiles.active=prod,效果一致。
域名验证文件的网关侧预留
微信/支付宝的域名归属验证会在域名根路径与 /m/、/cm/、/am/ 目录下抓取校验文件(上传入口见支付能力 - 域名验证):
- 一键部署:H5 镜像内已内嵌 nginx 反代规则,自动把校验文件请求转发到后端应答;存量部署需升级面板并重建 H5 容器后生效;
- 静态部署:须自行在 nginx 中为校验文件路径配置反代(正则 location,且必须排在 SPA 兜底
try_files之前),配置示例见项目构建 - 静态部署,漏配的后果是通道/平台侧域名校验始终不通过。
本阶段核对清单
- [ ] 五个必绑域名规划完毕且已备案,与端点配置一一对应
- [ ] HTTPS 全站生效(付款人页面与 API 域名必须)
- [ ] 中间件三件套全部强口令,端口未映射公网
- [ ] 生产环境变量齐备(必填项无一缺失),业务密钥未重新生成
- [ ] 网关对外接口核对完毕:
/unipay、/unipay/callback、/app-*保持开启,/epay按需开启 - [ ] 小程序/APP 接入路线已确定(默认经后端 API 域名;需隔离时绑定移动端 API 域名并在构建时填入)
- [ ]
DEPLOY_MODE=PROD已切换并重启,沙箱与超管确认关闭 - [ ] 校验文件反代路径已预留
下一阶段:平台初始化配置。