From 16e9d7f9bd7adb301b0358ac66bba8bd97041253 Mon Sep 17 00:00:00 2001 From: Toys-A Date: Thu, 6 Aug 2026 17:11:11 +0800 Subject: [PATCH] fix(deploy): Correct 1Panel service configuration - Require a valid Base64 Nacos auth token in examples and docs - Mount Nacos application config for 1Panel deployments - Adjust service health checks and startup dependencies --- DEPLOY_1PANEL.md | 51 ++++++++++++++++++- backend/.env.1panel.example | 2 +- .../nacos/application-1panel.properties | 27 ++++++++++ backend/docker-compose.1panel.yml | 21 ++++---- 4 files changed, 87 insertions(+), 14 deletions(-) create mode 100644 backend/config/nacos/application-1panel.properties diff --git a/DEPLOY_1PANEL.md b/DEPLOY_1PANEL.md index 966d45d..abf0711 100644 --- a/DEPLOY_1PANEL.md +++ b/DEPLOY_1PANEL.md @@ -126,10 +126,22 @@ USER_JWT_SECRET=至少32字节随机字符串 ADMIN_JWT_SECRET=至少32字节随机字符串 SERVICE_AUTH_TOKEN=至少32字节随机字符串 ADMIN_INIT_PASSWORD=后台管理员初始密码 -NACOS_AUTH_TOKEN=至少32字节随机字符串 +NACOS_AUTH_TOKEN=Base64编码且解码后至少32字节的随机字符串 GRAFANA_ADMIN_PASSWORD=强密码 ``` +生成 Nacos token: + +```bash +openssl rand -base64 32 +``` + +示例值: + +```env +NACOS_AUTH_TOKEN=U0VDUkVUS0VZMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkw +``` + 国内服务器建议保留默认 Maven 镜像: ```env @@ -363,6 +375,43 @@ MAVEN_MIRROR_URL=https://maven.aliyun.com/repository/public 修改 `.env.1panel` 后,需要在 1Panel 中重新构建编排。 +### Nacos 显示 unhealthy + +如果 1Panel 日志出现: + +```text +dependency failed to start: container haovp-nacos is unhealthy +``` + +新版编排不再让业务服务等待 Nacos `healthy`,也不再给 Nacos 配置 Docker healthcheck。这样可以避免 1Panel 因 Nacos 启动慢而判定整个编排失败。同步新版 `docker-compose.1panel.yml` 后,需要删除失败编排或重新创建容器,让新的依赖策略生效。 + +如果仍失败,查看 Nacos 容器内部日志: + +```bash +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` 正常,且首次初始化没有被中断 | +| 端口占用 | 确认宿主机 `8848` 未被其他服务占用,或修改 `NACOS_HTTP_PORT` | + +推荐的检查顺序: + +```bash +ls -l /opt/HAOVP/backend/config/nacos/application-1panel.properties +docker inspect haovp-nacos --format '{{range .Mounts}}{{println .Source "->" .Destination}}{{end}}' +docker rm -f haovp-nacos +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 就还是读不到数据源配置。 + ### 拉取 `haovp/video-*` 镜像失败 如果 1Panel 报错类似: diff --git a/backend/.env.1panel.example b/backend/.env.1panel.example index 73cf306..0f2bf31 100644 --- a/backend/.env.1panel.example +++ b/backend/.env.1panel.example @@ -15,7 +15,7 @@ JWT_EXPIRATION=86400 NACOS_USERNAME=nacos NACOS_PASSWORD=nacos -NACOS_AUTH_TOKEN=change-me-nacos-auth-token-at-least-32-bytes-long +NACOS_AUTH_TOKEN=U0VDUkVUS0VZMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkw GRAFANA_ADMIN_USER=admin GRAFANA_ADMIN_PASSWORD=change-me-grafana-password diff --git a/backend/config/nacos/application-1panel.properties b/backend/config/nacos/application-1panel.properties new file mode 100644 index 0000000..a78fe9e --- /dev/null +++ b/backend/config/nacos/application-1panel.properties @@ -0,0 +1,27 @@ +server.servlet.contextPath=/nacos +server.port=8848 + +spring.datasource.platform=mysql +spring.sql.init.platform=mysql + +nacos.plugin.datasource-dialect.type=mysql +nacos.plugin.datasource.db.num=1 +nacos.plugin.datasource.db.url.0=jdbc:mysql://${MYSQL_SERVICE_HOST:mysql}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME:nacos_config}?characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true +nacos.plugin.datasource.db.user=${MYSQL_SERVICE_USER:root} +nacos.plugin.datasource.db.password=${MYSQL_SERVICE_PASSWORD} + +db.num=1 +db.url.0=jdbc:mysql://${MYSQL_SERVICE_HOST:mysql}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME:nacos_config}?characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true +db.user.0=${MYSQL_SERVICE_USER:root} +db.password.0=${MYSQL_SERVICE_PASSWORD} +db.user=${MYSQL_SERVICE_USER:root} +db.password=${MYSQL_SERVICE_PASSWORD} + +management.endpoints.web.exposure.include=* +management.metrics.export.elastic.enabled=false +management.metrics.export.influx.enabled=false + +nacos.core.auth.enabled=${NACOS_AUTH_ENABLE:true} +nacos.core.auth.server.identity.key=${NACOS_AUTH_IDENTITY_KEY:serverIdentity} +nacos.core.auth.server.identity.value=${NACOS_AUTH_IDENTITY_VALUE:security} +nacos.core.auth.plugin.nacos.token.secret.key=${NACOS_AUTH_TOKEN} diff --git a/backend/docker-compose.1panel.yml b/backend/docker-compose.1panel.yml index 5f85eaf..0ddcdd2 100644 --- a/backend/docker-compose.1panel.yml +++ b/backend/docker-compose.1panel.yml @@ -110,14 +110,11 @@ services: PREFER_HOST_MODE: hostname ports: - "${LOCAL_BIND_ADDR:-127.0.0.1}:${NACOS_HTTP_PORT:-8848}:8848" + volumes: + - ./config/nacos/application-1panel.properties:/home/nacos/conf/application.properties:ro depends_on: mysql: condition: service_healthy - healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:8848/nacos/v1/console/health/liveness"] - interval: 10s - timeout: 5s - retries: 15 networks: - haovp-network @@ -231,7 +228,7 @@ services: - "${LOCAL_BIND_ADDR:-127.0.0.1}:${GATEWAY_HTTP_PORT:-9000}:9000" depends_on: nacos: - condition: service_healthy + condition: service_started redis-sentinel: condition: service_started networks: @@ -253,7 +250,7 @@ services: JAVA_OPTS: ${AUTH_JAVA_OPTS:--Xms128m -Xmx256m} depends_on: nacos: - condition: service_healthy + condition: service_started mysql: condition: service_healthy redis-sentinel: @@ -282,7 +279,7 @@ services: JAVA_OPTS: ${USER_JAVA_OPTS:--Xms128m -Xmx256m} depends_on: nacos: - condition: service_healthy + condition: service_started mysql: condition: service_healthy redis-sentinel: @@ -317,7 +314,7 @@ services: JAVA_OPTS: ${CONTENT_JAVA_OPTS:--Xms256m -Xmx512m} depends_on: nacos: - condition: service_healthy + condition: service_started mysql: condition: service_healthy redis-sentinel: @@ -345,7 +342,7 @@ services: JAVA_OPTS: ${COMMENT_JAVA_OPTS:--Xms128m -Xmx256m} depends_on: nacos: - condition: service_healthy + condition: service_started mysql: condition: service_healthy redis-sentinel: @@ -369,7 +366,7 @@ services: JAVA_OPTS: ${RECOMMEND_JAVA_OPTS:--Xms128m -Xmx256m} depends_on: nacos: - condition: service_healthy + condition: service_started mysql: condition: service_healthy redis-sentinel: @@ -395,7 +392,7 @@ services: JAVA_OPTS: ${ADMIN_JAVA_OPTS:--Xms128m -Xmx256m} depends_on: nacos: - condition: service_healthy + condition: service_started mysql: condition: service_healthy redis-sentinel: