From d9a9a7f0f053a105a9ab8d2c1e1f3d6fb57c6f32 Mon Sep 17 00:00:00 2001 From: ageerle Date: Fri, 24 Oct 2025 10:32:28 +0800 Subject: [PATCH] =?UTF-8?q?feat(docs):=20=E6=9B=B4=E6=96=B0docker=E6=95=99?= =?UTF-8?q?=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/RuoYi-AI 后端服务镜像拉取与部署教程.docx | Bin 0 -> 6219 bytes .../RuoYi-AI 后端部署教程(Docker 部署版).md | 222 ++++++++++++++++++ 2 files changed, 222 insertions(+) create mode 100644 docs/RuoYi-AI 后端服务镜像拉取与部署教程.docx create mode 100644 docs/RuoYi-AI 后端部署教程(Docker 部署版).md diff --git a/docs/RuoYi-AI 后端服务镜像拉取与部署教程.docx b/docs/RuoYi-AI 后端服务镜像拉取与部署教程.docx new file mode 100644 index 0000000000000000000000000000000000000000..503e6e41133782e0e8f44af58fb553c71a4c6e06 GIT binary patch literal 6219 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 💡 `data` 目录用于挂载容器运行期间生成的数据文件。 + +最终目录结构示例: + +``` +/ruoyi-ai + └── deploy + ├── data/ + ├── mysql-init/ + ├── logs/ + ├── minio/ + ├── minio-config/ + ├── mysql/ + ├── redis/ + ├── weaviate/ +``` + +------ + +### 三、上传配置文件 + +将以下配置文件上传到 `/ruoyi-ai/deploy` 目录: + +- `docker-compose.yaml` +- `.env` +- `ruoyi-ai.sql` +- `Dockerfile` + +> 📂 这些文件在项目目录 `/script/deploy/deploy` 下。 +> 上传后请检查文件路径是否与上方目录结构一致。 + +------ + +### 四、构建 Jar 包 + +1. 打开 IDEA 或其他构建工具 +2. 选择 **Maven 构建配置**,勾选 `prod` 环境,取消 `dev` 环境 +3. 点击 `package` 进行打包 +4. **注意:** 在构建前请将 `application-prod.yml` 拖入 + `ruoyi-admin/src/main/resources` 目录中 + +构建完成后会在: + +``` +ruoyi-admin/target/ruoyi-admin.jar +``` + +生成打包文件。 + +------ + +### 五、上传 Jar 包至服务器 + +将生成的 `ruoyi-admin.jar` 上传到服务器 `/ruoyi-ai/deploy` 目录下。 + 确保与 `Dockerfile` 同目录。 + +------ + +### 六、构建 Docker 镜像 + +`Dockerfile` 内容如下: + +``` +FROM openjdk:17-jdk + +RUN mkdir -p /ruoyi/server/logs \ + /ruoyi/server/temp + +WORKDIR /ruoyi/server +COPY ruoyi-admin.jar ruoyi-admin.jar + +ENTRYPOINT ["java","-jar","ruoyi-admin.jar"] +``` + +在 `/ruoyi-ai/deploy` 目录执行以下命令: + +``` +# 构建镜像 +docker build -t ruoyi-ai-backend:v20251013 . + +# 查看镜像是否构建成功 +docker image ls +``` + +然后在 `docker-compose.yaml` 文件中,将对应服务的镜像名修改为: + +``` +image: ruoyi-ai-backend:v20251013 +``` + +------ + +### 七、启动容器服务 + +在启动前请确认: + +- `.env` 中端口号、数据库密码、环境变量已正确配置 +- `docker-compose.yaml` 中 MySQL 的端口已开放(用于导入数据) + +如示例: + +``` +ports: + - "3306:3306" +``` + +#### 启动命令: + +``` +cd /ruoyi-ai/deploy +docker compose up -d +``` + +#### 查看运行状态: + +``` +docker compose ps +``` + +#### 查看日志: + +``` +docker logs -f <容器名称> +``` + +> ⚠️ 初次启动时可仅运行 `ruoyi-admin`(后端)模块,将前端 `ruoyi-web` 服务暂时注释,确认后端服务正常后再启用前端容器。 + +------ + +### 八、数据库初始化 + +启动 MySQL 容器后,执行以下操作: + +``` +docker exec -it bash +mysql -uroot -p +source /docker-entrypoint-initdb.d/ruoyi-ai.sql; +``` + +或手动在客户端中导入 `/ruoyi-ai/deploy/ruoyi-ai.sql` 文件。 + +------ + +### 九、常用 Docker 命令 + +| 功能 | 命令 | +| ----------------- | --------------------------------- | +| 查看容器状态 | `docker ps -a` | +| 查看日志 | `docker logs -f <容器名>` | +| 停止服务 | `docker compose down` | +| 重启服务 | `docker compose restart` | +| 重新构建镜像 | `docker compose build --no-cache` | +| 清理无用镜像/容器 | `docker system prune -a` | + +------ + +### 🔍 十、部署验证 + +1. 检查容器是否全部启动成功: + + ``` + docker compose ps + ``` + +2. 访问后端接口: + + ``` + http://<服务器IP>:<后端端口> + ``` + +3. 检查日志输出无异常。 \ No newline at end of file