2026-05-09 14:34:43 +08:00

321 lines
9.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Chatapp testbox
Single-node test environment for chatapp Java services, Go API, cron worker,
and local infra.
Public API entry:
```text
https://jvapi-test.haiyihy.com
```
## What runs here
- MySQL 8.0
- Redis 7
- MongoDB 7
- Nacos standalone, namespace `RedCircleServiceTest`
- RocketMQ namesrv/broker/proxy
- Java: auth, gateway, external, console, other, live, wallet, order
- Go: chatapp3-golang API
- Cron: chatapp-cron week-star worker
- Admin: chatapp3-admin at `https://yumi-test-admin.haiyihy.com`
- Caddy for HTTPS reverse proxy to gateway
## First deployment
Make sure SSH works first:
```bash
ssh root@43.165.195.39 'hostname'
```
Then trigger a git-based deploy:
```bash
cd /Users/hy/Documents/haiyi/hy-app-monitor
bash testbox/scripts/deploy-from-git.sh root@43.165.195.39
```
The script only SSHes to the testbox. The server pulls these git repositories,
installs Docker on the testbox, starts infra, imports Nacos configs, applies
MySQL baseline files, builds images, and starts apps:
```text
git@gitea.haiyihy.com:hy/hy-app-monitor.git
git@gitea.haiyihy.com:hy/chatapp3-java.git
git@gitea.haiyihy.com:hy/chatapp3-golang.git
git@gitea.haiyihy.com:hy/chatapp-cron.git
git@gitea.haiyihy.com:hy/chatapp3-admin.git
```
After first deployment, you can run the deploy directly on the server:
```bash
ssh root@43.165.195.39 'bash /opt/chatapp-test/scripts/deploy-from-git-remote.sh'
```
The runtime `.env` stays on the server at `/opt/chatapp-test/.env`; git deploys
do not overwrite it.
## 自动拉取 test 分支
测试机安装后会启用 `chatapp-test-auto-deploy.service`。它每 30 秒读取一次
`admin``chatapp3-java``chatapp3-golang``chatapp-cron``test` 分支,如果远端 commit
有变化,就只构建并重启变化对应的服务。
默认配置在 `/opt/chatapp-test/.env`
```text
TESTBOX_AUTODEPLOY_ENABLED=1
TESTBOX_AUTODEPLOY_INTERVAL_SECONDS=30
TESTBOX_AUTODEPLOY_JAVA_BRANCH=test
TESTBOX_AUTODEPLOY_GOLANG_BRANCH=test
TESTBOX_AUTODEPLOY_CRON_BRANCH=test
TESTBOX_AUTODEPLOY_ADMIN_BRANCH=test
```
Java 会按变更路径细分服务:
```text
rc-auth -> auth
rc-gateway -> gateway
rc-service/rc-service-external -> external
rc-service/rc-service-console -> console
rc-service/rc-service-other -> other
rc-service/rc-service-live -> live
rc-service/rc-service-wallet -> wallet
rc-service/rc-service-order -> order
nacos_config/<service> -> 对应服务
nacos_config/common、公共模块、父 pom、未知路径 -> 全部 Java 服务
```
查看自动部署日志:
```bash
ssh root@43.165.195.39 'tail -f /opt/chatapp-test/logs/auto-deploy.log'
```
手动跑一轮:
```bash
ssh root@43.165.195.39 'bash /opt/chatapp-test/scripts/auto-pull-restart.sh --once'
```
## 新同学日常部署
场景:你改了某个 Java 服务或 `chatapp3-admin`,想在测试环境看效果。
### 1. 先把代码提交推送
测试机只从 Git 拉代码,不依赖你本机目录。所以本机改完以后,必须先提交并推到对应仓库。
Java 服务:
```bash
cd /path/to/chatapp3-java
git status
git add <changed-files>
git commit -m "your change message"
git push origin test
```
Admin 前端:
```bash
cd /path/to/chatapp3-admin
git status
git add <changed-files>
git commit -m "your change message"
git push origin test
```
如果同时改了部署脚本、Caddy、测试环境配置模板则还需要推 `hy-app-monitor`
```bash
cd /path/to/hy-app-monitor
git status
git add testbox/<changed-files>
git commit -m "your change message"
git push origin main
```
### 2. 最推荐:一键拉取并全量部署
这是新人最稳的方式。脚本会在测试机上拉取最新 Git 代码,合并缺失的 `.env` 默认项,导入 Nacos 配置,构建 Java/Go/cron/admin 镜像,并重启应用。
```bash
ssh root@43.165.195.39 'bash /opt/chatapp-test/scripts/deploy-from-git-remote.sh'
```
部署完成后看状态:
```bash
ssh root@43.165.195.39 '
cd /opt/chatapp-test &&
docker compose --env-file .env -f docker-compose.infra.yml -f docker-compose.apps.yml ps
'
```
常用访问地址:
```text
App/API: https://jvapi-test.haiyihy.com
Admin: https://yumi-test-admin.haiyihy.com
```
测试 admin 当前内置账号:
```text
账号admin
密码admin
```
### 3. 改 Java 服务后怎么看日志
服务名和容器名对应关系:
```text
rc-auth -> auth -> chatapp-test-auth
rc-gateway -> gateway -> chatapp-test-gateway
rc-service-console -> console -> chatapp-test-console
rc-service-other -> other -> chatapp-test-other
rc-service-live -> live -> chatapp-test-live
rc-service-wallet -> wallet -> chatapp-test-wallet
rc-service-order -> order -> chatapp-test-order
rc-service-external -> external -> chatapp-test-external
chatapp3-golang -> golang -> chatapp-test-golang
chatapp-cron -> chatapp-cron
chatapp3-admin -> admin -> chatapp-test-admin
```
查看某个服务日志:
```bash
ssh root@43.165.195.39 '
cd /opt/chatapp-test &&
docker compose --env-file .env -f docker-compose.infra.yml -f docker-compose.apps.yml logs -f --tail=200 order
'
```
把上面的 `order` 换成 `other``wallet``console``admin` 等即可。
### 4. 进阶:只部署一个 Java 服务
日常建议先用一键全量部署。确实只想快速验证某个 Java 服务时,可以在测试机上手动做单服务部署。
下面以 `order` 为例:
```bash
ssh root@43.165.195.39 '
set -e
cd /opt/chatapp-test/sources/chatapp3-java
git fetch --prune origin main
git checkout -B main origin/main
git reset --hard origin/main
if [ -x ./ci/install-private-maven.sh ]; then
./ci/install-private-maven.sh
fi
mvn -Ptest -T 1C -pl rc-service/rc-service-order/order-start -am -Dmaven.test.skip=true package
cd /opt/chatapp-test
python3 scripts/import-nacos-configs.py
docker compose --env-file .env -f docker-compose.infra.yml -f docker-compose.apps.yml build order
docker compose --env-file .env -f docker-compose.infra.yml -f docker-compose.apps.yml up -d order
'
```
常用 Java 服务的 Maven 模块:
```text
auth rc-auth
gateway rc-gateway
external rc-service/rc-service-external/external-start
console rc-service/rc-service-console/console-start
other rc-service/rc-service-other/other-start
live rc-service/rc-service-live/live-start
wallet rc-service/rc-service-wallet/wallet-start
order rc-service/rc-service-order/order-start
```
如果改的是 `gateway` 路由或 Nacos 配置,记得执行 `python3 scripts/import-nacos-configs.py` 后重启 `gateway`
### 5. 进阶:只部署 admin 前端
Admin 的接口地址由测试机 `/opt/chatapp-test/.env` 控制:
```text
TESTBOX_ADMIN_API_BASE_URL=https://yumi-test-admin.haiyihy.com/console
```
单独部署 admin
```bash
ssh root@43.165.195.39 '
set -e
cd /opt/chatapp-test/sources/chatapp3-admin
git fetch --prune origin main
git checkout -B main origin/main
git reset --hard origin/main
cd /opt/chatapp-test
docker build \
-f docker/chatapp3-admin.Dockerfile \
--build-arg ADMIN_API_BASE_URL="$(python3 scripts/env-value.py .env TESTBOX_ADMIN_API_BASE_URL https://yumi-test-admin.haiyihy.com/console)" \
--build-arg ADMIN_OSS_URL="$(python3 scripts/env-value.py .env TESTBOX_ADMIN_OSS_URL "")" \
-t chatapp-test/admin:testbox \
/opt/chatapp-test/sources/chatapp3-admin
docker compose --env-file .env -f docker-compose.infra.yml -f docker-compose.apps.yml up -d admin caddy
'
```
### 6. 常见判断
- 页面没变化:先确认代码已经 `git push origin main`,再确认测试机仓库已经拉到最新 `git rev-parse --short HEAD`
- Java 接口 404检查 gateway 路由、服务 context-path、Caddy 代理目标。
- Admin 能打开但接口 401先确认 `/console/**` 是 admin 域名直连 `console` 服务,不要走 app `gateway`
- 日志里出现 `*.prod.svc.cluster.local`:说明 Java Feign 地址没有被测试环境变量覆盖;检查 `/opt/chatapp-test/.env` 里的 `FEIGN_*_URL`,然后重启相关 Java 服务。
- 服务启动慢Java 服务重启后 1-3 分钟内 `health: starting` 正常,等健康检查变成 `healthy` 再验证。
- 只改数据库数据:不用部署代码,直接连测试 MySQL但基础数据脚本要沉淀到 `testbox/mysql/baseline/` 或业务仓库 SQL 目录。
## MySQL baseline
Java services need real schema and base config rows. Put sanitized SQL files in:
```text
testbox/mysql/baseline/
```
They are applied in lexical order. Recommended:
```text
10-schema.sql
20-base-data.sql
```
The deploy script then applies Go migrations from `chatapp3-golang/migrations`
and Java incremental SQL from `chatapp3-java/sql`.
## Runtime commands on the server
```bash
cd /opt/chatapp-test
docker compose --env-file .env -f docker-compose.infra.yml -f docker-compose.apps.yml ps
docker compose --env-file .env -f docker-compose.infra.yml -f docker-compose.apps.yml logs -f gateway
docker compose --env-file .env -f docker-compose.infra.yml -f docker-compose.apps.yml restart other
```
Local-only infra ports on the server:
```text
127.0.0.1:3306 MySQL
127.0.0.1:6379 Redis
127.0.0.1:27017 Mongo
127.0.0.1:8848 Nacos
127.0.0.1:8081 RocketMQ proxy
```
Only `80/443` are intended to be public.