找回密码
 立即注册
查看: 38|回复: 4

[综合] Ubuntu20.04 Dify + Ollama 本地私有化 RAG 超详细完整部署教程

[复制链接]

14

主题

8

回帖

118

积分

管理员

积分
118
发表于 2026-6-23 12:16:59 | 显示全部楼层 |阅读模式
Ubuntu20.04 Dify + Ollama 本地私有化 RAG 超详细完整部署教程



整体架构说明



  • Ollama:宿主机原生安装,本地运行对话 LLM + 中文 Embedding 向量模型,数据完全不出内网
  • Dify:Docker Compose 一键部署,提供可视化知识库、RAG 问答、团队权限、API 接口、AI 工作流
  • 适用场景:企业内网私有化知识库、修箱 / 物流 SOP 文档检索、离线问答机器人


硬件最低配置



  • 纯 CPU 测试:4 核 CPU、16GB 内存、SSD ≥50G 空闲
  • 生产流畅版:8 核 CPU、16GB 内存 + NVIDIA 6G 显存显卡(RTX3050/4060)
  • 配套最小中文模型(RAG 必备双模型)
    • 向量模型:bge-small-zh(文档语义检索)
    • 对话平衡模型:qwen2:3b(16G 内存优选);效果优选qwen2:7b(有显卡必选)





  • 虚拟机安装Ubuntu系统


    1. 安装SSH服务

    首先,确保您的系统上安装了SSH服务。打开终端并运行以下命令来安装SSH服务器:

    1. sudo apt update
    2. sudo apt install openssh-server
    复制代码
    2. 启动SSH服务

    安装完成后,启动SSH服务:


    1. sudo systemctl start ssh
    复制代码
    3. 设置SSH服务开机自启

    为了确保每次开机时SSH服务自动启动,您可以设置其开机自启:
    1. sudo systemctl enable ssh
    复制代码
    4. 配置防火墙(如果使用UFW)

    如果您使用UFW作为防火墙,需要允许SSH端口(默认是22)通过防火墙:
    1. sudo ufw allow ssh
    复制代码
    或者,如果您只想允许特定IP地址访问SSH:
    1. sudo ufw allow from <IP地址> to any port 22
    复制代码
    5. 检查SSH服务状态

    确认SSH服务正在运行:
    1. sudo systemctl status ssh
    复制代码
    6. 配置SSH(可选)

    您可能想修改一些SSH的配置,例如禁用root登录、修改端口等。编辑SSH配置文件:
    1. sudo nano /etc/ssh/sshd_config
    复制代码
    在文件中,您可以添加或修改以下设置:
    • 禁用root登录:PermitRootLogin no
    • 修改端口(例如改为2222):Port 2222
    • 禁止密码登录改为仅允许密钥登录(增加安全性):PasswordAuthentication no 和 ChallengeResponseAuthentication no 以及设置 PubkeyAuthentication yes。
    修改后,重启SSH服务以应用更改:
    1. sudo systemctl restart ssh
    复制代码
    7. 测试SSH连接

    在另一台机器上,使用SSH客户端尝试连接到您的Ubuntu服务器:
  • ssh 用户名@服务器IP地址 -p 端口号  # 例如:ssh ubuntu@192.168.1.10 -p 2222



查看本机IP:
  1. ip addr
复制代码




第一部分 系统前置环境初始化





1. 更新系统依赖

  1. sudo apt update && sudo apt upgrade -y
  2. sudo apt install curl wget nano lsof net-tools
复制代码
2. 安装 Docker + Docker Compose V2

  1. # 一键官方安装Docker
  2. curl -fsSL [url]https://get.docker.com[/url] -o get-docker.sh
  3. sudo sh get-docker.sh
  4. # 当前用户加入docker组,免sudo执行docker命令
  5. sudo usermod -aG docker $USER
  6. # 刷新用户组,新开终端生效
  7. newgrp docker

  8. # 校验安装
  9. docker --version
  10. docker compose version
复制代码
3. 防火墙放行端口(内网访问必备)


