chore(config): Make Nacos namespace configurable

- Replace hardcoded public namespace with NACOS_NAMESPACE
- Document nacos init container troubleshooting for 1Panel deploy
This commit is contained in:
Toys-A
2026-08-07 03:04:33 +08:00
parent 16e9d7f9bd
commit 05988c4325
21 changed files with 217 additions and 41 deletions
+84 -3
View File
@@ -385,7 +385,15 @@ dependency failed to start: container haovp-nacos is unhealthy
新版编排不再让业务服务等待 Nacos `healthy`,也不再给 Nacos 配置 Docker healthcheck。这样可以避免 1Panel 因 Nacos 启动慢而判定整个编排失败。同步新版 `docker-compose.1panel.yml` 后,需要删除失败编排或重新创建容器,让新的依赖策略生效。
如果仍失败,查看 Nacos 容器内部日志:
现在编排里新增了 `haovp-nacos-init` 一次性初始化容器。它会先创建 `nacos_config` 库和表,再决定是否导入默认 Nacos 配置。
如果仍失败,优先查看初始化容器日志:
```bash
docker logs --tail 200 haovp-nacos-init
```
再查看 Nacos 容器内部日志:
```bash
docker logs --tail 200 haovp-nacos
@@ -396,8 +404,9 @@ docker logs --tail 200 haovp-nacos
| 问题 | 处理 |
| --- | --- |
| `NACOS_AUTH_TOKEN` 相关报错 | 确认 `.env.1panel` 中 `NACOS_AUTH_TOKEN` 是 Base64,且解码后至少 32 字节 |
| `No DataSource set` | 先确认服务器上的 `backend/config/nacos/application-1panel.properties` 是“文件”而不是目录,再确认它被挂载到 `/home/nacos/conf/application.properties`,最后用 `--force-recreate` 重建 `haovp-nacos` |
| 数据库连接失败 | 确认 `haovp-mysql` 正常,且首次初始化没有被中断 |
| `No DataSource set` | 先确认服务器上的 `backend/config/nacos/application-1panel.properties` 是“文件”而不是目录,再确认它被挂载到 `/home/nacos/conf/application.properties`,然后看 `haovp-nacos-init` 是否成功完成 |
| 数据库连接失败 | 确认 `haovp-mysql` 正常,且 `haovp-nacos-init` 能连上 MySQL |
| 业务服务短暂报 `nacos:9848 Connection refused` | Nacos 2.x 客户端会连接 `8848 + 1000 = 9848` 的 gRPC 端口。启动早期短暂失败后出现 `Success to connect a server [nacos:8848]` 即为自动恢复 |
| 端口占用 | 确认宿主机 `8848` 未被其他服务占用,或修改 `NACOS_HTTP_PORT` |
推荐的检查顺序:
@@ -405,13 +414,63 @@ docker logs --tail 200 haovp-nacos
```bash
ls -l /opt/HAOVP/backend/config/nacos/application-1panel.properties
docker inspect haovp-nacos --format '{{range .Mounts}}{{println .Source "->" .Destination}}{{end}}'
docker logs --tail 200 haovp-nacos-init
docker rm -f haovp-nacos
docker rm -f haovp-nacos-init
docker compose --env-file .env.1panel -f docker-compose.1panel.yml up -d --force-recreate nacos
docker logs --tail 200 haovp-nacos
```
如果 `application-1panel.properties` 在服务器上不存在,Docker 可能会把挂载源当成目录处理,Nacos 就还是读不到数据源配置。
如果使用了编排里的 `JAVA_OPT_EXT` 兜底,Nacos 启动日志的 `exec java ...` 行里应出现 `--nacos.plugin.datasource.db.url.0=jdbc:mysql://mysql:3306/nacos_config...`。Nacos Docker 启动脚本会把 `JAVA_OPT_EXT` 追加到 `-jar nacos-server.jar` 后面,所以这里必须按 Spring Boot 命令行参数传入。
如果挂载和启动参数都正确,但仍然是 `No DataSource set`,继续检查 MySQL 里的 Nacos 库表。1Panel 反复创建编排时,`mysql_data` volume 如果已经存在,`/docker-entrypoint-initdb.d/` 下的初始化 SQL 不会再次自动执行:
```bash
cd /opt/HAOVP/backend
set -a
source .env.1panel
set +a
docker exec haovp-mysql mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "
SHOW DATABASES LIKE 'nacos_config';
SELECT TABLE_NAME FROM information_schema.TABLES
WHERE TABLE_SCHEMA='nacos_config'
AND TABLE_NAME IN ('config_info','config_info_beta','users','roles');
SELECT COUNT(*) AS config_count FROM nacos_config.config_info;
"
```
如果缺库或缺表,手动补执行初始化:
```bash
docker exec -i haovp-mysql mysql --default-character-set=utf8mb4 -uroot -p"$MYSQL_ROOT_PASSWORD" < ./sql/nacos-schema.sql
docker exec -i haovp-mysql mysql --default-character-set=utf8mb4 -uroot -p"$MYSQL_ROOT_PASSWORD" --force nacos_config < ./sql/nacos-config-init.sql
docker rm -f haovp-nacos
docker compose --env-file .env.1panel -f docker-compose.1panel.yml up -d --force-recreate nacos
```
如果业务服务日志出现 `org.yaml.snakeyaml.parser.ParserException`,并指向 `video-gateway.yaml` 的 `response-body`,说明 Nacos 中已有的配置内容还是旧的错误引号。检查当前内容:
```bash
docker exec haovp-mysql mysql --default-character-set=utf8mb4 -uroot -p"$MYSQL_ROOT_PASSWORD" -N -s -e "SELECT content FROM nacos_config.config_info WHERE data_id='video-gateway.yaml';" | sed -n '50,62p'
```
正确内容应类似:
```yaml
mode: response
response-body: '{"code":500,"message":"服务不可用,请稍后再试"}'
```
如果不是这个格式,在 Nacos 控制台修正 `video-gateway.yaml` 后重启网关:
```bash
docker restart haovp-video-gateway
curl -i "http://127.0.0.1:${GATEWAY_HTTP_PORT:-9000}/recommend/home?page=1&size=12"
```
### 拉取 `haovp/video-*` 镜像失败
如果 1Panel 报错类似:
@@ -456,6 +515,28 @@ docker logs haovp-video-content
前端 Nginx 会把用户端 `/api/auth/login` 转发为网关 `/auth/login`,把管理端 `/api/admin/auth/login` 转发为网关 `/admin/auth/login`。
### 前端接口 502
如果 `curl http://127.0.0.1:${WEB_HTTP_PORT:-18180}/health` 正常,但 `/api/...` 返回 `502 Bad Gateway`,先看前端 Nginx 日志:
```bash
docker logs --tail 120 haovp-frontend-web
```
如果出现 `connect() failed (111: Connection refused) while connecting to upstream`,且 upstream 指向旧的 Docker 内网 IP,说明前端 Nginx 缓存了重建前的 gateway 地址。新版 `nginx.1panel.conf` 已使用 Docker DNS 动态解析;同步配置并重建前端,临时恢复可先执行:
```bash
docker restart haovp-frontend-web
```
如果直连网关仍是 404:
```bash
curl -i "http://127.0.0.1:${GATEWAY_HTTP_PORT:-9000}/recommend/home?page=1&size=12"
```
返回 `No static resource recommend/home` 时,表示 gateway 没加载到 `/recommend/**` 路由,优先按上面的 `video-gateway.yaml` 检查 Nacos 配置。
### 图片或视频无法访问
前端使用: