云服务器上部署Dify完整教程

关于UCloud(优刻得)旗下的compshare算力共享平台

UCloud(优刻得)是中国知名的中立云计算服务商,科创板上市,中国云计算第一股。

Compshare GPU算力平台隶属于UCloud,专注于提供高性价4090算力资源,配备独立IP,支持按时、按天、按月灵活计费,支持github、huggingface访问加速。

使用下方链接注册可获得20元算力金,免费体验10小时4090云算力,此外还有5090, 3090和P40,价格每小时只需要8毛,赠送的算礼金够用一整天。
https://www.compshare.cn/?ytag=GPU_lovelyyoshino_Lcsdn_csdn_display

1. Dify简介

Dify集成了构建LLM应用所需的完整技术栈,为开发者和企业提供了强大的AI应用开发能力。平台已通过验证的模型供应商达23家,支持模型数量超过80种,涵盖OpenAI、Anthropic Claude、Google Gemini、Hugging Face、Meta Llama3、DeepSeek、智谱ChatGLM、百度文心一言、阿里通义千问等国内外商用与开源模型,实现统一调用接口。特别值得一提的是,v1.11.0版本新增了模型级联调用功能,允许在单个工作流中组合不同模型的优势,例如使用GPT-4进行复杂推理,使用Llama3进行快速文本生成,充分发挥各模型的特长。此外,Dify还支持通过Ollama、LocalAI等本地推理框架接入开源模型,实现完全离线化的AI应用部署,为企业提供了数据安全和成本可控的解决方案。

目前相关内容已经在官网中可以直接安装使用了Dify Ubuntu 22.04自动生成项目中了。

2. 安装Docker环境

Docker是Dify部署的核心依赖,通过容器化技术将应用及其依赖环境打包,实现跨平台的一致性部署。Dify采用Docker Compose进行多容器编排管理,可以一键启动包括Web界面、API服务、数据库、缓存、向量数据库等十余个微服务组件。正确安装和配置Docker环境是成功部署Dify的第一步,本章将详细介绍Docker和Docker Compose的安装、配置和优化方法。

2.1 卸载旧版本(如果有)

在安装最新版Docker之前,需要先卸载系统中可能存在的旧版本Docker组件,避免版本冲突导致的安装失败或运行异常。旧版本的Docker可能使用docker、docker.io、docker-engine等不同的包名,需要全部清理干净。卸载过程不会删除已有的镜像、容器、卷和网络配置,这些数据默认保存在/var/lib/docker目录下,重新安装后仍可继续使用。如果这是一台全新的服务器,可以跳过此步骤直接进行安装。

bash 复制代码
# 卸载旧版本Docker及相关组件
sudo apt remove -y docker docker-engine docker.io containerd runc
sudo apt autoremove -y

# 可选:完全清理Docker数据(谨慎操作,会删除所有镜像和容器)
# sudo rm -rf /var/lib/docker
# sudo rm -rf /var/lib/containerd

2.2 安装Docker

Docker官方提供了便捷的一键安装脚本,可以自动检测系统版本并安装适配的Docker版本。这个脚本会自动配置软件源、安装Docker Engine、CLI工具和containerd运行时,整个过程通常需要2-5分钟。安装完成后,Docker会以systemd服务的形式运行,并设置为开机自启动。安装脚本支持Ubuntu、Debian、CentOS、Fedora等主流Linux发行版,是官方推荐的安装方式。

bash 复制代码
# 方法一:使用官方一键安装脚本(推荐)
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# 方法二:国内网络可使用阿里云镜像脚本
# curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

# 启动Docker服务并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker

# 验证安装是否成功
sudo docker --version
sudo docker info

# 测试运行hello-world容器
sudo docker run hello-world

2.3 安装Docker Compose

Docker Compose是Docker官方的容器编排工具,用于定义和运行多容器Docker应用程序。通过一个YAML配置文件,可以同时配置和启动多个相互关联的服务,这对于Dify这种微服务架构的应用部署至关重要。Dify需要同时运行Web前端、API服务、数据库、Redis缓存、Weaviate向量库等多个容器,Docker Compose可以通过一条命令完成所有服务的启动、停止和管理。最新版本的Docker Desktop已经内置了Docker Compose V2,命令为docker compose(不带连字符)。

bash 复制代码
# 安装依赖包
sudo apt-get update
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg

# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 设置稳定版仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt update

# 方法一:通过apt安装(推荐)
sudo apt-get install docker-compose-plugin

# 方法二:手动下载安装二进制文件
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# 验证安装(V2版本)
docker compose version

# 验证安装(V1版本,如果使用方法二)
docker-compose --version

2.4 配置Docker权限

默认情况下,Docker守护进程以root用户身份运行,普通用户执行Docker命令时需要添加sudo前缀,这在频繁操作时会带来不便。通过将当前用户添加到docker用户组,可以让普通用户直接执行Docker命令而无需sudo权限。这是Docker官方推荐的权限管理方式,既提供了便利性,又保持了一定的安全性。需要注意的是,docker组成员实际上拥有与root用户等效的权限,因此只应将可信用户添加到该组中。

bash 复制代码
# 将当前用户添加到docker组(避免每次使用sudo)
sudo usermod -aG docker $USER

# 重新加载组权限(或重新登录SSH会话)
newgrp docker

# 测试是否可以不用sudo运行Docker命令
docker ps
docker images

# 如果仍需要sudo,尝试重启Docker服务
sudo systemctl restart docker

# 或者完全退出并重新登录系统

2.5 配置Docker镜像加速

Docker默认从Docker Hub官方镜像仓库拉取镜像,由于网络原因,国内服务器访问Docker Hub速度往往较慢,下载大型镜像时可能需要很长时间甚至超时失败。配置镜像加速器可以通过国内镜像源下载,速度通常能提升5-10倍,对于Dify这种包含多个服务镜像的应用部署尤为重要。阿里云、腾讯云、网易云等都提供了免费的Docker镜像加速服务,配置后对所有镜像拉取操作生效。此外,配置日志驱动限制可以防止容器日志无限增长占满磁盘空间。

bash 复制代码
# 创建或编辑Docker配置文件
sudo mkdir -p /etc/docker
sudo vim /etc/docker/daemon.json

添加以下内容(JSON格式,注意逗号和括号):

json 复制代码
{
  "registry-mirrors": [
    "https://docker.xuanyuan.me",
    "https://docker.1ms.run",
    "https://docker.tuna.tsinghua.edu.cn"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  }
}

常用国内镜像源推荐

bash 复制代码
# 重启Docker服务使配置生效
sudo systemctl daemon-reload
sudo systemctl restart docker

# 验证配置是否生效
docker info | grep -A 10 "Registry Mirrors"

# 测试拉取镜像(应该能看到速度明显提升)
docker pull nginx:alpine
docker pull redis:alpine

3. 部署Dify

完成Docker环境准备后,就可以开始部署Dify平台了。Dify采用Docker Compose方式部署,所有服务组件都已经打包成Docker镜像,部署过程主要包括下载源码、配置环境变量、启动服务和初始化设置几个步骤。整个部署过程通常在30分钟内即可完成,首次启动时需要拉取多个镜像文件,总大小约2-3GB,建议在网络状况良好时进行。Dify的配置文件设计简洁清晰,大部分参数都有合理的默认值,通常只需修改少数几个关键配置项即可运行。

3.1 下载Dify源码

Dify的源码托管在GitHub上,包含了完整的应用代码、Docker配置文件和部署脚本。我们只需要克隆仓库并进入docker目录即可开始部署,不需要手动编译或构建镜像。对于GitHub访问速度较慢的用户,可以使用Gitee镜像仓库或者通过代理加速下载。克隆完成后,源码目录包含前端代码(web)、后端代码(api)、Docker配置(docker)等多个子目录,部署时我们主要使用docker目录下的配置文件。

bash 复制代码
# 克隆Dify官方仓库
git clone https://github.com/langgenius/dify.git

# 如果GitHub访问慢,可以使用Gitee镜像(推荐国内用户)
# git clone https://gitee.com/mirrors/dify.git

