- Add Docker Compose stack for single-server 1Panel deployments - Add backend and frontend Dockerfiles for 1Panel builds - Add Nginx and RocketMQ configuration for container orchestration - Document required environment variables and deployment steps
9.0 KiB
HAOVP 1Panel 单机部署指南
本文档面向一台服务器上的 1Panel 部署。目标是用 1Panel 的容器编排启动后端、基础设施、前端 Nginx,并用 1Panel 网站/OpenResty 对外提供域名访问。
1. 部署结构
默认编排文件:
backend/docker-compose.1panel.yml
配套文件:
backend/.env.1panel.example
backend/Dockerfile.service.1panel
backend/config/rocketmq/broker-1panel.conf
frontend/video-frontend-web/Dockerfile.1panel
frontend/video-frontend-web/deploy/nginx.1panel.conf
frontend/video-frontend-admin/Dockerfile.1panel
frontend/video-frontend-admin/deploy/nginx.1panel.conf
默认服务分层:
| 层级 | 服务 |
|---|---|
| 基础设施 | MySQL, Redis, Redis Sentinel, Nacos, RocketMQ, MinIO, Sentinel Dashboard |
| 后端 | video-gateway, video-auth, video-user, video-content, video-comment, video-recommend, video-admin |
| 前端 | frontend-web, frontend-admin |
| 可选监控 | Prometheus, Grafana, exporters,默认不启动 |
2. 服务器要求
建议配置:
| 用途 | 建议 |
|---|---|
| CPU | 最低 4 核,建议 8 核 |
| 内存 | 最低 8 GB,建议 16 GB |
| 磁盘 | 最低 80 GB,视频上传环境建议更大 |
| 系统 | Debian 12 / Ubuntu 22.04+ / CentOS Stream 类系统 |
1Panel 需已安装 Docker 和 OpenResty。首次构建后端镜像会下载 Maven 依赖,耗时较长。
3. 端口策略
1Panel 版默认不直接占用公网 80/443,避免和 1Panel OpenResty 冲突。
默认端口绑定:
| 服务 | 宿主机绑定 | 说明 |
|---|---|---|
| 用户前端 | 127.0.0.1:18080 |
给 1Panel 网站反代 |
| 管理前端 | 127.0.0.1:18081 |
给 1Panel 网站反代 |
| API Gateway | 127.0.0.1:9000 |
调试用,不建议公网开放 |
| Nacos | 127.0.0.1:8848 |
控制台,仅本机 |
| MinIO API | 127.0.0.1:9100 |
对象存储 API,仅本机 |
| MinIO Console | 127.0.0.1:9101 |
控制台,仅本机 |
| Sentinel | 127.0.0.1:8880 |
控制台,仅本机 |
| Prometheus | 127.0.0.1:9090 |
可选监控 |
| Grafana | 127.0.0.1:3000 |
可选监控 |
生产环境防火墙建议只放行:
80/tcp
443/tcp
1Panel 面板端口
SSH 端口
不要把 MySQL、Redis、Nacos、RocketMQ、MinIO Console 直接暴露到公网。
如确需临时从外部访问前端容器端口,可在 .env.1panel 中把:
FRONTEND_BIND_ADDR=127.0.0.1
改为:
FRONTEND_BIND_ADDR=0.0.0.0
不建议在生产长期这样配置。
4. 上传项目
在服务器上准备项目目录,例如:
cd /opt
git clone <你的仓库地址> HAOVP
cd /opt/HAOVP/backend
如果通过 1Panel 文件管理上传压缩包,保证目录结构仍然是:
/opt/HAOVP/backend
/opt/HAOVP/frontend
因为 docker-compose.1panel.yml 会从 ../frontend/... 构建前端镜像。
5. 配置环境变量
复制示例文件:
cd /opt/HAOVP/backend
cp .env.1panel.example .env.1panel
必须修改这些值:
MYSQL_ROOT_PASSWORD=强密码
MYSQL_APP_PASSWORD=强密码
REDIS_PASSWORD=强密码
MINIO_SECRET_KEY=强密码
USER_JWT_SECRET=至少32字节随机字符串
ADMIN_JWT_SECRET=至少32字节随机字符串
SERVICE_AUTH_TOKEN=至少32字节随机字符串
ADMIN_INIT_PASSWORD=后台管理员初始密码
NACOS_AUTH_TOKEN=至少32字节随机字符串
GRAFANA_ADMIN_PASSWORD=强密码
首次部署建议保持:
NACOS_USERNAME=nacos
NACOS_PASSWORD=nacos
原因:Nacos 默认初始化用户是 nacos/nacos。如果想改 Nacos 密码,先部署成功,再进入 Nacos 控制台修改用户密码,并同步更新 .env.1panel 后重启后端微服务。
6. 在 1Panel 创建编排
进入 1Panel:
容器 -> 编排 -> 创建编排
推荐配置:
| 项 | 值 |
|---|---|
| 名称 | haovp-1panel |
| 工作目录 | /opt/HAOVP/backend |
| Compose 文件 | docker-compose.1panel.yml |
| 环境变量文件 | .env.1panel |
创建后启动编排。
首次构建会执行:
| 镜像 | 构建内容 |
|---|---|
| 后端微服务 | Maven 多阶段构建 |
| 用户前端 | Node 构建 Vue/Vite,然后 Nginx 托管 |
| 管理前端 | Node 构建 Vue/Vite,然后 Nginx 托管 |
| Sentinel Dashboard | 下载并打包 Sentinel Dashboard |
如果服务器网络访问 Maven/npm/Docker Hub 较慢,首次构建可能需要较长时间。
7. 配置 1Panel 网站反代
推荐用两个域名:
www.example.com -> 用户端
admin.example.com -> 管理端
用户端
在 1Panel 创建反向代理网站:
| 项 | 值 |
|---|---|
| 主域名 | www.example.com |
| 代理地址 | http://127.0.0.1:18080 |
管理端
在 1Panel 创建反向代理网站:
| 项 | 值 |
|---|---|
| 主域名 | admin.example.com |
| 代理地址 | http://127.0.0.1:18081 |
然后在两个网站里申请 HTTPS 证书。
前端容器内部已经处理:
| 路径 | 转发目标 |
|---|---|
用户端 /api/* |
video-gateway:9000/* |
管理端 /api/admin/* |
video-gateway:9000/admin/* |
/media/* |
minio:9000/* |
所以 1Panel OpenResty 只需要代理到前端容器端口,不需要再单独配置 /api。
8. 启动验证
在服务器执行:
cd /opt/HAOVP/backend
docker compose --env-file .env.1panel -f docker-compose.1panel.yml ps
查看关键日志:
docker logs -f haovp-mysql
docker logs -f haovp-nacos
docker logs -f haovp-video-gateway
docker logs -f haovp-video-content
本机健康检查:
curl http://127.0.0.1:18080/health
curl http://127.0.0.1:18081/health
curl http://127.0.0.1:9000/actuator/health
浏览器访问:
https://www.example.com
https://admin.example.com
Nacos 控制台仅建议本机 SSH 隧道或 1Panel 终端访问:
http://127.0.0.1:8848/nacos
9. 可选启用监控
默认不会启动 Prometheus/Grafana,节省单机资源。
命令行启用:
cd /opt/HAOVP/backend
COMPOSE_PROFILES=monitoring docker compose --env-file .env.1panel -f docker-compose.1panel.yml up -d
1Panel 中可在环境变量里增加:
COMPOSE_PROFILES=monitoring
Grafana 默认本机端口:
http://127.0.0.1:3000
不建议直接公网开放 Grafana。
10. 更新部署
拉取代码后重新构建:
cd /opt/HAOVP
git pull
cd backend
docker compose --env-file .env.1panel -f docker-compose.1panel.yml up -d --build
只重启某个服务:
docker compose --env-file .env.1panel -f docker-compose.1panel.yml restart video-gateway
查看资源占用:
docker stats
11. 数据备份
先加载部署环境变量:
cd /opt/HAOVP/backend
set -a
source .env.1panel
set +a
MySQL:
docker exec haovp-mysql mysqldump -uroot -p"$MYSQL_ROOT_PASSWORD" --all-databases > haovp_mysql_$(date +%F).sql
Redis:
docker exec haovp-redis redis-cli -a "$REDIS_PASSWORD" BGSAVE
docker cp haovp-redis:/data/dump.rdb haovp_redis_$(date +%F).rdb
MinIO:
docker run --rm --network haovp-1panel_haovp-network -v "$PWD/backup:/backup" minio/mc sh -c \
"mc alias set local http://minio:9000 $MINIO_ACCESS_KEY $MINIO_SECRET_KEY && mc mirror local/$MINIO_BUCKET /backup/$MINIO_BUCKET"
也可以直接备份 Docker volume,但数据库类服务建议优先使用逻辑备份。
12. 常见问题
首次启动很慢
后端镜像会在 Docker 构建阶段执行 Maven 构建,前端镜像会执行 npm 构建。国内服务器建议提前配置 Docker、Maven、npm 镜像源,或在 CI 中构建镜像后推送到私有镜像仓库。
后端连接 RocketMQ 失败
1Panel 版已使用单机配置:
backend/config/rocketmq/broker-1panel.conf
NAMESRV_ADDR=rmqnamesrv:9876
如果仍失败,检查:
docker logs haovp-rmqnamesrv
docker logs haovp-rmqbroker
docker logs haovp-video-content
前端接口 404
确认前端环境变量没有改错:
| 前端 | 构建参数 |
|---|---|
| 用户端 | VITE_API_BASE_URL=/api |
| 管理端 | VITE_API_BASE_URL=/api/admin |
前端 Nginx 会把用户端 /api/auth/login 转发为网关 /auth/login,把管理端 /api/admin/auth/login 转发为网关 /admin/auth/login。
图片或视频无法访问
前端使用:
VITE_MEDIA_BASE_URL=/media/video-platform
前端 Nginx 会把 /media/video-platform/... 转发到 MinIO 的 /video-platform/...。确认 minio-init 已成功创建 bucket:
docker logs haovp-minio-init
Nacos 密码修改后服务启动失败
如果在 Nacos 控制台改了 nacos 用户密码,必须同步修改 .env.1panel:
NACOS_PASSWORD=新密码
然后重启后端服务:
docker compose --env-file .env.1panel -f docker-compose.1panel.yml restart video-gateway video-auth video-user video-content video-comment video-recommend video-admin
内存不足
降低 .env.1panel 中各服务 JVM 参数,例如:
CONTENT_JAVA_OPTS=-Xms128m -Xmx384m
AUTH_JAVA_OPTS=-Xms96m -Xmx192m
同时不要启用 monitoring profile。