merge: dev配置明文化

This commit is contained in:
xiaoqu
2026-09-04 14:28:53 +08:00
5 changed files with 29 additions and 41 deletions
+4 -12
View File
@@ -93,19 +93,11 @@ mysql -h192.168.1.181 -u<svc_db_admin> -p < sql/bootstrap/create-database.sql
# 启动一次让 ToolSyncService 同步 tool 表后:
mysql -h192.168.1.181 -u<svc_db_admin> -p xiaoqu_agent_svc_d < sql/seed-dev.sql
# 必须显式指定环境及凭据;m0/m1/m2 使用数据库只读账号
# 数据库/Redis 连接信息已明文写在 application-dev.yml(内网 dev 库);
# 仍需显式指定 profile
export SPRING_PROFILES_ACTIVE=dev
export M0_DB_USERNAME=<readonly_user>
export M0_DB_PASSWORD=<password>
export M1_DB_USERNAME=<readonly_user>
export M1_DB_PASSWORD=<password>
export M2_DB_USERNAME=<readonly_user>
export M2_DB_PASSWORD=<password>
export SVC_DB_USERNAME=<svc_user>
export SVC_DB_PASSWORD=<password>
# 已有 V1 库首次接入时设 true;确认 flyway_schema_history 后可设 false
export SVC_FLYWAY_BASELINE_ON_MIGRATE=true
export REDIS_PASSWORD=<password>
# 仅首次、且 admin_user 为空时创建管理员;创建完成后可移除这三个变量
export ADMIN_BOOTSTRAP_ACCOUNT=<admin_account>
export ADMIN_BOOTSTRAP_PASSWORD=<strong_password>
@@ -119,7 +111,7 @@ java -jar target/xiaoqu-agent-service.jar
nohup java -jar target/xiaoqu-agent-service.jar > target/app.log 2>&1 &
```
- 不提供默认 profile、数据库账号或密码;缺失配置时不得启动。
- 不提供默认 profile;数据库/Redis 连接信息明文写在 `application-dev.yml`(内网 dev 库,与 xiaoqu-franchisee pom.xml dev profile 同一惯例);生产/测试环境不得在配置文件写明文密码。
- dev 端口 **8088**,管理后台 `http://localhost:8088/`,MCP 端点 `http://localhost:8088/mcp`。
- Flyway 在 Web 服务启动前执行 `validate + migrate`;checksum、版本或 SQL 执行失败时应用不会启动。
- 新增 SQL 必须遵循 [sql/README.md](sql/README.md),禁止修改已合并的历史 migration。
@@ -133,7 +125,7 @@ cp deploy/.env.example deploy/.env.dev # 填写 dev 凭据(已 gitignore,
./deploy/deploy.sh status | log | stop # 状态 / 跟踪日志 / 停止
```
- 凭据从 `deploy/.env.dev` 读取,无需手工 export;日志在 `logs/agent-service.log`,pid 在 `deploy/app.pid`。
- `.env.dev` 只需管理员引导和 Flyway 开关;数据库/Redis 已走配置文件。日志在 `logs/agent-service.log`,pid 在 `deploy/app.pid`。
- 注意应用启动较慢(多数据源初始化,约 60-90s),脚本健康检查窗口已放宽到 180s。
## 测试 ak(仅 dev)
+8 -11
View File
@@ -1,13 +1,10 @@
# dev 环境凭据(本文件为模板;实际使用复制为 .env.dev,已 gitignore)
# 取值参考 xiaoqu-franchisee/pom.xml dev profile
M0_DB_USERNAME=root
M0_DB_PASSWORD=
M1_DB_USERNAME=root
M1_DB_PASSWORD=
M2_DB_USERNAME=root
M2_DB_PASSWORD=
SVC_DB_USERNAME=root
SVC_DB_PASSWORD=
# dev 环境变量(本文件为模板;实际使用复制为 .env.dev,已 gitignore)
# 数据库/Redis 连接信息已明文写在 application-dev.yml,无需在此配置
# 后台管理员首次引导(仅首次启动且 admin_user 为空时建号,之后可删除)
APP_ADMIN_BOOTSTRAP_ACCOUNT=admin
APP_ADMIN_BOOTSTRAP_PASSWORD=
# APP_ADMIN_BOOTSTRAP_NAME=系统管理员
# 默认拒绝为非空库自动建基线;仅已有 V1 库首次接入时临时改为 true
SVC_FLYWAY_BASELINE_ON_MIGRATE=false
REDIS_PASSWORD=
@@ -1,33 +1,34 @@
# dev 环境:内网 192.168.1.181(沿用 xiaoqu-franchisee pom.xml dev profile)
# 账号和密码必须由环境变量提供;m0/m1/m2 应使用数据库只读账号
# 账号密码明文写在本文件(内网 dev 库,与 xiaoqu-franchisee pom.xml dev profile 同一惯例);
# 生产/测试环境不得在配置文件中写明文密码,改用环境变量
app:
datasource:
m0: # 权限库 xiaoqu_comples_d(user/agent/authority/propery/agent_manage_district_auth)
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://192.168.1.181:3306/xiaoqu_comples_d?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: ${M0_DB_USERNAME}
password: ${M0_DB_PASSWORD}
username: root
password: kaixinjiuhao
m1: # 商城库 xiaoqu_mall_d(按需启用)
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://192.168.1.181:3306/xiaoqu_mall_d?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: ${M1_DB_USERNAME}
password: ${M1_DB_PASSWORD}
username: root
password: kaixinjiuhao
m2: # 业务库 xiaoqu_franchisee_d(warehouse_agent_auth 等)
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://192.168.1.181:3306/xiaoqu_franchisee_d?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: ${M2_DB_USERNAME}
password: ${M2_DB_PASSWORD}
username: root
password: kaixinjiuhao
svc: # 自有库 xiaoqu_agent_svc_d(token/scope/tool/audit,读写)
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://192.168.1.181:3306/xiaoqu_agent_svc_d?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: ${SVC_DB_USERNAME}
password: ${SVC_DB_PASSWORD}
username: root
password: kaixinjiuhao
spring:
data:
redis:
host: 192.168.1.181
port: 6379
password: ${REDIS_PASSWORD}
password: kaixinjiuhao
database: 5
timeout: 5s
@@ -11,8 +11,6 @@ import static org.junit.jupiter.api.Assertions.assertFalse;
class ConfigurationSecurityTest {
private static final Pattern PASSWORD_WITH_DEFAULT =
Pattern.compile("password:\\s*\\$\\{[^}:]+:[^}]+}");
private static final Pattern COMMITTED_AK =
Pattern.compile("xqak_[0-9a-f]{20,}");
@@ -24,11 +22,11 @@ class ConfigurationSecurityTest {
}
@Test
void devConfigurationHasNoRootUserOrPasswordDefaults() throws IOException {
String application = Files.readString(Path.of("src/main/resources/application-dev.yml"));
void baseConfigurationHasNoPlaintextPassword() throws IOException {
// dev 允许明文(内网库,与 xiaoqu-franchisee pom dev 同一惯例);公共 application.yml 不允许
String application = Files.readString(Path.of("src/main/resources/application.yml"));
assertFalse(application.contains("username: root"));
assertFalse(PASSWORD_WITH_DEFAULT.matcher(application).find());
assertFalse(application.contains("password: kaixinjiuhao"));
}
@Test
@@ -94,7 +94,7 @@ xq CLI ─────┘ (Go 单二进制, 同为 MCP 客户端) ┌──
| ES | 部分列表查询 | 预留,一期可后置 |
- 全部使用**只读数据库账号**(物理封死误写);将来写工具单独配有写权限的账号。
- 配置按环境分文件(dev/test/prd),密码走环境变量,对齐现有 Maven profile 注入方式。
- 配置按环境分文件(dev/test/prd);dev 环境密码明文写在 `application-dev.yml`(内网 dev 库,与现有 pom.xml dev profile 明文同一惯例),生产/测试环境不得在配置文件写明文密码。
### 4.1 Entity 生成
@@ -237,7 +237,7 @@ xiaoqu-agent-service/
| Redis | 192.168.1.181:6379 | 密码见 pom dev | db5(`entity:User:{id}`、Dictionary)、db13 |
| ES | 192.168.1.152:9200 | 无认证 | 预留,一期不用 |
- 密码等敏感值不入库本文档,以 `pom.xml` dev profile 为准;新系统 `application-dev.yml` 引用同名环境变量。
- 密码等敏感值不入库本文档;dev 环境 DB/Redis 连接信息明文写在新系统 `application-dev.yml`(内网 dev 库,与 `pom.xml` dev profile 明文同一惯例)。
- 自有库表(§7)建在同实例新 schema:dev 用 `xiaoqu_agent_svc_d`(沿用 `_d` 后缀约定),首次部署前手工建库。
- 新系统与老的 dev 后端(Jetty 8091)可同时运行,互不干扰——注意两边连的是**同一套** dev 数据库和 Redis,老系统dev库的数据变动会同时影响两边的查询结果。