# 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/ -> 对应服务 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 git commit -m "your change message" git push origin test ``` Admin 前端: ```bash cd /path/to/chatapp3-admin git status git add 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/ 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.