服务器上只安装 Docker,不依赖 1Panel、宿主机 Nginx 等额外工具。
项目所有服务(前端、后端、数据库、反向代理)全部由 Docker Compose 管理,nginx 容器作为唯一对外入口。
使用文件:docker/docker-compose.yml
外部请求(80 端口)
│
yunyu-nginx(nginx:alpine)
│
┌────┴────────────────┐
│ /api/* │ 其余请求
▼ ▼
yunyu-server-native yunyu-web
(:20000) (:3000)
│
yunyu-mysql
(内部,不对外)
- yunyu-nginx:唯一对外暴露 80 端口的容器,负责路由分发
- yunyu-web:Nuxt SSR 前端,不对外暴露端口
- yunyu-server-native:Spring Boot Native 后端,不对外暴露端口
- yunyu-mysql:数据库,不对外暴露端口
前后端同域(同一个 IP/域名),浏览器请求
/api/*经 nginx 转发给后端,无跨域问题,NUXT_PUBLIC_API_BASE留空即可。
确认服务器已安装:
git --version
docker --version
docker compose version只需要
docker/目录,可用 sparse-checkout 只下载该目录(注意:Git 2.25.x 有已知 bug,需拆步执行):
# 克隆仓库元数据(不下载任何文件内容,速度极快)
git clone --filter=blob:none --no-checkout https://github.com/Idea-flow/Yunyu.git
# 进入仓库目录
cd Yunyu
# 启用 sparse-checkout,--cone 模式按目录粒度过滤(性能更好)
git sparse-checkout init --cone
# 声明只需要 docker 这一个目录
git sparse-checkout set docker
# 实际检出文件(此时只会下载 docker/ 目录的内容)
git checkout main也可以完整克隆(包含所有源码):
git clone https://github.com/Idea-flow/Yunyu.git
cd Yunyumkdir -p yunyu_mysql_datacp docker/.env.example docker/.env修改 docker/.env,至少替换以下三项(其余保持默认即可):
MYSQL_PASSWORD=你的数据库密码
MYSQL_ROOT_PASSWORD=你的Root密码
YUNYU_JWT_SECRET=openssl rand -hex 32 生成的64位字符串
YUNYU_PUBLIC_API_BASE留空即可,前后端同域通过 nginx 内部转发。
docker compose -f docker/docker-compose.yml pull
docker compose -f docker/docker-compose.yml up -ddocker compose -f docker/docker-compose.yml ps
docker compose -f docker/docker-compose.yml logs -fhttp://服务器IP
curl http://服务器IP/actuator/healthdocker exec yunyu-server-native wget -qO- http://localhost:20000/actuator/health若需要 HTTPS,有两种方式:
Cloudflare 开启代理模式(橙色云朵),自动提供 HTTPS,服务器只需保持 80 端口正常响应。无需修改 nginx 配置。
- 将证书文件挂载进 nginx 容器
- 修改
docker/nginx/nginx.conf,添加 443 监听与 ssl 配置 - 重启 nginx 容器:
docker compose -f docker/docker-compose.yml restart yunyu-nginx
docker compose -f docker/docker-compose.yml pull
docker compose -f docker/docker-compose.yml up -ddocker compose -f docker/docker-compose.yml logs -f yunyu-server-native
docker compose -f docker/docker-compose.yml logs -f yunyu-web
docker compose -f docker/docker-compose.yml logs -f yunyu-nginxdocker compose -f docker/docker-compose.yml restart yunyu-nginxdocker compose -f docker/docker-compose.yml down部署完成后,系统在首次启动时自动创建默认超级管理员账号,无需手动注册或导入数据。
| 字段 | 值 |
|---|---|
| 账号(邮箱) | yunyu |
| 密码 | yunyu |
| 角色 | 超级管理员(SUPER_ADMIN) |
重要:首次部署后请立即登录后台修改密码,避免使用默认弱密码运行在公网环境。
后端服务启动时会自动检查数据库状态:
- 数据库不存在 → 自动建库建表
- 不存在超级管理员账号 → 自动创建默认管理员
yunyu / yunyu - 已存在超级管理员账号 → 跳过,不重复创建
因此,正常部署后首次访问后台即可用 yunyu / yunyu 登录,不需要注册,也不存在"第一个注册用户成为管理员"的逻辑。
- 正式环境必须修改
MYSQL_PASSWORD、MYSQL_ROOT_PASSWORD、YUNYU_JWT_SECRET - 不要执行
docker compose down -v,会删除数据库 volume - 不要误删
yunyu_mysql_data目录 - nginx 配置文件位于
docker/nginx/nginx.conf,修改后需重启 nginx 容器 - 若需要开放后端端口给外部直接访问,在
.env中设置SERVER_PORT=20000并在docker-compose.yml的yunyu-server-native下手动添加ports(不建议生产环境这样做) - 若服务器 80 端口已被占用,启动时 nginx 容器会报端口冲突错误。在
.env中修改NGINX_HTTP_PORT换用其他端口即可,例如:之后访问地址变为NGINX_HTTP_PORT=8080
http://服务器IP:8080。数据库 3306 端口不受影响,MySQL 容器不对外暴露端口,只在内部网络中通信。