Dify 上线实战:从 Docker Compose 部署到 HTTPS、备份与运维命令全流程
Dify 生产环境部署指南|附完整命令
Dify 是一个开源的大语言模型应用开发平台,支持可视化编排 AI 应用、构建 Chatbot、Agent、Workflow、RAG 知识库应用,并能够对接 OpenAI、Azure OpenAI、Anthropic、通义千问、智谱、DeepSeek、Ollama 等多种模型服务。对于团队或企业来说,如果只是本地体验,可以直接用 Docker Compose 快速启动;但如果要真正投入生产环境,就需要考虑服务器规格、域名 HTTPS、数据持久化、服务安全、备份恢复、版本升级、日志监控等问题。
本文将以 Docker Compose 部署方式 为主,介绍如何在 Linux 服务器上部署一套可用于生产环境的 Dify,并附带完整命令示例。适合希望快速上线 Dify,同时又尽量保证稳定性和可维护性的开发者、运维人员或技术负责人参考。
一、生产环境部署前的准备
在开始部署之前,需要先明确一点:Dify 虽然可以通过一条命令启动,但生产环境不建议“随便找台机器直接跑”。因为 Dify 涉及多个组件,包括 Web 前端、API 服务、Worker、PostgreSQL、Redis、向量数据库、Nginx 等。如果后续业务量上来,配置不足或者数据没有持久化,都会带来稳定性风险。
二、服务器推荐配置
如果只是小团队内部使用,推荐最低配置如下:
| 项目 | 推荐配置 |
|---|---|
| CPU | 4 核及以上 |
| 内存 | 8GB 及以上,推荐 16GB |
| 磁盘 | 100GB SSD 起步 |
| 系统 | Ubuntu 22.04 LTS / Debian 12 / Rocky Linux 9 |
| 网络 | 可访问外部模型 API,或内网可访问本地模型服务 |
如果你计划部署知识库、上传大量文档、使用向量检索,建议磁盘至少准备 200GB 以上,并且定期备份 PostgreSQL、向量数据库和上传文件目录。
本文示例以 Ubuntu 22.04 LTS 为例。
三、部署架构说明
使用官方 Docker Compose 部署时,通常会包含以下服务:
| 服务 | 说明 |
|---|---|
| api | Dify 后端 API 服务 |
| worker | 异步任务处理服务 |
| web | Dify 前端页面 |
| db | PostgreSQL 数据库 |
| redis | 缓存和任务队列 |
| nginx | 反向代理入口 |
| weaviate / qdrant / pgvector | 向量数据库,视配置而定 |
| sandbox | 代码执行沙箱 |
| plugin-daemon | 插件服务 |
在生产环境中,最重要的是保证以下几类数据不丢失:
- PostgreSQL 数据;
- Redis 数据,虽然部分缓存可恢复,但队列任务可能受影响;
- 向量数据库数据;
- 上传文件和知识库文件;
.env环境变量配置文件。
四、安装基础依赖
首先使用 SSH 登录服务器:
ssh root@你的服务器IP
更新系统软件包:
apt update && apt upgrade -y
安装常用工具:
apt install -y ca-certificates curl gnupg lsb-release git vim unzip ufw htop
设置服务器时区,例如设置为上海时区:
timedatectl set-timezone Asia/Shanghai
timedatectl
五、安装 Docker
生产环境推荐使用 Docker 官方源安装,而不是直接使用系统自带旧版本。
卸载旧版本 Docker:
apt remove -y docker docker-engine docker.io containerd runc || true
添加 Docker GPG 密钥:
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
| gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
添加 Docker 软件源:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" \
> /etc/apt/sources.list.d/docker.list
安装 Docker Engine 和 Docker Compose 插件:
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
验证安装结果:
docker version
docker compose version
设置 Docker 开机自启:
systemctl enable docker
systemctl start docker
如果你不是 root 用户,可以将当前用户加入 docker 用户组:
usermod -aG docker $USER
然后重新登录终端,使权限生效。
六、配置系统防火墙
生产环境建议只开放必要端口。一般情况下:
| 端口 | 用途 |
|---|---|
| 22 | SSH |
| 80 | HTTP,用于申请证书和跳转 HTTPS |
| 443 | HTTPS |
| 其他端口 | 不建议直接暴露 |
启用 UFW 防火墙:
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
查看防火墙状态:
ufw status
如果你的云服务器还有安全组,例如阿里云、腾讯云、AWS、Azure 等,也需要在控制台放行 80、443、22 端口。
七、获取 Dify 源码
进入建议安装目录:
mkdir -p /opt
cd /opt
克隆 Dify 官方仓库:
git clone https://github.com/langgenius/dify.git
进入 Docker 部署目录:
cd /opt/dify/docker
查看目录内容:
ls -lah
通常你会看到 docker-compose.yaml、.env.example 等文件。
八、配置环境变量
复制环境变量模板:
cp .env.example .env
编辑 .env 文件:
vim .env
生产环境至少需要关注以下配置项。
1. 修改访问域名
假设你的域名为:
dify.example.com
你需要先在域名 DNS 服务商处添加 A 记录:
dify.example.com -> 你的服务器公网 IP
然后在 .env 中配置服务地址。不同版本 Dify 的变量名可能略有变化,请以当前 .env.example 为准,常见配置如下:
CONSOLE_WEB_URL=https://dify.example.com
APP_WEB_URL=https://dify.example.com
SERVICE_API_URL=https://dify.example.com
如果有单独的 API 域名,也可以拆分:
CONSOLE_WEB_URL=https://console.example.com
APP_WEB_URL=https://app.example.com
SERVICE_API_URL=https://api.example.com
但对于大多数团队来说,统一使用一个域名即可,维护成本更低。
2. 修改密钥配置
生产环境一定不要使用默认密钥。可以使用下面命令生成随机密钥:
openssl rand -base64 42
然后将生成结果填入 .env 中对应的密钥变量,例如:
SECRET_KEY=请替换为你生成的随机字符串
如果还有 INIT_SECRET、CODE_EXECUTION_API_KEY 等字段,也建议全部替换为安全随机字符串。
3. 修改数据库密码
找到 PostgreSQL 相关配置,例如:
DB_USERNAME=postgres
DB_PASSWORD=postgres
DB_HOST=db
DB_PORT=5432
DB_DATABASE=dify
将默认密码改成强密码:
DB_PASSWORD=请替换为强密码
可以使用以下命令生成强密码:
openssl rand -base64 24
4. 配置文件存储
Dify 支持本地文件存储,也支持 S3、Azure Blob、阿里云 OSS 等对象存储。小规模生产环境可以先使用本地存储,但一定要做好备份。
常见本地存储配置类似:
STORAGE_TYPE=local
如果是对象存储,通常需要配置:
STORAGE_TYPE=s3
S3_ENDPOINT=https://s3.amazonaws.com
S3_BUCKET_NAME=your-bucket
S3_ACCESS_KEY=your-access-key
S3_SECRET_KEY=your-secret-key
S3_REGION=ap-southeast-1
对象存储的优点是数据可靠性更高,也便于多节点扩展。
5. 配置向量数据库
Dify 支持多种向量数据库,包括 Weaviate、Qdrant、Milvus、pgvector 等。初次生产部署可以根据官方默认配置启动。如果你没有特别需求,可以暂时使用默认向量数据库方案。
常见配置项类似:
VECTOR_STORE=weaviate
或者:
VECTOR_STORE=qdrant
如果你计划长期维护,建议根据团队熟悉程度选择。对于轻量部署,pgvector 的维护复杂度较低;对于更大规模检索,Qdrant、Milvus 等方案更适合扩展。
九、启动 Dify 服务
在 /opt/dify/docker 目录下执行:
cd /opt/dify/docker
docker compose up -d
查看容器状态:
docker compose ps
查看实时日志:
docker compose logs -f
如果只想查看 API 服务日志:
docker compose logs -f api
查看 worker 日志:
docker compose logs -f worker
首次启动时,Docker 需要拉取镜像,可能会耗时较长。如果服务器网络访问 Docker Hub 较慢,可以配置 Docker 镜像加速器,或使用云厂商提供的容器镜像服务。
十、检查服务是否正常
启动完成后,可以先在服务器本机测试:
curl -I http://127.0.0.1
如果返回类似下面信息,说明 Nginx 服务已经响应:
HTTP/1.1 200 OK
也可以查看所有容器是否健康:
docker compose ps
如果发现某个容器一直 Restarting,需要查看对应日志:
docker compose logs -f 容器服务名
例如:
docker compose logs -f api
docker compose logs -f db
docker compose logs -f nginx
十一、配置 HTTPS 证书
生产环境强烈建议使用 HTTPS。你可以选择两种方式:
- 使用 Dify Docker 中的 Nginx 配置,并挂载证书;
- 在宿主机安装 Nginx 或 Caddy,作为统一反向代理。
为了便于维护,本文推荐使用 宿主机 Caddy 或 宿主机 Nginx。不过如果你已经使用 Dify 自带 Nginx,也可以在其配置中加入证书。
下面以宿主机安装 Nginx + Certbot 为例。
1. 安装 Nginx 和 Certbot
apt install -y nginx certbot python3-certbot-nginx
由于 Dify 自带 Docker Nginx 可能占用 80 和 443 端口,如果你准备使用宿主机 Nginx,需要调整 Dify Docker 暴露端口。比如将 Dify 的 Nginx 映射到本地 8080:
编辑 docker-compose.yaml 或相关 compose 文件,找到 nginx 端口配置:
ports:
- "80:80"
- "443:443"
改为:
ports:
- "127.0.0.1:8080:80"
然后重启服务:
docker compose down
docker compose up -d
2. 配置 Nginx 反向代理
创建配置文件:
vim /etc/nginx/sites-available/dify.conf
写入以下内容:
server {
listen 80;
server_name dify.example.com;
client_max_body_size 100M;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 300s;
proxy_send_timeout 300s;
}
}
启用站点:
ln -s /etc/nginx/sites-available/dify.conf /etc/nginx/sites-enabled/dify.conf
检查配置:
nginx -t
重载 Nginx:
systemctl reload nginx
3. 申请 HTTPS 证书
执行:
certbot --nginx -d dify.example.com
按照提示输入邮箱,并选择是否强制跳转 HTTPS。申请成功后,Certbot 会自动修改 Nginx 配置。
检查证书自动续期:
certbot renew --dry-run
如果测试通过,说明自动续期配置正常。
十二、初始化管理员账号
打开浏览器访问:
https://dify.example.com
首次访问会进入初始化页面。按照提示创建管理员账号即可。
建议管理员账号使用企业邮箱,并开启强密码策略。Dify 作为 AI 应用开发平台,可能包含企业知识库、Prompt、API Key、对话数据等敏感信息,因此账号安全非常重要。
十三、配置模型供应商
登录后台后,进入模型供应商配置页面。以 OpenAI 为例,需要填写 API Key。如果你的服务器在国内网络环境下,可能还需要配置代理或使用可访问的模型服务。
对于不同模型供应商,大致需要以下信息:
| 模型供应商 | 常见配置 |
|---|---|
| OpenAI | API Key、Base URL |
| Azure OpenAI | Endpoint、API Key、Deployment Name、API Version |
| DeepSeek | API Key、API Endpoint |
| 通义千问 | DashScope API Key |
| 智谱 AI | API Key |
| Ollama | 本地服务地址,如 http://host.docker.internal:11434 |
如果使用本地 Ollama,需要确保 Docker 容器可以访问宿主机或内网模型服务器。例如模型服务在宿主机上,可以尝试使用宿主机内网 IP:
http://192.168.1.10:11434
也可以在 Docker Compose 中加入额外网络配置,但生产环境建议优先采用固定内网地址,便于维护。
十四、常用运维命令
生产环境中,下面这些命令非常常用,建议收藏。
进入 Dify Docker 目录:
cd /opt/dify/docker
启动服务:
docker compose up -d
停止服务:
docker compose down
重启服务:
docker compose restart
查看服务状态:
docker compose ps
查看全部日志:
docker compose logs -f
查看最近 200 行日志:
docker compose logs --tail=200
查看某个服务日志:
docker compose logs -f api
docker compose logs -f worker
docker compose logs -f web
docker compose logs -f db
拉取最新镜像:
docker compose pull
重建并启动:
docker compose up -d
查看磁盘占用:
df -h
du -sh /opt/dify
docker system df
清理无用 Docker 资源:
docker system prune -f
注意:不要随意执行带 --volumes 的清理命令,否则可能删除数据卷。
十五、数据备份方案
生产环境部署 Dify,备份是必须做的事情。建议至少备份以下内容:
/opt/dify/docker/.env- PostgreSQL 数据库;
- 向量数据库数据;
- 上传文件目录;
- Docker Compose 配置文件。
1. 备份 PostgreSQL
查看数据库容器名称:
cd /opt/dify/docker
docker compose ps
执行数据库备份:
mkdir -p /backup/dify
docker compose exec -T db pg_dump -U postgres dify > /backup/dify/dify_$(date +%F_%H%M%S).sql
如果你修改过数据库用户名或数据库名,请替换命令中的 postgres 和 dify。
压缩备份文件:
gzip /backup/dify/dify_*.sql
2. 备份环境变量和配置
cp /opt/dify/docker/.env /backup/dify/.env_$(date +%F_%H%M%S)
cp /opt/dify/docker/docker-compose.yaml /backup/dify/docker-compose_$(date +%F_%H%M%S).yaml
3. 备份上传文件和数据卷
可以先查看 Docker 卷:
docker volume ls
查看 Dify 相关卷:
docker volume ls | grep dify
如果你使用本地文件存储,需要重点备份对应挂载目录。可以使用 rsync:
rsync -avh /opt/dify/docker/volumes/ /backup/dify/volumes/
如果目录名称不同,请根据实际 compose 配置调整。
4. 创建自动备份脚本
创建脚本:
vim /opt/backup_dify.sh
写入:
#!/bin/bash
set -e
BACKUP_DIR="/backup/dify"
DIFY_DIR="/opt/dify/docker"
DATE=$(date +%F_%H%M%S)
mkdir -p "$BACKUP_DIR"
cd "$DIFY_DIR"
docker compose exec -T db pg_dump -U postgres dify | gzip > "$BACKUP_DIR/dify_db_$DATE.sql.gz"
cp "$DIFY_DIR/.env" "$BACKUP_DIR/env_$DATE"
cp "$DIFY_DIR/docker-compose.yaml" "$BACKUP_DIR/docker-compose_$DATE.yaml"
if [ -d "$DIFY_DIR/volumes" ]; then
tar -czf "$BACKUP_DIR/dify_volumes_$DATE.tar.gz" -C "$DIFY_DIR" volumes
fi
find "$BACKUP_DIR" -type f -mtime +14 -delete
echo "Dify backup completed: $DATE"
授权:
chmod +x /opt/backup_dify.sh
手动执行测试:
/opt/backup_dify.sh
加入定时任务:
crontab -e
每天凌晨 3 点备份:
0 3 * * * /opt/backup_dify.sh >> /var/log/backup_dify.log 2>&1
十六、版本升级流程
Dify 更新频率较高,生产环境升级一定要谨慎。建议按照以下流程执行:
- 阅读官方 Release Notes;
- 在测试环境先升级验证;
- 备份数据库、
.env、数据卷; - 拉取最新代码和镜像;
- 启动服务并观察日志;
- 验证核心功能,包括登录、知识库、应用调用、Workflow、模型调用等。
升级命令示例:
cd /opt/dify
git pull
进入 Docker 目录:
cd /opt/dify/docker
对比 .env.example 是否有新增配置:
diff .env.example .env
注意:这个命令只是对比,不会自动合并。若发现新版本增加了环境变量,需要手动补充到 .env。
备份:
/opt/backup_dify.sh
拉取镜像:
docker compose pull
重启:
docker compose down
docker compose up -d
查看状态:
docker compose ps
docker compose logs -f api
十七、安全加固建议
生产环境除了跑起来,还需要尽量降低安全风险。
1. 不暴露数据库和 Redis
PostgreSQL、Redis、向量数据库不应该暴露到公网。只允许 Docker 内部网络访问即可。检查 compose 文件,避免出现类似:
ports:
- "5432:5432"
如果确实需要远程访问数据库,建议使用 VPN、堡垒机或 SSH 隧道,而不是直接开放公网端口。
2. 使用强密码和随机密钥
.env 中所有密钥、数据库密码、API Key 都应该使用强随机字符串。不要使用:
admin
password
123456
postgres
dify
3. 限制 SSH 登录
建议关闭 root 密码登录,使用 SSH Key 登录。编辑 SSH 配置:
vim /etc/ssh/sshd_config
建议配置:
PermitRootLogin prohibit-password
PasswordAuthentication no
PubkeyAuthentication yes
重启 SSH:
systemctl restart ssh
注意:修改 SSH 配置前,一定要确认你已经可以通过密钥登录,否则可能把自己锁在服务器外。
4. 定期更新系统和镜像
系统安全更新:
apt update && apt upgrade -y
Dify 镜像更新:
cd /opt/dify/docker
docker compose pull
docker compose up -d
十八、常见问题排查
1. 页面打不开
先检查容器状态:
cd /opt/dify/docker
docker compose ps
检查端口监听:
ss -lntp | grep -E '80|443|8080'
检查 Nginx:
nginx -t
systemctl status nginx
检查防火墙:
ufw status
2. API 服务启动失败
查看日志:
docker compose logs -f api
常见原因包括:
.env配置错误;- 数据库未启动;
- 数据库密码不一致;
- 依赖服务初始化较慢;
- 新版本环境变量缺失。
3. Worker 服务异常
查看日志:
docker compose logs -f worker
Worker 异常可能导致文档解析、知识库索引、异步任务执行失败。一般需要重点检查 Redis、数据库、模型供应商配置是否正常。
4. 上传文件失败
检查 Nginx 上传大小限制:
client_max_body_size 100M;
如果需要上传更大的文件,可以调整为:
client_max_body_size 500M;
修改后重载:
nginx -t
systemctl reload nginx
同时也要检查 Dify .env 中是否有上传大小限制相关配置。
5. 模型调用失败
模型调用失败通常不是 Dify 本身问题,而是 API Key、模型名称、网络访问或额度限制导致。可以在服务器上测试外部连通性:
curl -I https://api.openai.com
如果使用自定义 Base URL,也可以测试:
curl -I https://你的模型网关域名
十九、生产环境最佳实践总结
为了让 Dify 稳定运行,建议至少做到以下几点:
- 使用独立服务器或独立虚拟机部署;
- 使用 Docker Compose 管理服务;
- 配置正式域名和 HTTPS;
- 修改所有默认密码和密钥;
- 不暴露数据库、Redis、向量数据库端口;
- 定期备份数据库、文件和
.env; - 升级前先备份,并优先在测试环境验证;
- 监控磁盘、内存、CPU 和容器状态;
- 重要业务建议使用对象存储和独立数据库;
- 对管理员账号、模型 API Key 和知识库数据做好权限管理。
二十、结语
通过本文的步骤,你可以在 Ubuntu 服务器上完成一套相对完整的 Dify 生产环境部署。从安装 Docker、拉取源码、配置环境变量、启动服务,到 HTTPS 配置、备份、升级和安全加固,基本覆盖了上线前后的核心运维工作。
对于小团队来说,Docker Compose 部署已经足够快速和实用;对于更大规模的企业场景,可以进一步将 PostgreSQL、Redis、对象存储、向量数据库拆分为独立托管服务,并考虑 Kubernetes 部署、自动扩缩容、集中日志、监控告警和多环境发布流程。
最后提醒一句:生产环境最重要的不是“能不能启动”,而是“数据能不能保住、服务能不能恢复、升级能不能回滚”。只要你做好配置管理、备份恢复和安全加固,Dify 就可以成为团队构建 AI 应用的一套稳定基础设施。