开放端口:

  • 11434:Ollama 模型服务
  • 8000:Dify 网页后台
    1. sudo ufw allow 11434/tcp
    2. sudo ufw allow 8000/tcp
    3. sudo ufw reload
    4. # 查看放行规则
    5. sudo ufw status
    复制代码
    第二部分 宿主机安装并配置 Ollama(核心,Docker 需访问)


    1. 一键安装 Ollama



    1. curl -fsSL https://ollama.com/install.sh | sh
    2. # 验证版本
    3. ollama --version
    4. # 设置开机自启
    5. sudo systemctl enable --now ollama
    6. # 查看运行状态
    7. sudo systemctl status ollama
    复制代码
    2. 关键配置:允许 Docker 容器、局域网访问 Ollama


    Ubuntu Linux不支持 host.docker.internal,必须让 Ollama 监听 0.0.0.0,容器通过宿主机真实 IP 访问



  1. # 编辑Ollama系统服务文件
  2. sudo nano /etc/systemd/system/ollama.service
复制代码
在[Service]区块内添加环境变量:

  1. Environment="OLLAMA_HOST=0.0.0.0:11434"
  2. # 低配机器限制内存占用(16G纯CPU必加)
  3. Environment="OLLAMA_MAX_LOADED_MODELS=2"
  4. Environment="OLLAMA_NUM_CPU=3"
  5. Environment="OLLAMA_KEEP_ALIVE=5m"
复制代码
保存退出:Ctrl+O → 回车 → Ctrl+X

重载服务配置并重启 Ollama:
  1. sudo systemctl daemon-reload
  2. sudo systemctl restart ollama
  3. # 校验端口监听,出现0.0.0.0:11434代表成功
  4. ss -tulpn | grep 11434
复制代码
3. 拉取 RAG 必备双模型

  1. # 中文向量模型(知识库切片向量化专用)
  2. ollama pull bge-small-zh
  3. # 对话大模型(低配平衡款)
  4. ollama pull qwen2:3b
  5. # 有6G显卡可使用效果更好版本
  6. # ollama pull qwen2:7b
复制代码
4. NVIDIA 显卡加速(有 N 卡执行,无显卡跳过)


    1. # 自动安装匹配显卡驱动
    2. sudo ubuntu-drivers autoinstall
    3. sudo reboot
    4. # 重启后校验显卡
    5. nvidia-smi
    复制代码
    Ollama 自动识别 GPU 推理,无需额外配置。

    5. 查看宿主机内网 IP(Dify 对接必填)




    1. ip a
    2. # 找到网卡ens33/eth0下 inet 192.168.x.x,记下来,示例192.168.1.100
    复制代码
    第三部分 Docker Compose 部署 Dify


    1. 创建 Dify 部署目录




    1. mkdir ~/dify && cd ~/dify
    2. # 下载官方docker编排文件
    3. wget https://github.com/langgenius/dify/raw/main/docker/docker-compose.yml
    4. # 下载环境配置模板并重命名为.env
    5. wget https://github.com/langgenius/dify/raw/main/docker/.env.example -O .env
    复制代码
    2. 修改核心配置文件 .env

    1. nano .env
    复制代码
    仅修改以下关键参数,其余保持默认:


  • # 自定义后台加密密钥,随机复杂字符串
    SECRET_KEY=dify_2026_private_rag_enterprise_abc666
    # Dify网页访问端口
    HTTP_PORT=8000
    # Linux固定填写宿主机内网IP:11434(替换为你本机ip)
    OLLAMA_BASE_URL=http://192.168.1.100:11434
    # 单文件上传最大50MB,适配PDF/Excel文档
    UPLOAD_FILE_SIZE_LIMIT=50
    # 关闭公网邮件验证,本地内网无需SMTP
    MAIL_TYPE=null

    保存退出。

    3. 启动全套 Dify 容器




    1. # 预拉取所有镜像
    2. docker compose pull
    3. # 后台启动服务
    4. docker compose up -d
    5. # 查看容器状态,全部Up代表启动正常
    6. docker compose ps
    复制代码
    4. Dify 后台初始化


    浏览器访问:http://宿主机IP:8000



自定义管理员邮箱(无需真实邮箱)、登录密码;完成初始化,进入 Dify 工作台。




14

主题

8

回帖

118

积分

管理员

积分
118
 楼主| 发表于 2026-6-23 12:26:53 | 显示全部楼层
报错 no configuration file provided: not found 解决方案


场景说明


你在 ~/dify 目录执行 docker compose 命令时,程序找不到 docker-compose.yml 编排文件,两种原因:

  • 当前目录不是存放 yml 的文件夹;
  • 没下载 docker-compose.yml / .env 文件,文件缺失。

修复步骤(Ubuntu 20.04 完整重下)


1. 进入 dify 目录,确认文件是否存在

  1. cd ~/dify
  2. ls
复制代码
正常输出应有两个文件:

  1. docker-compose.yml  .env
复制代码
如果为空 / 缺少文件,执行下面下载命令。

2. 重新下载部署文件

  1. # 下载编排文件
  2. wget https://github.com/langgenius/dify/raw/main/docker/docker-compose.yml
  3. # 下载环境配置
  4. wget https://github.com/langgenius/dify/raw/main/docker/.env.example -O .env
复制代码
3. 检查文件存在后再启动

  1. ls
  2. # 此时能看到两个文件,再执行启动
  3. docker compose up -d
复制代码
补充踩坑点


  • 不要在别的目录执行 docker compose
    必须先 cd ~/dify 再执行命令,否则找不到配置文件。
  • 网络差导致 wget 下载半截空文件
    删除损坏文件重新下载:
    1. rm -rf docker-compose.yml .env
    2. wget https://github.com/langgenius/dify/raw/main/docker/docker-compose.yml
    3. wget https://github.com/langgenius/dify/raw/main/docker/.env.example -O .env
    复制代码
    换两种离线替代方案,不用在线下载文件:
  • 方案一:手动新建 docker-compose.yml、.env(推荐,无网络也能用)


    进入 ~/dify

    1. cd ~/dify
    复制代码
    1. 创建 docker-compose.yml
  • nano docker-compose.yml



  • 粘贴下面完整内容(官方稳定 pg 版):
  • version: '3.8'

    services:
      db:
        image: postgres:15-alpine
        volumes:
          - postgres_data:/var/lib/postgresql/data
        environment:
          POSTGRES_USER: ${DB_USER}
          POSTGRES_PASSWORD: ${DB_PASSWORD}
          POSTGRES_DB: ${DB_NAME}
        healthcheck:
          test: ["CMD-SHELL", "pg_isready -U ${DB_USER}"]
          interval: 10s
          timeout: 5s
          retries: 3

      redis:
        image: redis:6-alpine
        volumes:
          - redis_data:/data
        healthcheck:
          test: ["CMD", "redis-cli", "ping"]
          interval: 10s
          timeout: 5s
          retries: 3

      api:
        image: langgenius/dify-api:latest
        depends_on:
          db:
            condition: service_healthy
          redis:
            condition: service_healthy
        env_file:
          - ./.env
        volumes:
          - ./volumes/app:/app/api/uploads
        command: /bin/bash -c "sleep 10 && python run.py"

      web:
        image: langgenius/dify-web:latest
        depends_on:
          - api
        env_file:
          - ./.env
        ports:
          - "${HTTP_PORT}:3000"

    volumes:
      postgres_data:
      redis_data:

    保存:Ctrl+O → 回车 → Ctrl+X
  • 2. 创建 .env 配置文件

  1. nano .env
复制代码
粘贴,把 OLLAMA_BASE_URL 改成你服务器内网 IP(执行 ip a 查看):
  1. # 安全密钥,自定义一串随机字符
  2. SECRET_KEY=dify_local_2026_ollama_rag_123456
  3. HTTP_PORT=8000

  4. # 数据库配置
  5. DB_USER=dify
  6. DB_PASSWORD=dify123456
  7. DB_NAME=dify
  8. DB_HOST=db
  9. DB_PORT=5432

  10. # Ollama地址,替换为你的Ubuntu内网IP
  11. OLLAMA_BASE_URL=http://192.168.1.100:11434

  12. UPLOAD_FILE_SIZE_LIMIT=50
  13. MAIL_TYPE=null
复制代码
保存退出。

方案二:使用国内 Dify 镜像站地址下载(ghproxy 失效备用)


如果虚拟机能访问外网,执行:
  1. # 清除旧文件
  2. rm -f docker-compose.yml .env
  3. # 使用国内加速站
  4. curl -L https://dify-doc.oss-cn-hangzhou.aliyuncs.com/docker/docker-compose.yml -o docker-compose.yml
  5. curl -L https://dify-doc.oss-cn-hangzhou.aliyuncs.com/docker/.env.example -o .env
复制代码
三、文件创建完成校验
  1. ls
  2. # 输出 docker-compose.yml  .env 两个文件即正常
复制代码
四、后续部署命令
  1. # 拉取镜像
  2. docker compose pull
  3. # 后台启动
  4. docker compose up -d
  5. # 查看运行状态
  6. docker compose ps
复制代码










14

主题

8

回帖

118

积分

管理员

积分
118
 楼主| 发表于 2026-6-23 12:29:15 | 显示全部楼层
问题 1:权限报错 permission denied while trying to connect to the docker API


当前用户 kaixinyu 没有加入 docker 用户组,访问 /var/run/docker.sock 权限不足。
  1. # 将当前用户加入docker组
  2. sudo usermod -aG docker $USER
  3. # 刷新用户组,不用重启电脑
  4. newgrp docker
复制代码
执行完再重新拉取镜像:
  1. docker compose pull
复制代码




14

主题

8

回帖

118

积分

管理员

积分
118
 楼主| 发表于 2026-6-23 12:38:56 | 显示全部楼层
Docker .tar 镜像包不是标准静态文件,必须通过 Docker 客户端拉取镜像后本地导出,下面给你两套可行方案,一套在线加速拉取,一套网页工具导出离线包。

方案 1:Windows 有网机器加速拉取(最简单推荐)


1. Windows Docker Desktop 加速拉取命令(国内镜像前缀,规避连接拒绝)


打开 PowerShell 逐条执行:
  1. # postgres:15-alpine
  2. docker pull docker.1ms.run/library/postgres:15-alpine
  3. docker tag docker.1ms.run/library/postgres:15-alpine postgres:15-alpine
  4. docker save -o postgres.tar postgres:15-alpine

  5. # redis:6-alpine
  6. docker pull docker.1ms.run/library/redis:6-alpine
  7. docker tag docker.1ms.run/library/redis:6-alpine redis:6-alpine
  8. docker save -o redis.tar redis:6-alpine

  9. # dify-api
  10. docker pull docker.1ms.run/langgenius/dify-api:latest
  11. docker tag docker.1ms.run/langgenius/dify-api:latest langgenius/dify-api:latest
  12. docker save -o dify-api.tar langgenius/dify-api:latest

  13. # dify-web
  14. docker pull docker.1ms.run/langgenius/dify-web:latest
  15. docker tag docker.1ms.run/langgenius/dify-web:latest langgenius/dify-web:latest
  16. docker save -o dify-web.tar langgenius/dify-web:latest
复制代码
执行完得到 4 个 tar 文件,拷贝到 Ubuntu 虚拟机 ~/dify,再执行导入:
  1. docker load -i postgres.tar
  2. docker load -i redis.tar
  3. docker load -i dify-api.tar
  4. docker load -i dify-web.tar
  5. # 直接启动,无需pull
  6. docker compose up -d
复制代码
方案 2:网页工具在线导出 tar(无需安装 Docker,浏览器直接导出)


离线镜像下载工具地址:https://docker.beehub.top


使用步骤:

  • 打开网站,选择「单镜像下载」
  • 依次填入 4 个镜像名称,分别导出 tar 包:
    • library/postgres:15-alpine
    • library/redis:6-alpine
    • langgenius/dify-api:latest
    • langgenius/dify-web:latest

  • 下载 4 个 tar 文件
  • 传到 Ubuntu 虚拟机导入。
  • CD 到文件目录,然后执行下面上传命令
    1. scp langgenius_dify-api_latest.tar kaixinyu@192.168.X.X:~/dify/
    复制代码


上传完成后 ,加载到docker

  1. docker load -i library_redis_6-alpine.tar
复制代码


执行检查
  1. cd ~/dify
  2. ls