# 进入Docker配置目录
cd dify/docker

# 查看目录结构
ls -la

3.2 配置环境变量

环境变量文件(.env)包含了Dify运行所需的所有配置参数,包括数据库连接、Redis缓存、存储方式、向量数据库、安全密钥等。Dify提供了.env.example示例文件,包含了所有可配置项及其说明。大部分配置使用默认值即可正常运行,但有几个关键配置项必须根据实际情况修改,特别是应用访问地址和安全密钥。正确配置环境变量是确保Dify正常运行的关键步骤,配置错误可能导致服务无法启动或功能异常。

bash 复制代码
# 复制环境变量示例文件为实际配置文件
cp .env.example .env

# 使用文本编辑器打开配置文件
vim .env
# 或使用 nano .env(更适合新手)

重要配置项详细说明

bash 复制代码
# ===== 基础配置 =====
# 应用访问地址(必须修改!改为你的服务器IP或域名)
# 如果使用IP访问:http://123.456.789.0
# 如果使用域名访问:https://dify.yourdomain.com
CONSOLE_API_URL=http://your_server_ip  # 控制台API地址
CONSOLE_WEB_URL=http://your_server_ip  # 控制台Web地址
SERVICE_API_URL=http://your_server_ip  # 服务API地址
APP_API_URL=http://your_server_ip      # 应用API地址
APP_WEB_URL=http://your_server_ip      # 应用Web地址

# ===== 数据库配置 =====
# PostgreSQL数据库配置(默认配置通常不需要改)
# 如果需要外部数据库,修改HOST为实际地址
DB_USERNAME=postgres
DB_PASSWORD=difyai123456  # 生产环境建议修改为强密码
DB_HOST=db                # 容器内部服务名
DB_PORT=5432
DB_DATABASE=dify

# ===== Redis配置 =====
# Redis缓存配置(用于会话、队列等)
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=difyai123456  # 生产环境建议修改

# ===== 存储配置 =====
# 本地存储路径(适合小规模使用)
STORAGE_TYPE=local
STORAGE_LOCAL_PATH=/app/storage

# 如果使用对象存储(推荐生产环境,可扩展性更好)
# STORAGE_TYPE=s3
# S3_BUCKET_NAME=your-bucket-name
# S3_ACCESS_KEY=your-access-key-id
# S3_SECRET_KEY=your-secret-access-key
# S3_REGION=cn-beijing  # 或其他区域

# ===== 向量数据库配置 =====
# Weaviate用于存储知识库向量数据
VECTOR_STORE=weaviate
WEAVIATE_ENDPOINT=http://weaviate:8080
WEAVIATE_API_KEY=WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih  # 可选

# ===== 密钥配置(重要!必须修改)=====
# SECRET_KEY用于加密会话和敏感数据,每个部署必须唯一
# 生成方法:openssl rand -base64 42
SECRET_KEY=your-secret-key-here  # 请替换为生成的随机密钥

# ===== Celery队列配置 =====
# 后台任务队列配置
CELERY_BROKER_URL=redis://:difyai123456@redis:6379/1

生成安全的SECRET_KEY

SECRET_KEY是Dify最重要的安全配置之一,用于加密用户会话、API密钥等敏感信息。使用弱密钥或默认密钥会带来严重的安全隐患。每个Dify实例都应该使用唯一的随机密钥,且密钥一旦设置后不应随意更改(更改会导致现有会话失效)。

bash 复制代码
# 使用OpenSSL生成42字节的随机Base64编码密钥
openssl rand -base64 42

# 输出示例:
# sk-9f73s3ljTXVcMT3Blbkf J2rKLdvN5g2BVx+0zP1yITlYwFE=

# 将生成的密钥复制并替换到.env文件中的SECRET_KEY
# 使用vim的命令:
# vim .env
# 找到 SECRET_KEY=your-secret-key-here
# 按 i 进入编辑模式,粘贴新密钥
# 按 Esc,输入 :wq 保存退出

3.3 修改docker-compose.yaml(可选)

docker-compose.yaml文件定义了Dify所有服务容器的配置,包括镜像版本、端口映射、卷挂载、网络配置、环境变量等。默认配置已经过优化,可以直接使用。但在某些情况下需要自定义配置,比如80端口被其他服务占用、需要调整资源限制、或者需要暴露额外的端口等。修改前建议先备份原文件,避免配置错误导致服务无法启动。Dify的Docker Compose配置采用了模块化设计,各服务相对独立,方便进行定制化调整。

bash 复制代码
# 备份原配置文件(推荐)
cp docker-compose.yaml docker-compose.yaml.bak

# 编辑配置文件
vim docker-compose.yaml

默认端口映射说明

  • Nginx (前端和API网关):80:80
  • Weaviate向量数据库管理界面:8080:8080(可选)
  • PostgreSQL数据库:5432:5432(默认不暴露到宿主机)
  • Redis缓存:6379:6379(默认不暴露到宿主机)

常见修改场景

yaml 复制代码
# 场景1:80端口被占用,修改为8080端口
services:
  nginx:
    ports:
      - "8080:80"  # 宿主机8080端口映射到容器80端口

# 场景2:限制容器资源使用
services:
  api:
    deploy:
      resources:
        limits:
          cpus: '2.0'      # 最多使用2个CPU核心
          memory: 4G       # 最多使用4GB内存
        reservations:
          cpus: '0.5'      # 保留0.5个CPU核心
          memory: 1G       # 保留1GB内存

# 场景3:使用自定义数据目录
services:
  db:
    volumes:
      - /data/dify/postgres:/var/lib/postgresql/data  # 自定义数据目录

3.4 启动Dify服务

配置完成后就可以启动Dify服务了。首次启动时Docker会自动从镜像仓库拉取所需的所有镜像,包括Nginx、PostgreSQL、Redis、Weaviate向量数据库、Dify API服务、Worker队列处理服务、Web前端等,镜像总大小约2-3GB。如果配置了镜像加速,下载速度会明显加快。启动过程中各服务会按照依赖关系逐个初始化,数据库会自动创建表结构,向量数据库会初始化索引,整个过程通常需要3-10分钟。建议通过日志查看启动进度,及时发现和解决可能出现的问题。

bash 复制代码
# 确保在 dify/docker 目录下
cd dify/docker

# 方法一:先手动拉取镜像(推荐,可以看到下载进度)
docker-compose pull

# 方法二:直接启动(会自动拉取缺失的镜像)
# docker-compose up -d

# 启动所有服务(-d表示后台运行,detached模式)
docker-compose up -d

# 查看服务状态(应该看到多个服务都是Up状态)
docker-compose ps

# 实时查看所有服务日志(检查是否有错误)
docker-compose logs -f

# 查看特定服务的日志
# docker-compose logs -f api
# docker-compose logs -f worker

# 如果一切正常,按Ctrl+C退出日志查看模式

启动过程详细说明

首次启动会拉取以下主要镜像(根据版本可能略有不同):

  • langgenius/dify-web: 前端Web界面
  • langgenius/dify-api: 后端API服务
  • postgres:15-alpine: PostgreSQL数据库
  • redis:6-alpine: Redis缓存
  • semitechnologies/weaviate: Weaviate向量数据库
  • nginx:alpine: Nginx反向代理
  • certbot/certbot: SSL证书管理(HTTPS场景)

所有服务状态显示为"Up"或"Up (healthy)"表示启动成功。如果看到"Exit"或"Restarting"状态,说明服务启动失败,需要查看日志排查问题。常见启动失败原因包括:端口冲突、环境变量配置错误、内存不足、磁盘空间不足等。

3.5 验证服务状态

服务启动后,需要验证各个组件是否正常运行。通过查看容器状态、日志输出和资源使用情况,可以及时发现和解决潜在问题。正常情况下,所有服务应该在5分钟内完成启动并进入运行状态。如果某个服务长时间处于启动中或反复重启,说明存在配置问题或资源不足,需要查看详细日志进行排查。建议保持日志窗口打开观察一段时间,确保没有持续出现的错误信息。

bash 复制代码
# 查看所有容器状态和端口映射
docker compose ps

