321 lines
9.4 KiB
Markdown
321 lines
9.4 KiB
Markdown
# 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.
|