复制代码
能看到4个上产文件才算成功


方案 3:Linux 虚拟机内改用加速地址在线拉取(替代之前失败的 pull)


修改你的 docker-compose.yml 镜像行,全部加 docker.1ms.run/ 前缀,无需离线包:
  1. services:
  2.   db:
  3.     image: docker.1ms.run/library/postgres:15-alpine
  4.   redis:
  5.     image: docker.1ms.run/library/redis:6-alpine
  6.   api:
  7.     image: docker.1ms.run/langgenius/dify-api:latest
  8.   web:
  9.     image: docker.1ms.run/langgenius/dify-web:latest
复制代码





14

主题

8

回帖

118

积分

管理员

积分
118
 楼主| 发表于 2026-6-23 12:43:18 | 显示全部楼层
Dify 后台对接本地 Ollama 模型(核心步骤)

  • 页面左下角 设置 → 模型供应商
  • 找到 Ollama,点击右侧【配置】
  • API 基础地址填写之前记录的宿主机 IP:http://192.168.1.100:11434
  • 点击【测试连接】,提示连接成功后保存;
  • 进入 Ollama 模型列表,点击【添加模型】

① 添加对话 LLM 模型


  • 模型类型:LLM
  • 模型名称:qwen2:3b
  • 上下文长度:32768
  • 打开启用开关

② 添加向量 Embedding 模型


  • 模型类型:Embedding
  • 模型名称:bge-small-zh
  • 向量维度:512
  • 打开启用开关


可视化搭建企业私有化 RAG 知识库完整流程



步骤 1:新建知识库


左侧导航栏【知识库】→ 创建知识库

  • 知识库名称:企业行政 SOP / 集装箱修箱文档 / 研发技术手册
  • 检索方式:混合检索(关键词 + 向量),企业场景最优
  • Embedding 模型:选择 bge-small-zh
    点击确认创建。

步骤 2:批量导入企业存量文档


支持格式:PDF、Word、Excel、TXT、Markdown、压缩包批量上传

  • 上传文件,扫描件 PDF 自动开启 OCR 识别;
  • 文本分段通用配置(适配绝大多数文档)
    • 分段长度:700 字
    • 分段重叠:150 字

  • 提交后系统自动执行:文本切片 → 向量化存入内置向量库,全程数据仅保存在本地服务器,不上外网。

步骤 3:创建内部员工问答应用


左侧【应用】→ 创建应用 → 知识库问答

  • 绑定刚刚创建的知识库;
  • 基础对话模型选择 qwen2:3b;
  • RAG 检索参数(企业标准)
    • 召回片段条数:6
    • 相似度阈值:0.6(低于阈值不匹配无关文档)
    • 开启「引用来源」,回答底部展示对应文档名称与片段;

  • 强制约束提示词(直接复制,禁止 AI 编造内容)
    1. 你是企业内部专属知识助手,仅能使用提供的知识库内容回答员工问题。
    2. 如果知识库无对应信息,直接回复:暂无相关内部资料,严禁猜测、编造信息。
    3. 回答简洁条理清晰,分点罗列关键内容。
    复制代码
    日常运维常用命令


    Ollama 模型管理(宿主机终端执行)



    1. ollama list                  # 查看已下载本地模型
    2. ollama ps                    # 查看正在运行占用内存的模型
    3. ollama stop qwen2:3b         # 停止模型,释放内存
    4. ollama rm qwen2:3b           # 删除模型,释放硬盘空间
    5. systemctl restart ollama     # 重启Ollama服务
    复制代码
    Dify 全套服务管理(dify 目录内执行)

    1. docker compose restart       # 重启全部Dify容器
    2. docker compose logs -f api   # 实时查看后台日志,排查报错
    3. docker compose down          # 停止所有容器
    4. # 数据持久化说明:知识库、向量库、上传文件全部存储Docker本地卷,删除容器不会丢失业务数据
    复制代码







您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|兔窝窝

GMT+8, 2026-7-26 18:45 , Processed in 0.122886 second(s), 19 queries .

Powered by www.tu55.cn

Copyright © www.tu55.cn, All Rights Reserved.

快速回复 返回顶部 返回列表