# 查看特定服务的详细日志(最近100行)
docker compose logs --tail=100 api
docker compose logs --tail=100 worker
docker compose logs --tail=100 web
docker compose logs --tail=100 db

# 持续跟踪特定服务日志(用于调试)
docker compose logs -f api

# 检查服务健康状态(格式化输出)
docker compose ps --format "table {{.Name}}\t{{.Status}}\t{{.Ports}}"

# 查看所有容器的资源使用情况(CPU、内存、网络、磁盘IO)
docker stats

# 检查服务端口是否正常监听
netstat -tulnp | grep -E "80|443|5432|6379|8080"

# 查看Docker网络配置
docker network ls
docker network inspect dify_default

3.6 访问Dify

服务正常运行后,就可以通过浏览器访问Dify了。首次访问会自动进入初始化向导,需要创建管理员账号并完成基本设置。初始化完成后,会进入Dify的主控制台,可以开始创建AI应用、配置模型、管理知识库等操作。如果无法访问,请检查防火墙规则、端口映射配置和服务运行状态。

服务器本地测试

bash 复制代码
# 在服务器上测试HTTP响应
curl http://localhost

# 应该返回HTML内容,包含Dify的前端页面代码
# 如果看到404或连接被拒绝,说明服务未正常启动

# 测试API端点
curl http://localhost/api/health
# 应该返回健康检查信息

外网浏览器访问

  1. 打开浏览器(推荐Chrome、Firefox、Edge)
  2. 访问:http://your_server_ip(将your_server_ip替换为实际服务器IP地址)
    • 例如:http://123.45.67.89
    • 如果修改了端口,需要加上端口号:http://123.45.67.89:8080
  3. 首次访问会进入初始化设置页面

初始化设置流程

  1. 创建管理员账号
    • 邮箱:设置管理员邮箱地址(用于登录和接收通知)
    • 密码:设置强密码(至少8位,建议包含大小写字母、数字和特殊字符)
    • 用户名:设置管理员显示名称
  2. 配置基本信息 (可选)
    • 工作空间名称:设置组织或团队名称
    • 语言偏好:选择中文或其他语言
  3. 点击"开始使用"完成初始化,进入Dify主控制台

初始化后的操作建议

  • 首先在"设置"-"模型供应商"中配置至少一个LLM模型(OpenAI、Claude等)
  • 如果使用本地模型,参考后续Ollama集成章节进行配置
  • 创建第一个应用测试功能
  • 配置知识库和向量数据库连接

4. 部署Ollama本地大模型

4.1 Ollama简介

Ollama是一个开源的本地大语言模型运行框架,专为在个人电脑和服务器上轻松运行大型语言模型而设计。它的核心优势在于简化了模型的下载、部署和管理流程,用户只需一行命令即可运行Llama3、Qwen、Mistral、Gemma等主流开源模型。Ollama采用类似Docker的设计理念,将模型打包成标准化格式,提供统一的API接口,使得本地模型的使用体验接近云端API服务。对于希望实现数据隐私保护、降低API成本、或在离线环境中使用AI能力的用户和企业来说,Ollama是理想的解决方案。它与Dify深度集成,可以为Dify提供完全本地化的AI推理能力,无需依赖任何外部API服务。截至2025年,Ollama已支持超过100个开源模型,在GitHub上获得了超过10万star,成为最受欢迎的本地LLM运行工具之一。

4.2 安装Ollama

Ollama的安装过程非常简单,官方提供了一键安装脚本,自动处理依赖安装和服务配置。安装完成后,Ollama会以systemd服务形式运行,默认监听11434端口。对于GPU服务器,Ollama会自动检测并使用NVIDIA GPU进行加速推理,大幅提升模型运行速度。如果是CPU服务器,也可以正常运行,但推理速度会相对较慢,建议选择参数量较小的模型(如Llama3-8B、Qwen2.5-7B等)。

bash 复制代码
# 使用官方一键安装脚本(推荐)
curl -fsSL https://ollama.com/install.sh | sh

# 或者使用国内加速脚本(如果官方脚本下载慢)
# curl -fsSL https://ollama.ai/install.sh | sh

# 验证安装是否成功
ollama --version

# 查看Ollama服务状态
systemctl status ollama

# 如果服务未启动,手动启动
sudo systemctl start ollama
sudo systemctl enable ollama

配置Ollama服务(重要,用于Dify集成):

默认情况下,Ollama只监听127.0.0.1:11434,仅允许本地访问。如果Dify部署在Docker容器中,需要配置Ollama监听所有网络接口(0.0.0.0),并允许跨域访问,这样Docker容器才能访问宿主机上的Ollama服务。

bash 复制代码
# 编辑Ollama服务配置文件
sudo vim /etc/systemd/system/ollama.service

添加以下内容:

ini 复制代码
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_ORIGINS=*"

保存后重启Ollama服务:

bash 复制代码
# 重新加载systemd配置
sudo systemctl daemon-reload

# 重启Ollama服务
sudo systemctl restart ollama

# 验证服务监听状态
netstat -tulnp | grep 11434
# 应该看到 0.0.0.0:11434 或 :::11434

# 测试API是否可访问
curl http://localhost:11434/api/version
# 应该返回版本信息,如: {"version":"0.1.47"}

4.3 下载和管理模型

Ollama使用类似Docker的命令来管理模型,包括拉取(pull)、列表(list)、删除(rm)等操作。模型存储在/usr/share/ollama/.ollama/models目录下,首次运行模型时会自动从Ollama官方仓库下载。不同模型的大小从几百MB到几十GB不等,需要根据服务器配置和使用场景选择合适的模型。对于Dify应用,推荐选择7B-13B参数规模的模型,既能保证响应质量,又不会占用过多资源。

推荐模型列表

模型名称 参数量 大小 特点 适用场景
llama3.2 3B 2GB Meta最新小模型,速度快 快速对话、简单任务
llama3 8B 4.7GB 综合性能优秀,推理速度快 通用对话、文本生成
qwen2.5 7B 4.7GB 阿里通义千问,中文能力强 中文对话、文案创作
mistral 7B 4.1GB 开源社区热门,效率高 代码生成、技术文档
gemma2 9B 5.5GB Google开源,平衡性好 多语言任务、知识问答
deepseek-coder 6.7B 3.8GB 代码专用模型 代码生成、调试、解释
phi3 3.8B 2.3GB 微软小模型,效率极高 资源受限环境
bash 复制代码
# 拉取Llama3-8B模型(推荐,综合性能好)
ollama pull llama3

# 拉取Qwen2.5-7B模型(中文能力强)
ollama pull qwen2.5

# 拉取Mistral-7B模型
ollama pull mistral

# 拉取DeepSeek代码模型
ollama pull deepseek-coder

# 查看已下载的模型列表
ollama list

# 运行模型进行测试(会启动交互式对话)
ollama run llama3
# 输入问题测试,按 /bye 退出

# 删除不需要的模型(释放磁盘空间)
ollama rm model_name

# 查看模型详细信息
ollama show llama3

# 查看Ollama运行日志
journalctl -u ollama -f

模型下载说明

  • 首次下载模型需要较长时间,取决于网络速度和模型大小
  • 模型文件较大,确保服务器有足够的磁盘空间(建议至少50GB空闲)
  • 可以同时下载多个模型,Ollama会自动管理模型加载和卸载
  • 下载的模型会永久保存,除非手动删除

4.4 Dify集成Ollama配置

完成Ollama安装和模型下载后,就可以在Dify中配置Ollama作为模型供应商了。Dify对Ollama提供了原生支持,配置过程非常简单。关键是要正确配置Ollama的访问地址,特别是在Docker部署场景下需要使用特殊的地址格式。配置成功后,Dify就可以调用本地模型进行推理,完全脱离对云端API的依赖,实现数据安全和成本可控。

添加具体模型

  • Ollama服务地址:http://127.17.0.1:11434
  • 点击"获取模型列表"(Dify会自动从Ollama拉取可用模型)
  • 或者手动添加模型:
    • 模型名称:qwen3(必须与ollama list中的名称一致)
    • 模型类型:选择"聊天"或"文本生成"
    • 上下文长度:8192(根据模型实际支持调整)
    • 最大Token数:4096

5. 配置开机自启动

5.1 配置Dify开机自启动

Dify使用Docker Compose部署,可以通过systemd服务实现开机自启动。这样服务器重启后,Dify会自动启动所有服务,无需手动干预。对于生产环境来说,配置自启动是必要的,可以确保服务的高可用性。

bash 复制代码
# 创建Dify自启动服务文件
sudo vim /etc/systemd/system/dify.service

添加以下内容:

ini 复制代码
[Unit]
Description=Dify AI Platform
Requires=docker.service
After=docker.service ollama.service
Wants=ollama.service

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/home/ubuntu/dify/docker
# 注意:修改WorkingDirectory为你的实际dify/docker目录路径
ExecStart=/usr/bin/docker-compose up -d
ExecStop=/usr/bin/docker-compose down
ExecReload=/usr/bin/docker-compose restart

[Install]
WantedBy=multi-user.target

配置说明

  • Requires=docker.service:确保Docker服务先启动
  • After=ollama.service:在Ollama启动后再启动Dify
  • WorkingDirectory:指定Dify的docker目录路径,需要根据实际情况修改
  • Type=oneshot:服务执行一次即完成
  • RemainAfterExit=yes:服务完成后仍被视为活动状态

启用Dify自启动服务:

bash 复制代码
# 重新加载systemd配置
sudo systemctl daemon-reload

# 启用Dify开机自启动
sudo systemctl enable dify.service

# 测试启动服务
sudo systemctl start dify

# 查看服务状态
sudo systemctl status dify

# 测试停止和重启
sudo systemctl stop dify
sudo systemctl restart dify

5.2 配置Ollama开机自启动

Ollama在安装时已经自动配置了systemd服务,默认已启用开机自启动。但我们需要确认配置是否正确,并添加自动加载Qwen3模型的功能。

bash 复制代码
# 确认Ollama服务已启用自启动
sudo systemctl is-enabled ollama
# 如果显示 "enabled" 说明已配置,如果是 "disabled" 则需要启用

# 启用Ollama开机自启动(如果未启用)
sudo systemctl enable ollama

# 查看Ollama服务配置
sudo systemctl cat ollama

# 验证Ollama服务状态
sudo systemctl status ollama

5.3 配置Qwen3模型自动加载

为了确保Qwen3模型在系统启动后自动加载到内存中(warm-up),我们可以创建一个专门的服务来预加载模型。这样Dify首次调用时就不需要等待模型加载,能够快速响应。

bash 复制代码
# 创建模型预加载脚本
sudo vim /usr/local/bin/ollama-warmup.sh

添加以下内容:

bash 复制代码
#!/bin/bash
# Ollama模型预加载脚本

# 等待Ollama服务完全启动
sleep 10

# 检查Ollama服务是否可用
until curl -s http://localhost:11434/api/version > /dev/null; do
    echo "等待Ollama服务启动..."
    sleep 5
done

echo "Ollama服务已就绪,开始预加载模型..."

# 预加载Qwen3模型(发送一个简单的测试请求)
curl -X POST http://localhost:11434/api/generate -d '{
  "model": "qwen2.5",
  "prompt": "Hello",
  "stream": false
}' > /dev/null 2>&1

echo "Qwen3模型预加载完成!"

# 记录日志
logger "Ollama Qwen3 model warmed up successfully"

设置脚本权限:

bash 复制代码
# 添加执行权限
sudo chmod +x /usr/local/bin/ollama-warmup.sh

# 测试脚本运行
sudo /usr/local/bin/ollama-warmup.sh

创建systemd服务来自动执行预加载脚本:

bash 复制代码
# 创建模型预加载服务
sudo vim /etc/systemd/system/ollama-warmup.service

添加以下内容:

ini 复制代码
[Unit]
Description=Ollama Qwen3 Model Warm-up Service
After=ollama.service
Requires=ollama.service

[Service]
Type=oneshot
ExecStart=/usr/local/bin/ollama-warmup.sh
User=root
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

启用模型预加载服务:

bash 复制代码
# 重新加载systemd配置
sudo systemctl daemon-reload

# 启用开机自启动
sudo systemctl enable ollama-warmup.service

# 测试服务
sudo systemctl start ollama-warmup

# 查看服务状态
sudo systemctl status ollama-warmup

# 查看服务日志
journalctl -u ollama-warmup -f

5.4 验证自启动配置

完成以上配置后,建议重启服务器验证自启动是否正常工作。

bash 复制代码
# 查看所有自启动服务状态
sudo systemctl list-unit-files | grep -E "dify|ollama"

# 应该看到:
# dify.service                 enabled
# ollama.service               enabled
# ollama-warmup.service        enabled

# 重启服务器进行验证
sudo reboot

# 重启后,检查服务状态
sudo systemctl status dify
sudo systemctl status ollama
sudo systemctl status ollama-warmup

# 检查Docker容器运行状态
docker ps

# 检查Ollama模型是否可用
ollama list
curl http://localhost:11434/api/tags

# 测试Dify是否可访问
curl http://localhost

自启动顺序说明

  1. 系统启动 → Docker服务启动
  2. Ollama服务启动 → 监听11434端口
  3. Ollama模型预加载服务 → Qwen3模型加载到内存
  4. Dify服务启动 → 所有容器启动完成
  5. 整个系统就绪,可以正常使用

常见问题排查

如果自启动失败,可以通过以下命令查看日志:

bash 复制代码
# 查看Dify服务日志
journalctl -u dify -n 50 --no-pager

# 查看Ollama服务日志
journalctl -u ollama -n 50 --no-pager

# 查看模型预加载服务日志
journalctl -u ollama-warmup -n 50 --no-pager

# 查看系统启动日志
journalctl -b | grep -E "dify|ollama"

6. 总结

通过本教程,我们完成了从零开始在云服务器上部署Dify AI平台的完整流程,并成功集成了Ollama本地大模型,实现了完全自主可控的AI应用环境。整个部署过程涵盖了以下核心内容:

第一章:Dify平台认知

深入了解了Dify作为开源LLMOps平台的核心价值和功能特性。Dify不仅是一个低代码AI应用开发工具,更是一个完整的企业级AI应用解决方案。它整合了23家模型供应商、80+种大语言模型,提供聊天助手、文本生成、AI Agent、工作流四大应用类型,内置高质量RAG引擎和多模态知识库系统。为生产环境的高可用性需求,我们配置了完整的自启动体系。通过systemd服务管理,实现了Docker、Ollama、Dify、模型预加载的自动化启动顺序控制。特别是Qwen3模型的warm-up机制,确保系统启动后模型已加载到内存,首次API调用即可快速响应,显著提升了用户体验。这套自启动方案保证了服务器重启或意外宕机后系统能够自动恢复运行,最小化服务中断时间。

7. 参考链接

相关推荐
yiSty3 小时前
linux命令行下使用百度云网盘【自用】
linux·运维·百度云
UVM_ERROR3 小时前
UVM实战:RDMA Host侧激励开发全流程问题排查与解决
服务器·网络·数据库
福尔摩斯张3 小时前
插件式架构:解耦与扩展的艺术与实践(超详细)
linux·服务器·网络·网络协议·tcp/ip
txzz88883 小时前
CentOS-Stream-10 搭建YUM源Web服务器
linux·运维·centos·yum源·linux系统更新·centos系统更新·自建web yum源
我科绝伦(Huanhuan Zhou)4 小时前
Linux系统硬件时钟与系统时钟深度解析及同步实操指南
linux·运维·服务器
k***92164 小时前
【Linux】进程概念(六):地址空间核心机制
linux·运维·算法
李白同学4 小时前
Linux:调试器-gdb/cgdb使用
linux·服务器·c语言·c++
保持低旋律节奏4 小时前
linux——进程调度(时间片+优先级轮转调度算法O(1))
linux·运维·算法
Dobby_054 小时前
【k8s】集群安全机制(二):鉴权
运维·安全·kubernetes