Files

86 lines
4.8 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.
# 双项目 PostgreSQL 联调环境
## 范围
`compose.integration.yaml` 是独立的依赖栈,不与根目录 `compose.yaml` 合并使用;两个应用单独运行,可与中间件分机部署。
沿用开发栈的 PostgreSQL、信箱 MySQL、Valkey、Kafka 镜像,增加 admin-api 独立 MySQL 和匹配其 TransportClient 的 Elasticsearch。
所有发布端口监听全部网卡,凭据仅供测试;防火墙只放行测试客户端,禁止直接暴露公网。
| 服务 | 用途 |
| --- | --- |
| postgres | msgexchange-v2 自有业务数据库;admin-api 使用只读账号 |
| mysql | 本地共享信箱模拟,复用 `deploy/dev/mysql-init`,不修改外部邮箱结构 |
| admin-mysql | admin-api Primary 数据源,独立空库,不与共享信箱混用 |
| redis | 保留开发栈的 Valkey 服务,不改变当前应用的数据归属 |
| kafka | INTERNAL 用于容器健康检查,EXTERNAL 通告服务器地址 |
| elasticsearch | admin-api 历史查询依赖;未预建索引或导入数据 |
端口和测试凭据在 `compose.integration.yaml`,应用对应值在本目录配置文件。
Elasticsearch 旧版本仅用于兼容验证,Apple Silicon 需要 amd64 模拟支持;镜像配置参考 [Elastic Docker 文档](https://www.elastic.co/guide/en/elasticsearch/reference/6.4/docker.html)。
## 在中间件服务器启动
将仓库复制到服务器,在仓库根目录执行;`TEST_SERVER_HOST` 必须是应用机器能访问的服务器 IP 或域名,不能填写 `0.0.0.0`
```sh
export TEST_SERVER_HOST=你的服务器IP
docker compose -f compose.integration.yaml config --quiet
docker compose -f compose.integration.yaml up -d
docker compose -f compose.integration.yaml ps
```
该命令创建独立项目的容器、网络和数据卷,不启动两个 Java 应用。
首次初始化时创建 PG 只读用户,并为随后由 `msgx_dev` 创建的 public 表和视图授予 SELECT;不授予写入权限。
初始化脚本只对空数据卷执行,已有卷不会自动补执行或修改密码。
SELinux 环境下,初始化目录挂载通过 `Z` 设置容器专用标签;与开发栈共用的信箱目录使用 `z` 共享标签,保持只读挂载。
## 运行 msgexchange-v2
在应用机器的仓库根目录,用项目要求的 JDK 执行:
```sh
export TEST_SERVER_HOST=你的服务器IP
source deploy/integration/msgexchange.env.sh
./gradlew run
```
此配置关闭内存 stub,启用真实 PG、信箱和 Flyway;只能指向本测试栈。
Flyway 只迁移自有 PG,不为 admin-api 创建业务表,也不迁移共享 MySQL。
## 运行 admin-api
前置条件:使用 Java 8admin-api 可执行 JAR 必须包含兼容该运行时的 `org.postgresql:postgresql` 驱动,单改 YAML 无法替代驱动依赖。
在 msgexchange-v2 仓库根目录执行,确保 `$PWD` 指向本仓库而非 admin-api;以下使用测试服务器上的 JAR 路径,其他机器按实际位置替换:
```sh
export TEST_SERVER_HOST=你的服务器IP
java -jar /home/fengzhiqiang/project/airport/chengdu/admin-api/target/admin-api-1.2.1-SNAPSHOT.jar \
--spring.profiles.active=localtest \
--spring.config.location="file:$PWD/deploy/integration/admin-api.yml" \
--logging.config="file:$PWD/deploy/integration/logback.xml"
```
独立 profile 避免加载内置 dev/test/pro 地址,关闭 Eureka 和自动建表,日志只输出控制台。
两个 JPA 数据源不能全局强设 PG 方言;启动日志需确认 Primary 为 MySQL、Secondary 为 PostgreSQL。
sys-api 不在本栈,依赖它的操作日志开关接口不可用,不以假响应掩盖缺失依赖。
## 数据准备与验收边界
本栈提供数据库连接环境,不等于完整业务联调环境;空库上的基础数据、季度计划、字典和历史查询可能报缺表或缺索引。
admin-api Primary 需导入经确认的测试结构与脱敏数据,仅导入 `admin-mysql`,不得导入信箱实例。
Secondary 的表与列需匹配 admin-api 实体;参考数据读取契约尚待 `Q22` 定稿,季度计划来源尚待 `Q25` 确认,不根据实体臆造生产迁移或测试数据。
`G-REF-DATA` 标记的静态数据处理缺口不由 Compose 解决。
验收顺序:服务健康 → 应用驱动和方言 → 确认的表结构及数据 → 基础数据查询 → 季度计划日期与经停关联 → 接口返回对比。
PG 只读账号可以查询当前 public 内部表;这是联调权限范围,不是生产最小权限方案。
## 停止与排查
```sh
docker compose -f compose.integration.yaml logs --tail=100
docker compose -f compose.integration.yaml down
```
停止命令保留数据卷;不要追加 `-v`,该选项会删除测试数据。
Elasticsearch 启动失败先检查镜像架构、内存及日志中的内核限制提示,不自动修改服务器内核参数。