外观
Go独立版多节点服务端部署
Go独立版可以按多节点服务端方式部署。核心原则是:多个 getapp_server 进程共用同一套 MySQL、Redis、MacCMS 数据库和上传文件目录,入口由 Nginx 或统一入口分发。
适用场景
单机足够承载时,不需要多节点服务端部署。只有在访问量较高、需要容灾时,再考虑多节点。
推荐架构
txt
用户 / APP / TV
|
CDN / WAF
|
Nginx / 统一入口
|
+-----------------------------+
| getapp_server 节点 A |
| getapp_server 节点 B |
| getapp_server 节点 C |
+-----------------------------+
|
+-----------------------------+
| MySQL 主数据库 |
| Redis |
| MacCMS 数据库 |
| 共享上传目录 getupload |
+-----------------------------+必须保持一致的配置
每个节点的 ./getapp_common/config.yaml 需要保持以下配置一致:
| 配置 | 要求 |
|---|---|
admin.prefix | 后台访问路径前缀必须一致 |
database | 指向同一个 Getapp 主数据库 |
redis | 指向同一个 Redis,并使用相同 prefix |
maccms_database | 指向同一个 MacCMS 数据库 |
maccms_config.api_secret_key | 必须一致,否则 APP 接口加密会不一致 |
ad_callback.url_key | 必须一致,否则广告平台回调地址会不一致 |
upload.root_path | 多节点需要指向共享目录,或通过对象存储/CDN 统一访问 |
共享上传目录
Getapp 上传文件会固定写入 upload.root_path 下的 getupload 子目录。多节点服务端部署时,要避免每台机器各存一份。
推荐方案:
- 使用 NFS、NAS 或云厂商共享文件系统,把
getapp_common/getupload挂载到所有节点。 - 或者只允许一个后台节点处理上传,其他节点通过 Nginx 反向代理到该节点的
/getupload/。 - 图片量较大时,可把上传文件同步到对象存储和 CDN,再统一使用 CDN 访问地址。
不要忽略上传目录
如果上传目录不共享,APP 图标、广告图、头像、公告图片等资源可能在某些节点能访问,在另一些节点 404。
更新流程
多节点服务端部署需要使用手动替换。多节点更新时,不要只替换一台机器。
- 先备份数据库和当前
getapp_server。 - 逐台替换
getapp_server可执行文件。 - 逐台重启 Go 进程。
- 确认所有节点版本一致。
- 检查后台、APP 首页、播放详情、广告回调和上传资源访问。
排查建议
- 某些请求偶发失败:检查统一入口后的服务端节点是否全部存活。
- 图片偶发 404:检查上传目录是否共享,或 Nginx 是否把
/getupload/路由到正确节点。 - 登录态或验证码异常:确认所有节点使用同一个 Redis 和相同
redis.prefix。 - 广告回调失败:确认广告平台回调地址能到达当前统一入口,并且所有节点
ad_callback.url_key一致。 - 手动替换后版本不一致:检查是否所有节点都已替换并重启。
