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

Dify 生产环境实战部署:Docker Compose、Nginx、HTTPS 与配置文件全套示例

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

Dify 生产环境部署指南|附配置文件

Dify 是一款开源的大语言模型应用开发平台,支持构建 AI 助手、工作流应用、知识库问答、Agent、文本生成应用等。相比直接调用模型 API,Dify 提供了更完整的应用编排、Prompt 管理、上下文管理、知识库检索、日志追踪、团队协作和 API 发布能力,因此非常适合企业或团队在生产环境中落地 AI 应用。

本文将从生产环境部署角度出发,介绍如何在 Linux 服务器上部署 Dify,并给出常用配置文件示例,包括 Docker Compose、环境变量、Nginx 反向代理、HTTPS、数据持久化、安全加固与运维建议。

说明:Dify 官方推荐使用 Docker Compose 部署。本文以 Docker Compose 方式为主,适合大多数中小型生产环境。若你有 Kubernetes、云原生、高可用集群需求,可在此基础上进一步扩展。


一、生产环境部署架构说明

一个较完整的 Dify 生产环境通常包含以下组件:

组件 作用
Dify API 后端 API 服务,处理业务逻辑
Dify Web 前端控制台页面
Worker 后台异步任务处理
PostgreSQL 主数据库,存储用户、应用、配置、日志等数据
Redis 缓存、队列、会话等
Vector Database 向量数据库,用于知识库检索
Nginx 反向代理、HTTPS、域名访问
文件存储 存储上传文件、知识库文档等

在生产环境中,建议至少满足以下要求:

  • 使用独立域名访问 Dify;
  • 开启 HTTPS;
  • 数据库、Redis、向量数据库必须持久化;
  • 配置强密码与安全的密钥;
  • 禁止直接暴露数据库、Redis 等内部服务端口;
  • 定期备份数据库和上传文件;
  • 对接企业可用的大模型 API 或本地模型服务;
  • 使用日志、监控和告警机制。

二、服务器环境准备

1. 推荐服务器配置

如果只是小团队使用或测试生产部署,可以使用如下配置:

CPU:4 核及以上
内存:8GB 及以上
磁盘:100GB SSD 及以上
系统:Ubuntu 22.04 LTS / Debian 12 / CentOS 7+

如果知识库规模较大、并发较高,建议:

CPU:8 核及以上
内存:16GB / 32GB 及以上
磁盘:SSD,建议 200GB+

如果使用本地大模型推理,则需要额外准备 GPU 服务器。Dify 本身不一定需要 GPU,GPU 通常用于模型推理服务,例如 Ollama、vLLM、Xinference、LMDeploy 等。


三、安装 Docker 与 Docker Compose

以下以 Ubuntu 为例。

1. 更新系统依赖

sudo apt update
sudo apt upgrade -y

2. 安装基础工具

sudo apt install -y ca-certificates curl gnupg lsb-release git vim ufw

3. 安装 Docker

curl -fsSL https://get.docker.com | bash

安装完成后查看版本:

docker --version

4. 安装 Docker Compose 插件

新版 Docker 通常已内置 Compose 插件:

docker compose version

如果可以正常输出版本号,说明安装成功。

5. 将当前用户加入 Docker 用户组

sudo usermod -aG docker $USER

然后重新登录服务器,或者执行:

newgrp docker

四、创建部署目录

建议将 Dify 部署在 /opt/dify 目录下:

sudo mkdir -p /opt/dify
sudo chown -R $USER:$USER /opt/dify
cd /opt/dify

如果使用官方仓库:

git clone https://github.com/langgenius/dify.git
cd dify/docker

不过在生产环境中,建议你维护自己的 docker-compose.yml.env 文件,便于版本控制和安全管理。


五、生产环境 Docker Compose 配置示例

下面给出一个简化但适合生产环境参考的 docker-compose.yml 示例。

注意:Dify 官方版本更新较快,不同版本服务名称、环境变量可能有所差异。实际部署时请以官方 docker/.env.exampledocker-compose.yaml 为准,再根据本文进行生产化调整。

docker-compose.yml

version: "3.9"

services:
  api:
    image: langgenius/dify-api:latest
    container_name: dify-api
    restart: always
    depends_on:
      - db
      - redis
      - weaviate
    env_file:
      - .env
    volumes:
      - ./volumes/app/storage:/app/api/storage
    networks:
      - dify

  worker:
    image: langgenius/dify-api:latest
    container_name: dify-worker
    restart: always
    depends_on:
      - db
      - redis
      - weaviate
    env_file:
      - .env
    command: >
      celery -A app.celery worker
      -P gevent
      -c 1
      --loglevel INFO
    volumes:
      - ./volumes/app/storage:/app/api/storage
    networks:
      - dify

  web:
    image: langgenius/dify-web:latest
    container_name: dify-web
    restart: always
    depends_on:
      - api
    env_file:
      - .env
    networks:
      - dify

  db:
    image: postgres:15-alpine
    container_name: dify-db
    restart: always
    environment:
      POSTGRES_USER: dify
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_DB: dify
      PGDATA: /var/lib/postgresql/data/pgdata
    volumes:
      - ./volumes/db/data:/var/lib/postgresql/data
    networks:
      - dify
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U dify"]
      interval: 10s
      timeout: 5s
      retries: 5

  redis:
    image: redis:7-alpine
    container_name: dify-redis
    restart: always
    command: redis-server --requirepass ${REDIS_PASSWORD}
    volumes:
      - ./volumes/redis/data:/data
    networks:
      - dify
    healthcheck:
      test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"]
      interval: 10s
      timeout: 5s
      retries: 5

  weaviate:
    image: semitechnologies/weaviate:1.19.0
    container_name: dify-weaviate
    restart: always
    environment:
      QUERY_DEFAULTS_LIMIT: 25
      AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: "false"
      AUTHENTICATION_APIKEY_ENABLED: "true"
      AUTHENTICATION_APIKEY_ALLOWED_KEYS: ${WEAVIATE_API_KEY}
      AUTHENTICATION_APIKEY_USERS: dify
      PERSISTENCE_DATA_PATH: /var/lib/weaviate
      DEFAULT_VECTORIZER_MODULE: none
      CLUSTER_HOSTNAME: node1
    volumes:
      - ./volumes/weaviate:/var/lib/weaviate
    networks:
      - dify

  nginx:
    image: nginx:1.25-alpine
    container_name: dify-nginx
    restart: always
    depends_on:
      - api
      - web
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./nginx/certbot/www:/var/www/certbot
      - ./nginx/certs:/etc/nginx/certs
    networks:
      - dify

networks:
  dify:
    driver: bridge

六、环境变量配置文件

创建 .env 文件:

vim .env

下面是一份生产环境参考配置。

.env

# -----------------------------------------------------------------------------
# Basic
# -----------------------------------------------------------------------------

CONSOLE_WEB_URL=https://dify.example.com
APP_WEB_URL=https://dify.example.com
SERVICE_API_URL=https://dify.example.com
FILES_URL=https://dify.example.com

APP_ENV=production
LOG_LEVEL=INFO
DEBUG=false

# 建议使用 openssl rand -base64 42 生成
SECRET_KEY=please-change-this-secret-key

# -----------------------------------------------------------------------------
# Database
# -----------------------------------------------------------------------------

DB_USERNAME=dify
DB_PASSWORD=please-change-db-password
DB_HOST=db
DB_PORT=5432
DB_DATABASE=dify

SQLALCHEMY_POOL_SIZE=30
SQLALCHEMY_POOL_RECYCLE=3600

# -----------------------------------------------------------------------------
# Redis
# -----------------------------------------------------------------------------

REDIS_HOST=redis
REDIS_PORT=6379
REDIS_USERNAME=
REDIS_PASSWORD=please-change-redis-password
REDIS_DB=0
CELERY_BROKER_URL=redis://:please-change-redis-password@redis:6379/1

# -----------------------------------------------------------------------------
# Vector Database
# -----------------------------------------------------------------------------

VECTOR_STORE=weaviate
WEAVIATE_ENDPOINT=http://weaviate:8080
WEAVIATE_API_KEY=please-change-weaviate-api-key

# -----------------------------------------------------------------------------
# Storage
# -----------------------------------------------------------------------------

STORAGE_TYPE=local
STORAGE_LOCAL_PATH=storage

# 如果使用 S3,可改为:
# STORAGE_TYPE=s3
# S3_ENDPOINT=https://s3.example.com
# S3_BUCKET_NAME=dify
# S3_ACCESS_KEY=your-access-key
# S3_SECRET_KEY=your-secret-key
# S3_REGION=ap-southeast-1

# -----------------------------------------------------------------------------
# Upload
# -----------------------------------------------------------------------------

UPLOAD_FILE_SIZE_LIMIT=50
UPLOAD_FILE_BATCH_LIMIT=5

# -----------------------------------------------------------------------------
# Mail
# -----------------------------------------------------------------------------

MAIL_TYPE=smtp
MAIL_SMTP_HOST=smtp.example.com
MAIL_SMTP_PORT=465
MAIL_SMTP_USERNAME=no-reply@example.com
MAIL_SMTP_PASSWORD=your-mail-password
MAIL_SMTP_USE_TLS=true
MAIL_SMTP_OPPORTUNISTIC_TLS=false
MAIL_FROM_EMAIL=no-reply@example.com

# -----------------------------------------------------------------------------
# Security
# -----------------------------------------------------------------------------

COOKIE_HTTPONLY=true
COOKIE_SECURE=true
COOKIE_SAMESITE=Lax

# -----------------------------------------------------------------------------
# Web
# -----------------------------------------------------------------------------

WEB_API_CORS_ALLOW_ORIGINS=https://dify.example.com
CONSOLE_CORS_ALLOW_ORIGINS=https://dify.example.com

生成安全密钥

建议不要使用示例中的密码,可以使用以下命令生成:

openssl rand -base64 42

分别生成:

  • SECRET_KEY
  • DB_PASSWORD
  • REDIS_PASSWORD
  • WEAVIATE_API_KEY

在生产环境中,密码应妥善保存,建议使用密码管理器或云厂商 Secret Manager。


七、Nginx 反向代理配置

创建 Nginx 配置目录:

mkdir -p nginx/conf.d nginx/certs nginx/certbot/www

1. HTTP 临时配置

首次申请 HTTPS 证书前,可以先配置 HTTP。

创建文件:

vim nginx/conf.d/dify.conf

写入:

server {
    listen 80;
    server_name dify.example.com;

    client_max_body_size 100M;

    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }

    location /console/api {
        proxy_pass http://api:5001;
        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;
    }

    location /api {
        proxy_pass http://api:5001;
        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;
    }

    location /v1 {
        proxy_pass http://api:5001;
        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;
    }

    location /files {
        proxy_pass http://api:5001;
        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;
    }

    location / {
        proxy_pass http://web:3000;
        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;
    }
}

请将 dify.example.com 替换为你的真实域名,并确保 DNS 已解析到服务器公网 IP。


八、启动 Dify 服务

/opt/dify 目录执行:

docker compose up -d

查看容器状态:

docker compose ps

查看日志:

docker compose logs -f api
docker compose logs -f worker
docker compose logs -f web

如果服务启动正常,可以访问:

http://dify.example.com

首次访问时,Dify 会引导你创建管理员账号。


九、配置 HTTPS 证书

生产环境必须使用 HTTPS,尤其是涉及登录、API Key、模型调用和知识库文件上传时。

这里使用 Certbot 申请 Let’s Encrypt 免费证书。

1. 安装 Certbot

可以直接在宿主机安装:

sudo apt install -y certbot

2. 申请证书

sudo certbot certonly \
  --webroot \
  -w /opt/dify/nginx/certbot/www \
  -d dify.example.com

证书默认生成在:

/etc/letsencrypt/live/dify.example.com/

为了让 Nginx 容器读取证书,可以复制到项目目录:

sudo mkdir -p /opt/dify/nginx/certs/dify.example.com

sudo cp /etc/letsencrypt/live/dify.example.com/fullchain.pem \
  /opt/dify/nginx/certs/dify.example.com/fullchain.pem

sudo cp /etc/letsencrypt/live/dify.example.com/privkey.pem \
  /opt/dify/nginx/certs/dify.example.com/privkey.pem

sudo chown -R $USER:$USER /opt/dify/nginx/certs

3. 修改 Nginx HTTPS 配置

nginx/conf.d/dify.conf 改为:

server {
    listen 80;
    server_name dify.example.com;

    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }

    location / {
        return 301 https://$host$request_uri;
    }
}

server {
    listen 443 ssl http2;
    server_name dify.example.com;

    ssl_certificate /etc/nginx/certs/dify.example.com/fullchain.pem;
    ssl_certificate_key /etc/nginx/certs/dify.example.com/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;

    client_max_body_size 100M;

    proxy_read_timeout 300s;
    proxy_connect_timeout 300s;
    proxy_send_timeout 300s;

    location /console/api {
        proxy_pass http://api:5001;
        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 https;
    }

    location /api {
        proxy_pass http://api:5001;
        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 https;
    }

    location /v1 {
        proxy_pass http://api:5001;
        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 https;
    }

    location /files {
        proxy_pass http://api:5001;
        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 https;
    }

    location / {
        proxy_pass http://web:3000;
        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 https;
    }
}

重启 Nginx:

docker compose restart nginx

然后访问:

https://dify.example.com

十、防火墙与安全加固

1. 配置 UFW 防火墙

只开放 SSH、HTTP、HTTPS:

sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status

如果 SSH 使用了非 22 端口,请替换为你的实际端口。

2. 不要暴露内部服务端口

PostgreSQL、Redis、Weaviate 不应该直接映射到宿主机公网端口。本文的 Compose 配置中,这些服务只在 Docker 内部网络可访问,安全性更好。

3. 修改默认密码

以下内容必须使用强随机值:

  • 数据库密码;
  • Redis 密码;
  • Weaviate API Key;
  • Dify SECRET_KEY
  • 邮箱 SMTP 密码;
  • 云存储 Access Key。

4. 后台管理员账号安全

建议:

  • 使用复杂密码;
  • 只给必要成员开通管理员权限;
  • 定期清理离职成员账号;
  • 开启企业内部统一身份认证时,优先使用 SSO;
  • 不要将管理员 Token 或 API Key 写入公开代码仓库。

十一、模型供应商配置建议

Dify 支持多种模型供应商,包括 OpenAI、Azure OpenAI、Anthropic、Google Gemini、DeepSeek、通义千问、智谱、火山方舟、Ollama、本地 OpenAI-Compatible 服务等。

生产环境中,建议根据业务需求选择模型:

1. 通用聊天和复杂推理

可选择:

  • GPT-4o / GPT-4.1;
  • Claude Sonnet;
  • Gemini Pro;
  • DeepSeek-R1 / DeepSeek-V3;
  • Qwen Max / Qwen Plus。

2. 知识库问答

重点关注:

  • Embedding 模型质量;
  • 向量维度;
  • 检索速度;
  • 上下文窗口长度;
  • 成本和限流策略。

常见 Embedding 模型包括:

  • OpenAI text-embedding-3-large
  • BAAI bge-large-zh
  • Qwen Embedding;
  • Cohere Embed;
  • Jina Embeddings。

3. 本地模型接入

如果企业对数据安全要求较高,可以通过 Ollama、vLLM 或 Xinference 部署本地模型,然后在 Dify 中通过 OpenAI-Compatible 接口接入。

例如本地模型服务地址:

http://model-server:8000/v1

在 Dify 控制台中配置:

Provider:OpenAI-API-compatible
API Base:http://model-server:8000/v1
API Key:自定义或模型服务要求的 Key

十二、数据持久化与备份方案

Dify 生产环境最重要的数据主要包括:

  1. PostgreSQL 数据;
  2. Redis 数据;
  3. 向量数据库数据;
  4. 上传文件和知识库文档;
  5. .env 配置文件;
  6. Nginx 证书与配置文件。

1. PostgreSQL 备份脚本

创建备份目录:

mkdir -p /opt/backup/dify/db

创建脚本:

vim /opt/backup/dify/backup-db.sh

写入:

#!/bin/bash

BACKUP_DIR="/opt/backup/dify/db"
DATE=$(date +"%Y%m%d_%H%M%S")
CONTAINER_NAME="dify-db"
DB_USER="dify"
DB_NAME="dify"

mkdir -p ${BACKUP_DIR}

docker exec ${CONTAINER_NAME} pg_dump -U ${DB_USER} ${DB_NAME} \
  > ${BACKUP_DIR}/dify_${DATE}.sql

find ${BACKUP_DIR} -type f -name "*.sql" -mtime +14 -delete

echo "Database backup completed: ${BACKUP_DIR}/dify_${DATE}.sql"

赋予执行权限:

chmod +x /opt/backup/dify/backup-db.sh

手动执行测试:

/opt/backup/dify/backup-db.sh

2. 配置定时任务

crontab -e

加入:

0 2 * * * /opt/backup/dify/backup-db.sh >> /opt/backup/dify/backup.log 2>&1

表示每天凌晨 2 点自动备份数据库。

3. 文件与向量库备份

可以定期打包 volumes 目录:

tar -czf /opt/backup/dify/volumes_$(date +"%Y%m%d_%H%M%S").tar.gz /opt/dify/volumes

如果数据较大,建议使用对象存储或专业备份工具,例如 Restic、Rclone、BorgBackup 等。


十三、升级 Dify

Dify 版本更新较频繁,升级前一定要备份数据。

1. 备份数据

/opt/backup/dify/backup-db.sh
tar -czf /opt/backup/dify/dify_before_upgrade_$(date +"%Y%m%d_%H%M%S").tar.gz /opt/dify

2. 拉取新镜像

docker compose pull

3. 重启服务

docker compose down
docker compose up -d

4. 查看日志

docker compose logs -f api
docker compose logs -f worker

如果升级后出现异常,可以先查看官方 Release Notes,确认是否有环境变量变更、数据库迁移要求或服务配置调整。


十四、常见问题排查

1. Web 页面能打开,但接口报错

检查 API 服务日志:

docker compose logs -f api

常见原因:

  • .env 中 URL 配置不正确;
  • Nginx 路由未正确转发 /api/console/api/v1
  • API 容器未正常启动;
  • 数据库连接失败。

2. 上传文件失败

检查:

  • client_max_body_size 是否过小;
  • .envUPLOAD_FILE_SIZE_LIMIT 是否过小;
  • volumes/app/storage 是否有写入权限;
  • API 容器日志是否报错。

3. 知识库无法索引

检查 Worker:

docker compose logs -f worker

常见原因:

  • Worker 未启动;
  • Redis 连接异常;
  • Embedding 模型配置错误;
  • 向量数据库连接失败;
  • 文档格式解析失败。

4. 登录后跳转异常

检查 .env 中以下配置:

CONSOLE_WEB_URL=https://dify.example.com
APP_WEB_URL=https://dify.example.com
SERVICE_API_URL=https://dify.example.com
FILES_URL=https://dify.example.com

这些地址应与实际访问域名一致,协议也应保持一致。如果使用 HTTPS,就不要写成 HTTP。

5. HTTPS 证书续期问题

Let’s Encrypt 证书有效期通常为 90 天。可以配置自动续期:

sudo certbot renew --dry-run

如果使用了复制证书到 /opt/dify/nginx/certs 的方式,续期后还需要同步证书并重启 Nginx。可以写一个脚本自动完成。


十五、生产环境优化建议

1. 使用固定镜像版本

生产环境不建议长期使用 latest,因为升级不可控。建议指定明确版本,例如:

image: langgenius/dify-api:0.x.x
image: langgenius/dify-web:0.x.x

这样可以避免容器重建时意外升级。

2. 数据库独立部署

如果业务规模变大,建议将 PostgreSQL 独立部署到云数据库,例如:

  • AWS RDS;
  • 阿里云 RDS;
  • 腾讯云 TDSQL-C;
  • 华为云 RDS;
  • 自建 PostgreSQL 高可用集群。

这样可以获得更好的备份、监控、性能和高可用能力。

3. Redis 独立部署

生产环境高并发场景下,Redis 也建议使用云 Redis 或独立 Redis 集群,避免和应用服务争抢资源。

4. 使用对象存储

如果知识库文件较多,不建议长期使用本地存储。可以改用 S3 兼容对象存储,例如:

  • AWS S3;
  • 阿里云 OSS;
  • 腾讯云 COS;
  • MinIO;
  • Cloudflare R2。

对象存储更适合生产环境的数据可靠性和扩展需求。

5. 日志监控

建议接入:

  • Prometheus + Grafana;
  • Loki;
  • ELK / OpenSearch;
  • 云厂商日志服务;
  • Uptime Kuma;
  • Sentry。

至少应监控以下指标:

  • CPU、内存、磁盘;
  • 容器运行状态;
  • PostgreSQL 连接数;
  • Redis 内存使用;
  • API 错误率;
  • Worker 任务积压;
  • Nginx 访问日志和错误日志。

十六、推荐目录结构

最终目录结构可以参考:

/opt/dify
├── docker-compose.yml
├── .env
├── nginx
│   ├── conf.d
│   │   └── dify.conf
│   ├── certs
│   │   └── dify.example.com
│   │       ├── fullchain.pem
│   │       └── privkey.pem
│   └── certbot
│       └── www
└── volumes
    ├── app
    │   └── storage
    ├── db
    │   └── data
    ├── redis
    │   └── data
    └── weaviate

该结构清晰地分离了:

  • 服务编排配置;
  • 环境变量;
  • Nginx 配置;
  • HTTPS 证书;
  • 应用数据;
  • 数据库数据;
  • 缓存数据;
  • 向量库数据。

十七、部署检查清单

上线前建议逐项检查:

  • [ ] 域名已正确解析到服务器;
  • [ ] HTTPS 可正常访问;
  • [ ] HTTP 自动跳转 HTTPS;
  • [ ] .env 中所有默认密码已修改;
  • [ ] SECRET_KEY 已使用随机值;
  • [ ] PostgreSQL、Redis、Weaviate 未暴露公网端口;
  • [ ] 防火墙仅开放必要端口;
  • [ ] 管理员账号已创建;
  • [ ] 模型供应商已配置;
  • [ ] Embedding 模型可正常使用;
  • [ ] 知识库上传和索引正常;
  • [ ] 应用 API 调用正常;
  • [ ] 数据库备份脚本可执行;
  • [ ] 已配置定时备份;
  • [ ] 已记录恢复流程;
  • [ ] 已制定升级策略。

十八、总结

Dify 的 Docker Compose 部署方式非常适合快速搭建生产环境,但真正稳定可用的生产部署并不只是“启动容器”这么简单。你还需要重点关注域名、HTTPS、安全配置、数据持久化、备份恢复、模型供应商、向量数据库、日志监控和升级策略。

对于小团队或内部项目,可以先使用本文提供的单机 Docker Compose 架构部署;当业务规模扩大后,再逐步将 PostgreSQL、Redis、对象存储和向量数据库拆分为独立服务,并引入监控告警与高可用架构。

如果你的目标是将 Dify 用作企业级 AI 应用平台,建议至少做到以下几点:

  1. 使用 HTTPS 和独立域名;
  2. 使用强随机密钥和密码;
  3. 配置自动备份;
  4. 不暴露内部数据库服务;
  5. 使用对象存储保存文件;
  6. 固定镜像版本并谨慎升级;
  7. 持续监控 API、Worker、数据库和向量库状态。

按照本文步骤完成后,你就可以得到一个相对规范、安全、可维护的 Dify 生产环境,为后续构建 AI 助手、知识库问答、工作流应用和企业智能体打下稳定基础。

目录结构
全文