Skip to content

Latest commit

 

History

History
222 lines (151 loc) · 5.93 KB

File metadata and controls

222 lines (151 loc) · 5.93 KB

纯 Docker 模式部署说明(nginx 统一入口)

适用场景

服务器上只安装 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

三、部署步骤

步骤 1:克隆仓库

只需要 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 Yunyu

步骤 2:创建数据库目录

mkdir -p yunyu_mysql_data

步骤 3:创建 .env 配置文件

cp 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 内部转发。

步骤 4:启动所有服务

docker compose -f docker/docker-compose.yml pull
docker compose -f docker/docker-compose.yml up -d

步骤 5:查看启动状态

docker compose -f docker/docker-compose.yml ps
docker compose -f docker/docker-compose.yml logs -f

四、验证

访问前端

http://服务器IP

后端健康检查(经由 nginx 转发)

curl http://服务器IP/actuator/health

直接验证后端(跳过 nginx,容器内部)

docker exec yunyu-server-native wget -qO- http://localhost:20000/actuator/health

五、配置 HTTPS(可选)

若需要 HTTPS,有两种方式:

方式 A:在服务器前置 Cloudflare(推荐)

Cloudflare 开启代理模式(橙色云朵),自动提供 HTTPS,服务器只需保持 80 端口正常响应。无需修改 nginx 配置。

方式 B:修改 nginx.conf 加载 SSL 证书

  1. 将证书文件挂载进 nginx 容器
  2. 修改 docker/nginx/nginx.conf,添加 443 监听与 ssl 配置
  3. 重启 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 -d

查看某个服务日志

docker 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-nginx

重启某个服务

docker compose -f docker/docker-compose.yml restart yunyu-nginx

停止所有服务(不删数据)

docker compose -f docker/docker-compose.yml down

七、管理员账号

部署完成后,系统在首次启动时自动创建默认超级管理员账号,无需手动注册或导入数据。

字段
账号(邮箱) yunyu
密码 yunyu
角色 超级管理员(SUPER_ADMIN)

重要:首次部署后请立即登录后台修改密码,避免使用默认弱密码运行在公网环境。

账号创建逻辑

后端服务启动时会自动检查数据库状态:

  1. 数据库不存在 → 自动建库建表
  2. 不存在超级管理员账号 → 自动创建默认管理员 yunyu / yunyu
  3. 已存在超级管理员账号 → 跳过,不重复创建

因此,正常部署后首次访问后台即可用 yunyu / yunyu 登录,不需要注册,也不存在"第一个注册用户成为管理员"的逻辑。


八、注意事项

  1. 正式环境必须修改 MYSQL_PASSWORDMYSQL_ROOT_PASSWORDYUNYU_JWT_SECRET
  2. 不要执行 docker compose down -v,会删除数据库 volume
  3. 不要误删 yunyu_mysql_data 目录
  4. nginx 配置文件位于 docker/nginx/nginx.conf,修改后需重启 nginx 容器
  5. 若需要开放后端端口给外部直接访问,在 .env 中设置 SERVER_PORT=20000 并在 docker-compose.ymlyunyu-server-native 下手动添加 ports(不建议生产环境这样做)
  6. 若服务器 80 端口已被占用,启动时 nginx 容器会报端口冲突错误。在 .env 中修改 NGINX_HTTP_PORT 换用其他端口即可,例如:
    NGINX_HTTP_PORT=8080
    之后访问地址变为 http://服务器IP:8080。数据库 3306 端口不受影响,MySQL 容器不对外暴露端口,只在内部网络中通信。