首页
/ RuoYi AI离线部署方案:无网络环境下的本地化AI服务搭建

RuoYi AI离线部署方案:无网络环境下的本地化AI服务搭建

2026-02-05 05:49:47作者:郜逊炳

在企业级AI应用落地过程中,网络隔离环境(如政务内网、金融专网、工业控制网络)的部署需求日益凸显。传统依赖云端API的AI服务因网络限制无法使用,而本地化部署常面临环境配置复杂、组件依赖冲突、数据安全合规等挑战。本文基于RuoYi AI开源项目,提供一套完整的离线部署解决方案,通过Docker容器化技术实现"一次打包,到处运行",解决无网络环境下的AI服务搭建难题。

部署架构与组件说明

RuoYi AI离线部署采用分层架构设计,包含基础设施层、数据存储层、AI引擎层和应用服务层四个核心层级,所有组件均通过Docker容器运行,确保环境一致性和隔离性。

系统架构概览

flowchart TD
    subgraph 基础设施层
        A[Docker Engine] --> B[Docker Compose]
        B --> C[网络隔离环境]
    end
    
    subgraph 数据存储层
        D[MySQL 8.0] --> E[业务数据]
        F[Redis 6.2] --> G[缓存数据]
        H[Weaviate 1.30] --> I[向量数据]
    end
    
    subgraph AI引擎层
        J[本地LLM服务] --> K[文本生成]
        L[BGE-M3向量模型] --> M[文本嵌入]
        N[Midjourney兼容接口] --> O[图像生成]
    end
    
    subgraph 应用服务层
        P[后端服务] --> Q[ruoyi-admin]
        R[前端服务] --> S[管理界面]
        T[Web服务] --> U[用户界面]
    end
    
    A --> D
    A --> F
    A --> H
    A --> J
    A --> P
    A --> R
    A --> T
    D --> P
    F --> P
    H --> L
    J --> P
    L --> P
    N --> P
    P --> R
    P --> T

核心组件说明

组件名称 版本号 作用 离线部署要点
MySQL 8.0.33 存储用户数据、配置信息、业务数据 需提前导入初始化SQL脚本
Redis 6.2 缓存会话数据、API令牌、临时计算结果 配置持久化策略防止数据丢失
Weaviate 1.30.0 向量数据库,存储文档嵌入向量 禁用自动更新,使用本地模块
RuoYi后端 自定义 业务逻辑处理、AI模型调度 替换云端API调用为本地服务
Admin前端 自定义 管理控制台,系统配置界面 打包时内置后端服务地址
Web前端 自定义 用户交互界面,AI功能入口 离线资源本地化处理

网络拓扑设计

在无网络环境下,所有服务通过Docker内部网络通信,仅暴露必要端口到宿主机。生产环境建议配置防火墙策略,仅允许特定IP访问服务端口。

network
    participant 宿主机
    participant Docker网络
    participant MySQL
    participant Redis
    participant Weaviate
    participant 后端服务
    participant 前端服务
    
    宿主机 -- 端口映射 --> Docker网络
    Docker网络 --> MySQL: 3306
    Docker网络 --> Redis: 6379
    Docker网络 --> Weaviate: 50050/50051
    Docker网络 --> 后端服务: 6039
    Docker网络 --> 前端服务: 8081/8082

部署前准备工作

硬件环境要求

RuoYi AI离线部署对硬件配置有一定要求,特别是在运行大语言模型时需要充足的内存和计算资源:

组件 最低配置 推荐配置 资源用途
CPU 8核Intel i5 16核Intel i7/Ryzen 7 服务运行、模型推理
内存 16GB 32GB 模型加载、向量计算、缓存
存储 200GB SSD 500GB NVMe SSD 镜像存储、数据库文件、向量数据
网络 无要求 千兆以太网 内部服务通信

注意:若需运行7B以上参数的大语言模型,推荐配置64GB内存和支持AVX2指令集的CPU。

软件环境要求

部署环境需满足以下软件依赖,所有安装包需提前下载并存储在本地:

  • 操作系统:Ubuntu 20.04 LTS / CentOS 7.9
  • Docker Engine:20.10.17+
  • Docker Compose:2.12.2+
  • 容器运行时:runc 1.1.4+
  • 本地镜像仓库:可选,用于存储私有化镜像

离线资源包准备

  1. 基础镜像包:需提前拉取并保存以下Docker镜像:

    • mysql:8.0.33
    • redis:6.2
    • semitechnologies/weaviate:1.30.0
    • openjdk:17-jdk-slim
    • nginx:1.25-alpine
    • node:20
  2. 项目源码包:从官方仓库克隆完整代码:

    git clone https://gitcode.com/ageerle/ruoyi-ai
    
  3. 模型资源包:根据需求下载预训练模型(以BGE-M3向量模型为例):

    # 创建模型存储目录
    mkdir -p models/embedding
    # 假设已通过其他方式获取模型文件
    cp /path/to/bge-m3 models/embedding/
    
  4. 初始化数据:SQL脚本和配置文件:

详细部署步骤

1. 环境准备

1.1 安装Docker环境

在离线服务器上安装Docker和Docker Compose,以Ubuntu系统为例:

# 解压离线安装包(假设已提前下载)
tar -zxvf docker-offline-20.10.17.tar.gz
cd docker-offline

# 安装Docker引擎
sudo dpkg -i *.deb

# 启动Docker服务
sudo systemctl start docker
sudo systemctl enable docker

# 验证安装
docker --version
docker-compose --version

1.2 加载基础镜像

将提前准备的Docker镜像加载到本地:

# 加载镜像(示例命令,需根据实际文件名调整)
docker load -i mysql-8.0.33.tar
docker load -i redis-6.2.tar
docker load -i weaviate-1.30.0.tar
# ... 加载其他所有基础镜像

1.3 创建部署目录

# 创建主目录
mkdir -p /opt/ruoyi-ai/{data,logs,models,scripts}

# 创建数据子目录
mkdir -p /opt/ruoyi-ai/data/{mysql,redis,weaviate}

# 设置权限
sudo chmod -R 777 /opt/ruoyi-ai

2. 配置文件准备

2.1 生成环境变量文件

基于模板创建.env文件,关键配置如下:

# 进入部署目录
cd /opt/ruoyi-ai

# 创建.env文件
cat > .env << EOF
# 基础配置
TZ=Asia/Shanghai

# MySQL配置
MYSQL_PORT=3306
MYSQL_DATABASE=ruoyi-ai
MYSQL_ROOT_PASSWORD=SecurePassword123!

# Redis配置
REDIS_PORT=6379
REDIS_PASSWORD=RedisPass456!
REDIS_DATABASE=0
REDIS_TIMEOUT=10s

# 后端服务配置
SERVER_PORT=6039
BACKEND_HOST=ruoyi-backend
DB_USERNAME=root
DB_PASSWORD=SecurePassword123!

# 前端服务配置
ADMIN_PORT=8082
WEB_PORT=8081

# Weaviate配置
WEAVIATE_HTTP_PORT=50050
WEAVIATE_GRPC_PORT=50051
WEAVIATE_QUERY_LIMIT=25
WEAVIATE_ANONYMOUS_ACCESS=true
WEAVIATE_DATA_PATH=/var/lib/weaviate
WEAVIATE_VECTORIZER_MODULE=none
WEAVIATE_MODULES=text2vec-huggingface
WEAVIATE_CLUSTER_HOSTNAME=node1
WEAVIATE_PROTOCOL=http
WEAVIATE_CLASSNAME=LocalKnowledge

# 生产环境数据库配置
PROD_DB_URL=jdbc:mysql://mysql:3306/ruoyi-ai?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true
PROD_DB_USERNAME=root
PROD_DB_PASSWORD=SecurePassword123!

# Redis生产环境配置
PROD_REDIS_HOST=redis
PROD_REDIS_PORT=6379
PROD_REDIS_DATABASE=0
PROD_REDIS_PASSWORD=RedisPass456!
PROD_REDIS_TIMEOUT=10s

# 前端API配置
FRONTEND_API_BASE_URL=http://ruoyi-backend:6039
EOF

2.2 创建Docker Compose配置

创建docker-compose.yaml文件:

cat > docker-compose.yaml << EOF
version: '3'

services:
  mysql:
    image: mysql:8.0.33
    container_name: ruoyi-ai-mysql
    env_file:
      - ./.env
    environment:
      - MYSQL_ROOT_PASSWORD=\${MYSQL_ROOT_PASSWORD}
      - MYSQL_DATABASE=\${MYSQL_DATABASE}
    ports:
      - "\${MYSQL_PORT}:3306"
    volumes:
      - ./data/mysql:/var/lib/mysql
      - ./scripts/mysql-init:/docker-entrypoint-initdb.d
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
    restart: always
    networks:
      - ruoyi-net

  redis:
    image: redis:6.2
    container_name: ruoyi-ai-redis
    env_file:
      - ./.env
    ports:
      - "\${REDIS_PORT}:6379"
    volumes:
      - ./data/redis:/data
    command: redis-server --appendonly yes --requirepass \${REDIS_PASSWORD}
    restart: always
    networks:
      - ruoyi-net

  weaviate:
    image: semitechnologies/weaviate:1.30.0
    container_name: ruoyi-ai-weaviate
    env_file:
      - ./.env
    environment:  
      - QUERY_DEFAULTS_LIMIT=\${WEAVIATE_QUERY_LIMIT}  
      - AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=\${WEAVIATE_ANONYMOUS_ACCESS}  
      - PERSISTENCE_DATA_PATH=\${WEAVIATE_DATA_PATH}  
      - DEFAULT_VECTORIZER_MODULE=\${WEAVIATE_VECTORIZER_MODULE}  
      - ENABLE_MODULES=\${WEAVIATE_MODULES}  
      - CLUSTER_HOSTNAME=\${WEAVIATE_CLUSTER_HOSTNAME}  
    command: --host 0.0.0.0 --port 8080 --scheme http
    ports:
      - "\${WEAVIATE_HTTP_PORT}:8080"
      - "\${WEAVIATE_GRPC_PORT}:50051"
    volumes:
      - ./data/weaviate:/var/lib/weaviate
    restart: always
    networks:
      - ruoyi-net

  ruoyi-backend:
    image: ruoyi-ai-backend:local
    container_name: ruoyi-ai-backend
    env_file:
      - ./.env
    ports:
      - "\${SERVER_PORT}:6039"
    volumes:
      - ./logs:/ruoyi/server/logs
      - ./models:/ruoyi/models
    depends_on:
      - mysql
      - redis
      - weaviate
    restart: always
    networks:
      - ruoyi-net

  ruoyi-admin:
    image: ruoyi-ai-admin:local
    container_name: ruoyi-ai-admin
    ports:
      - "\${ADMIN_PORT}:80"
    depends_on:
      - ruoyi-backend
    restart: always
    networks:
      - ruoyi-net

  ruoyi-web:
    image: ruoyi-ai-web:local
    container_name: ruoyi-ai-web
    ports:
      - "\${WEB_PORT}:80"
    depends_on:
      - ruoyi-backend
    restart: always
    networks:
      - ruoyi-net

networks:
  ruoyi-net:
    driver: bridge
EOF

3. 应用部署

3.1 数据库初始化

将SQL脚本复制到MySQL初始化目录:

# 假设SQL文件已传输到服务器
cp /path/to/ruoyi-ai.sql /opt/ruoyi-ai/scripts/mysql-init/

3.2 启动服务

# 进入部署目录
cd /opt/ruoyi-ai

# 启动所有服务
docker-compose up -d

# 查看服务状态
docker-compose ps

3.3 验证部署

服务启动后,通过以下方式验证:

  1. 检查容器状态

    docker-compose ps
    

    所有服务应显示为"Up"状态。

  2. 查看日志

    # 查看后端服务日志
    docker-compose logs -f ruoyi-backend
    
  3. 访问Web界面: 打开浏览器访问http://服务器IP:8081,应能看到RuoYi AI的用户界面。

  4. 测试AI功能: 登录系统后,尝试使用一个不需要外部API的AI功能(如知识库问答),验证服务正常工作。

模型部署与配置

本地大语言模型部署

RuoYi AI支持集成本地运行的大语言模型,以Llama 2系列模型为例:

1. 模型准备

将下载的模型文件放置到指定目录:

# 创建模型目录
mkdir -p /opt/ruoyi-ai/models/llm/llama-2-7b-chat

# 复制模型文件(假设已通过外部介质传输)
cp /path/to/llama-2-7b-chat/* /opt/ruoyi-ai/models/llm/llama-2-7b-chat/

2. 配置模型服务

修改后端配置文件,添加本地模型支持:

# 进入后端容器
docker exec -it ruoyi-ai-backend /bin/bash

# 编辑配置文件
vi /ruoyi/conf/application-prod.yml

添加以下配置:

ai:
  model:
    local:
      enabled: true
      type: llama
      path: /ruoyi/models/llm/llama-2-7b-chat
      parameters:
        max_new_tokens: 1024
        temperature: 0.7
        top_p: 0.9

3. 重启服务

# 退出容器
exit

# 重启后端服务
docker-compose restart ruoyi-backend

向量模型配置

RuoYi AI使用向量模型将文档转换为嵌入向量,配置本地向量模型:

  1. 上传模型文件

    mkdir -p /opt/ruoyi-ai/models/embedding/bge-m3
    cp /path/to/bge-m3/* /opt/ruoyi-ai/models/embedding/bge-m3/
    
  2. 配置模型参数: 通过管理界面配置向量模型参数:

    1. 访问http://服务器IP:8082登录管理后台
    2. 进入"系统配置" > "AI模型配置"
    3. 选择"向量模型"标签
    4. 设置"模型路径"为/ruoyi/models/embedding/bge-m3
    5. 点击"测试连接"验证模型可用性
    6. 保存配置

数据迁移与备份

数据迁移策略

在无网络环境下,数据迁移需通过物理介质进行:

timeline
    title 离线数据迁移流程
    section 准备阶段
        数据导出 : 在联网环境导出用户数据、知识库内容
        介质准备 : 将数据存储到USB硬盘或其他移动介质
    section 迁移阶段
        数据导入 : 将移动介质连接到离线服务器
        校验数据 : 验证数据完整性和一致性
    section 部署阶段
        初始化数据库 : 导入用户数据和配置
        重建向量索引 : 对知识库内容重新生成向量

备份策略

定期备份关键数据,防止数据丢失:

# 创建备份脚本
cat > /opt/ruoyi-ai/scripts/backup.sh << EOF
#!/bin/bash
DATE=\$(date +%Y%m%d_%H%M%S)
BACKUP_DIR=/opt/ruoyi-ai/backup/\$DATE

# 创建备份目录
mkdir -p \$BACKUP_DIR

# 备份MySQL数据
docker exec ruoyi-ai-mysql mysqldump -uroot -p\$MYSQL_ROOT_PASSWORD ruoyi-ai > \$BACKUP_DIR/mysql_backup.sql

# 备份Redis数据
docker exec ruoyi-ai-redis redis-cli -a \$REDIS_PASSWORD SAVE
cp /opt/ruoyi-ai/data/redis/dump.rdb \$BACKUP_DIR/

# 备份Weaviate数据
tar -zcvf \$BACKUP_DIR/weaviate_backup.tar.gz /opt/ruoyi-ai/data/weaviate

# 保留最近10个备份
ls -tp /opt/ruoyi-ai/backup/ | grep -v '/$' | tail -n +11 | xargs -I {} rm -rf /opt/ruoyi-ai/backup/{}
EOF

# 添加执行权限
chmod +x /opt/ruoyi-ai/scripts/backup.sh

# 添加到定时任务
crontab -e
# 添加以下行,每天凌晨2点执行备份
0 2 * * * /opt/ruoyi-ai/scripts/backup.sh

常见问题与解决方案

服务启动失败

问题:后端服务启动后立即退出。

排查步骤

  1. 查看日志:docker-compose logs ruoyi-backend
  2. 检查数据库连接:确认MySQL服务正常运行
  3. 验证配置文件:确保数据库密码和端口正确

解决方案

# 检查数据库连接
docker exec -it ruoyi-ai-mysql mysql -uroot -p$MYSQL_ROOT_PASSWORD

# 如果数据库连接失败,检查网络
docker network inspect ruoyi-net

AI功能无法使用

问题:调用AI功能时提示"模型不可用"。

排查步骤

  1. 确认模型文件已正确放置
  2. 检查模型配置路径是否正确
  3. 查看后端日志中的模型加载信息

解决方案

# 进入后端容器
docker exec -it ruoyi-ai-backend /bin/bash

# 手动测试模型加载
java -jar /ruoyi/ruoyi-admin.jar --test-model

性能优化建议

在离线环境中,硬件资源通常有限,可通过以下方式优化性能:

  1. 调整JVM参数

    # 编辑docker-compose.yaml,修改后端服务配置
    environment:
      - JAVA_OPTS=-Xms4g -Xmx8g -XX:+UseG1GC
    
  2. 优化数据库

    # 进入MySQL容器
    docker exec -it ruoyi-ai-mysql /bin/bash
    
    # 编辑配置文件
    vi /etc/mysql/my.cnf
    
    # 添加以下优化参数
    [mysqld]
    innodb_buffer_pool_size=2G
    query_cache_size=64M
    max_connections=200
    
  3. 调整向量检索参数: 通过管理界面减少每次检索的文档数量,平衡速度和准确性。

部署验证与验收

功能验证清单

部署完成后,需验证以下核心功能:

功能模块 验证方法 预期结果
用户管理 创建测试用户,分配权限 用户可正常登录,权限控制生效
知识库 上传测试文档,执行问答 系统能基于文档内容回答问题
文本生成 使用本地LLM生成文本 生成内容符合预期,无网络请求
向量检索 搜索相似文档 返回相关文档,响应时间<2秒
系统配置 修改关键参数,重启服务 配置生效,服务正常启动

性能指标验收

在生产环境中,应达到以下性能指标:

  1. 响应时间

    • 简单查询:<500ms
    • AI文本生成:<5秒(短句)
    • 向量检索:<2秒
  2. 并发能力

    • 支持10+同时在线用户
    • 每秒可处理5+AI请求
  3. 资源占用

    • 内存使用:<16GB(含所有服务)
    • CPU使用率:峰值<80%
    • 磁盘IO:平稳,无明显波动

总结与展望

RuoYi AI的离线部署方案通过容器化技术和本地化模型集成,解决了无网络环境下的AI服务搭建难题。本文详细介绍了从环境准备、配置文件创建、服务部署到模型配置的完整流程,提供了一套可落地的企业级解决方案。

未来优化方向:

  1. 模型轻量化:使用更小的量化模型,降低硬件需求
  2. 增量更新:实现离线环境下的组件增量更新机制
  3. 监控系统:集成离线监控工具,实现服务状态可视化
  4. 自动化部署:开发一键部署脚本,简化部署流程

通过本方案,企业可以在严格的网络隔离环境中安全地部署和使用AI技术,充分利用人工智能提升业务效率,同时满足数据安全和合规要求。

附录:资源清单与参考资料

离线部署资源清单

  1. 基础软件包

    • Docker Engine 20.10.17
    • Docker Compose 2.12.2
    • OpenJDK 17
    • Nginx 1.25
  2. Docker镜像

    • MySQL 8.0.33
    • Redis 6.2
    • Weaviate 1.30.0
    • 后端服务镜像
    • 前端服务镜像
  3. 模型文件

    • BGE-M3向量模型
    • 本地LLM模型(如Llama 2)
  4. 配置模板

参考文档

登录后查看全文
热门项目推荐
相关项目推荐