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
This commit is contained in:
Toys-A
2026-08-06 17:11:11 +08:00
parent 53e309026f
commit 16e9d7f9bd
4 changed files with 87 additions and 14 deletions
+50 -1
View File
@@ -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 报错类似:
+1 -1
View File
@@ -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
@@ -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}
+9 -12
View File
@@ -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: