1. 为什么选择Dify和Ubuntu 20.04的组合如果你正在寻找一个开箱即用的大语言模型开发平台Dify绝对值得一试。这个开源项目最近在GitHub上热度飙升原因很简单——它让开发者能够像搭积木一样快速构建AI应用。而Ubuntu 20.04 LTS作为长期支持版本提供了稳定的基础环境特别适合需要7x24小时运行的AI服务。我去年在客户现场部署过类似系统当时花了整整三天调试环境。后来发现用Docker Compose部署Dify从零开始不到两小时就能跑起来。这种效率提升对开发者来说简直是福音特别是当你需要在多台服务器上重复部署时。Dify最吸引我的地方是它的全栈式设计。你不需要分别搭建前端、后端、数据库也不用头疼各种服务之间的连接问题。一个docker-compose.yml文件就包含了所有组件Web界面、API服务、工作队列、向量数据库Weaviate、关系型数据库PostgreSQL和缓存Redis。这种设计让部署变得异常简单特别适合中小团队快速验证AI创意。2. 环境准备打造适合Dify的Ubuntu系统2.1 基础系统配置首先确保你的Ubuntu 20.04是最新版本。我建议使用干净的服务器环境避免已有服务造成端口冲突。打开终端先来一波基础操作sudo apt update sudo apt upgrade -y sudo apt install -y curl git python3-pip内存方面Dify官方建议至少8GB但我实测4GB也能跑起来只是处理大模型时会有点吃力。如果你计划同时运行多个AI工作流16GB会更稳妥。磁盘空间建议预留50GB以上特别是打算处理大量文档时——RAG功能会生成不少向量数据。2.2 Docker引擎安装Dify完全基于Docker部署所以我们需要先装好Docker CE。别再用老旧的apt install docker.io了官方安装脚本才是正道curl -fsSL https://get.docker.com | sudo sh安装完成后有个超级重要的步骤很多人会忽略——把当前用户加入docker组。否则每次都要sudo既麻烦又不安全sudo usermod -aG docker $USER newgrp docker # 立即生效不需要重新登录验证安装是否成功docker --version # 应该输出类似: Docker version 24.0.7, build afdd53b2.3 Docker Compose安装虽然Ubuntu仓库里有docker-compose但版本太旧。Dify需要v2以上版本我们直接装官方最新版sudo curl -L https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose sudo chmod x /usr/local/bin/docker-compose检查版本时要注意输出格式docker-compose version # Docker Compose version v2.23.3如果看到v1.x的版本说明系统里有老版本残留需要先卸载再重装。3. 获取和配置Dify代码3.1 克隆代码仓库Dify的GitHub仓库更新很频繁建议总是用最新版git clone https://github.com/langgenius/dify.git cd dify这里有个小技巧如果你在国内可能会遇到GitHub克隆慢的问题。可以改用国内镜像git clone https://gitee.com/langgenius/dify.git代码目录结构很清晰我们重点关注的是docker文件夹里面包含了所有部署需要的配置文件。3.2 环境变量配置进入docker目录复制示例环境文件cd docker cp .env.example .env现在用nano或vim编辑.env文件有几个关键参数需要关注nano .envAPP_URL改成你服务器的实际IP或域名比如http://192.168.1.100SECRET_KEY建议生成一个随机字符串替换可以用openssl rand -hex 32命令生成DATABASE_URL如果要用外部数据库在这里配置连接字符串STORAGE_TYPE默认用本地存储生产环境建议改成s3或azure保存退出后还有个隐藏坑要注意检查文件权限。因为Docker容器内部用户可能没有root权限所以chmod 644 .env4. 启动Dify服务4.1 解决镜像拉取问题直接运行docker-compose up可能会卡在拉取镜像这一步特别是国内用户。这时候需要配置镜像加速器sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json -EOF { registry-mirrors: [ https://docker.mirrors.ustc.edu.cn, https://hub-mirror.c.163.com ] } EOF sudo systemctl restart docker4.2 启动容器现在可以正式启动了建议先用-d参数后台运行docker-compose up -d第一次运行会下载所有基础镜像时间取决于你的网速。我这边测试大概需要下载3GB左右的内容。看到这样的输出就说明启动成功了[] Running 11/11 ✔ Network docker_default Created ✔ Container docker-redis-1 Started ✔ Container docker-weaviate-1 Started ✔ Container docker-db-1 Started ...4.3 验证服务状态用这个命令查看所有容器状态docker-compose ps健康状态显示为healthy才是真的没问题。特别是db和redis这两个基础服务如果它们没起来其他服务都会报错。如果发现某个容器不断重启可以查看它的日志docker-compose logs -f web # 查看web容器日志5. 访问和初始化Dify5.1 首次访问Web界面在浏览器输入服务器IP比如http://192.168.1.100应该能看到Dify的欢迎页面。如果打不开先检查防火墙sudo ufw allow 80/tcp sudo ufw allow 443/tcp5.2 初始化管理员账号第一次访问会让你创建管理员账号。建议使用强密码并妥善保存。这个账号拥有最高权限可以管理所有AI工作流和用户。5.3 连接大语言模型进入后台后第一件事是配置LLM连接。Dify支持多种模型OpenAI系列GPT-3.5/4开源模型Llama2、ChatGLM等国内大模型文心一言、通义千问以OpenAI为例在设置-模型供应商中添加你的API Key。如果你用本地部署的Llama2需要额外配置API地址。6. 常见问题排查6.1 端口冲突问题如果80端口被占用可以修改docker-compose.yml中的nginx配置services: nginx: ports: - 8080:80 # 改为其他端口记得同时修改.env中的APP_URL加上新端口号。6.2 磁盘空间不足Dify运行一段时间后可能占用大量磁盘空间主要是Weaviate的向量数据和PostgreSQL的日志。可以设置日志轮转sudo nano /etc/docker/daemon.json添加以下配置限制日志大小{ log-driver: json-file, log-opts: { max-size: 10m, max-file: 3 } }6.3 性能调优如果响应速度慢可以调整worker数量# 修改docker-compose.yml worker: deploy: replicas: 2 # 根据CPU核心数调整对于高并发场景还需要调整PostgreSQL和Redis的资源配置。7. 生产环境部署建议7.1 使用外部数据库对于正式项目建议把数据库移到容器外。可以单独部署PostgreSQL和Redis然后在.env中配置DATABASE_URLpostgresql://user:passwordhost:5432/dify REDIS_HOSTyour_redis_host7.2 启用HTTPS用Lets Encrypt免费证书配置HTTPS# 修改docker-compose.yml中nginx部分 volumes: - ./data/certbot/conf:/etc/letsencrypt - ./data/certbot/www:/var/www/certbot7.3 定期备份关键数据包括PostgreSQL数据库Weaviate向量数据上传的文档文件可以用cronjob设置自动备份0 3 * * * docker exec -t docker_db_1 pg_dump -U dify -d dify /backups/dify_$(date \%Y\%m\%d).sql8. 进阶使用技巧8.1 自定义模型部署如果你想接入自己微调的模型可以这样操作准备模型API服务比如用FastAPI封装在docker-compose.yml中添加新服务在Dify后台注册为自定义模型8.2 插件开发Dify支持自定义插件比如from dify.plugins import Plugin class WeatherPlugin(Plugin): def execute(self, inputs): city inputs[city] # 调用天气API return {temperature: 25}把插件代码放在./docker/plugins目录重启服务即可生效。8.3 监控与日志建议部署PrometheusGrafana监控# 在docker-compose.yml中添加 monitor: image: prom/prometheus ports: - 9090:9090配置好后可以实时查看API响应时间、错误率等关键指标。