上一篇 下一篇 分享链接 返回 返回顶部

Dify 上线实战:从 Docker Compose 部署到 HTTPS、备份与运维命令全流程

发布人:慈云数据-客服中心 发布时间:2小时前 阅读量:0

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 插件服务

在生产环境中,最重要的是保证以下几类数据不丢失:

  1. PostgreSQL 数据;
  2. Redis 数据,虽然部分缓存可恢复,但队列任务可能受影响;
  3. 向量数据库数据;
  4. 上传文件和知识库文件;
  5. .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_SECRETCODE_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。你可以选择两种方式:

  1. 使用 Dify Docker 中的 Nginx 配置,并挂载证书;
  2. 在宿主机安装 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,备份是必须做的事情。建议至少备份以下内容:

  1. /opt/dify/docker/.env
  2. PostgreSQL 数据库;
  3. 向量数据库数据;
  4. 上传文件目录;
  5. 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

如果你修改过数据库用户名或数据库名,请替换命令中的 postgresdify

压缩备份文件:

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 更新频率较高,生产环境升级一定要谨慎。建议按照以下流程执行:

  1. 阅读官方 Release Notes;
  2. 在测试环境先升级验证;
  3. 备份数据库、.env、数据卷;
  4. 拉取最新代码和镜像;
  5. 启动服务并观察日志;
  6. 验证核心功能,包括登录、知识库、应用调用、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

常见原因包括:

  1. .env 配置错误;
  2. 数据库未启动;
  3. 数据库密码不一致;
  4. 依赖服务初始化较慢;
  5. 新版本环境变量缺失。

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 稳定运行,建议至少做到以下几点:

  1. 使用独立服务器或独立虚拟机部署;
  2. 使用 Docker Compose 管理服务;
  3. 配置正式域名和 HTTPS;
  4. 修改所有默认密码和密钥;
  5. 不暴露数据库、Redis、向量数据库端口;
  6. 定期备份数据库、文件和 .env
  7. 升级前先备份,并优先在测试环境验证;
  8. 监控磁盘、内存、CPU 和容器状态;
  9. 重要业务建议使用对象存储和独立数据库;
  10. 对管理员账号、模型 API Key 和知识库数据做好权限管理。

二十、结语

通过本文的步骤,你可以在 Ubuntu 服务器上完成一套相对完整的 Dify 生产环境部署。从安装 Docker、拉取源码、配置环境变量、启动服务,到 HTTPS 配置、备份、升级和安全加固,基本覆盖了上线前后的核心运维工作。

对于小团队来说,Docker Compose 部署已经足够快速和实用;对于更大规模的企业场景,可以进一步将 PostgreSQL、Redis、对象存储、向量数据库拆分为独立托管服务,并考虑 Kubernetes 部署、自动扩缩容、集中日志、监控告警和多环境发布流程。

最后提醒一句:生产环境最重要的不是“能不能启动”,而是“数据能不能保住、服务能不能恢复、升级能不能回滚”。只要你做好配置管理、备份恢复和安全加固,Dify 就可以成为团队构建 AI 应用的一套稳定基础设施。

目录结构
全文