AI 应用部署 单机极简版 Dify + Ollama 运维部署指南 (Docker Compose):16GB 内存笔记本实战优化方案
单机极简版 Dify + Ollama 运维部署指南 (Docker Compose)
本指南专为 16GB 内存笔记本 / 单机实战环境 打造,对原版 Dify 开源架构进行了彻底精简与资源压榨,移除了企业级高并发组件(如 SSRF Proxy、Plugin Daemon、Sandbox、Elasticsearch/Vector 服务等),并使用轻量级 pgvector 结合单机 PostgreSQL 替代过重的专门向量数据库。
一、 架构拆解与资源裁减策略
|
组件分类 |
保留 / 替换方案 |
内存限制 (Limit) |
裁减说明与优化目的 |
|---|---|---|---|
|
模型推理引擎 |
Ollama |
CPU / 动态(4G-6G) |
单机 CPU/GPU 推理引擎,支持量化模型(如 qwen2.5:7b-instruct-q4_K_M)。 |
|
关系与向量数据库 |
PostgreSQL + pgvector |
1GB |
合并关系库与向量库,替代单独部署 Milvus / Weaviate,节约 2G+ 内存。 |
|
缓存与队列 |
Redis (Alpine) |
256MB |
提供会话缓存与 Celery 异步任务 Broker。 |
|
API 与 Web 服务 |
Dify API & Web (合并/精简) |
1.5GB (API) + 256MB (Web) |
Dify 核心业务逻辑与前端界面,限制 Gunicorn worker 数量以减少内存开销。 |
|
异步任务处理器 |
Dify Worker |
1GB |
处理知识库文档分块、向量化索引构建等异步耗时任务。 |
|
反向代理与网关 |
Nginx (Alpine) |
128MB |
路由前端静态资源与后端 API 接口,配置流式代理 (SSE)。 |
资源优化总效果: 整体后台基础服务静态内存开销限制在 4GB ~ 4.5GB 左右,为 Ollama 加载 7B 量化模型留出足够(8GB+)的内存空间,彻底防止 OOM Panic。
二、 完整 `docker-compose.yml` 配置文件
创建本地工作目录,并保存以下内容为 docker-compose.yml:
version: '3.8'
x-logging-config: &default-logging
driver: "json-file"
options:
max-size: "20m"
max-file: "3"
networks:
dify-network:
driver: bridge
volumes:
geand_db_data:
redis_data:
dify_storage:
ollama_data:
services:
# ---------------------------------------------------------------------------
# 1. Ollama 本地推理服务
# ---------------------------------------------------------------------------
ollama:
image: ollama/ollama:latest
container_name: dify-ollama
restart: unless-stopped
ports:
- "11434:11434"
volumes:
- ollama_data:/root/.ollama
networks:
- dify-network
environment:
- OLLAMA_KEEP_ALIVE=24h
- OLLAMA_NUM_PARALLEL=2
deploy:
resources:
limits:
memory: 8192M
reservations:
memory: 2048M
logging: *default-logging
# ---------------------------------------------------------------------------
# 2. PostgreSQL 15 + pgvector (合并关系型与向量存储)
# ---------------------------------------------------------------------------
db:
image: pgvector/pgvector:pg15
container_name: dify-db
restart: unless-stopped
environment:
POSTGRES_USER: ${PG_USER:-postgres}
POSTGRES_PASSWORD: ${PG_PASSWORD:-dify_secure_pass_2026}
POSTGRES_DB: ${PG_DB:-dify}
PGDATA: /var/lib/postgresql/data/pgdata
volumes:
- geand_db_data:/var/lib/postgresql/data
networks:
- dify-network
deploy:
resources:
limits:
memory: 1024M
reservations:
memory: 256M
logging: *default-logging
# ---------------------------------------------------------------------------
# 3. Redis (缓存与 Task Queue Broker)
# ---------------------------------------------------------------------------
redis:
image: redis:7-alpine
container_name: dify-redis
restart: unless-stopped
command: redis-server --save 60 1 --loglevel notice --requirepass ${REDIS_PASSWORD:-dify_redis_pass_2026}
volumes:
- redis_data:/data
networks:
- dify-network
deploy:
resources:
limits:
memory: 256M
logging: *default-logging
# ---------------------------------------------------------------------------
# 4. Dify API (后端核心服务)
# ---------------------------------------------------------------------------
api:
image: langgenius/dify-api:0.15.3
container_name: dify-api
restart: unless-stopped
environment:
# 模式与基础配置
MODE: api
LOG_LEVEL: INFO
SECRET_KEY: ${SECRET_KEY:-sk-dify-single-node-key-2026-secret}
# 数据库连接 (pgvector)
DB_USERNAME: ${PG_USER:-postgres}
DB_PASSWORD: ${PG_PASSWORD:-dify_secure_pass_2026}
DB_HOST: db
DB_PORT: 5432
DB_DATABASE: ${PG_DB:-dify}
# 向量数据库驱动(指定 pgvector 替代外部数据库)
VECTOR_STORE: pgvector
PGVECTOR_HOST: db
PGVECTOR_PORT: 5432
PGVECTOR_USER: ${PG_USER:-postgres}
PGVECTOR_PASSWORD: ${PG_PASSWORD:-dify_secure_pass_2026}
PGVECTOR_DB: ${PG_DB:-dify}
# Redis 连接
REDIS_HOST: redis
REDIS_PORT: 6379
REDIS_PASSWORD: ${REDIS_PASSWORD:-dify_redis_pass_2026}
REDIS_USE_SSL: 'false'
# Celery 异步队列配置
CELERY_BROKER_URL: redis://:${REDIS_PASSWORD:-dify_redis_pass_2026}@redis:6379/1
# 存储配置(本地文件存储)
STORAGE_TYPE: local
STORAGE_LOCAL_PATH: /app/api/storage
# 单机性能调优参数
SERVER_WORKER_AMOUNT: 2
SQLALCHEMY_POOL_SIZE: 10
SQLALCHEMY_MAX_OVERFLOW: 5
volumes:
- dify_storage:/app/api/storage
depends_on:
- db
- redis
networks:
- dify-network
deploy:
resources:
limits:
memory: 1536M
logging: *default-logging
# ---------------------------------------------------------------------------
# 5. Dify Worker (异步任务处理组件)
# ---------------------------------------------------------------------------
worker:
image: langgenius/dify-api:0.15.3
container_name: dify-worker
restart: unless-stopped
environment:
MODE: worker
LOG_LEVEL: INFO
SECRET_KEY: ${SECRET_KEY:-sk-dify-single-node-key-2026-secret}
DB_USERNAME: ${PG_USER:-postgres}
DB_PASSWORD: ${PG_PASSWORD:-dify_secure_pass_2026}
DB_HOST: db
DB_PORT: 5432
DB_DATABASE: ${PG_DB:-dify}
VECTOR_STORE: pgvector
PGVECTOR_HOST: db
PGVECTOR_PORT: 5432
PGVECTOR_USER: ${PG_USER:-postgres}
PGVECTOR_PASSWORD: ${PG_PASSWORD:-dify_secure_pass_2026}
PGVECTOR_DB: ${PG_DB:-dify}
REDIS_HOST: redis
REDIS_PORT: 6379
REDIS_PASSWORD: ${REDIS_PASSWORD:-dify_redis_pass_2026}
REDIS_USE_SSL: 'false'
CELERY_BROKER_URL: redis://:${REDIS_PASSWORD:-dify_redis_pass_2026}@redis:6379/1
STORAGE_TYPE: local
STORAGE_LOCAL_PATH: /app/api/storage
# 降低后台 Worker 并发数以节约 CPU/内存
CELERY_WORKER_CONCURRENCY: 2
volumes:
- dify_storage:/app/api/storage
depends_on:
- db
- redis
networks:
- dify-network
deploy:
resources:
limits:
memory: 1024M
logging: *default-logging
# ---------------------------------------------------------------------------
# 6. Dify Web (前端界面)
# ---------------------------------------------------------------------------
web:
image: langgenius/dify-web:0.15.3
container_name: dify-web
restart: unless-stopped
environment:
CONSOLE_API_URL: ''
APP_API_URL: ''
networks:
- dify-network
deploy:
resources:
limits:
memory: 256M
logging: *default-logging
# ---------------------------------------------------------------------------
# 7. Nginx (统一接入层与流式代理)
# ---------------------------------------------------------------------------
nginx:
image: nginx:1.25-alpine
container_name: dify-nginx
restart: unless-stopped
ports:
- "80:80"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
depends_on:
- web
- api
networks:
- dify-network
deploy:
resources:
limits:
memory: 128M
logging: *default-logging
三、 配套 Nginx 配置文件 (`./nginx/nginx.conf`)
在同级目录下创建 nginx 文件夹,并写入 nginx.conf 文件:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
client_max_body_size 50M;
# 前端 UI
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 后端 API 与控制台
location ~ ^/(console/api|api|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;
# 核心参数:关闭响应缓冲,确保流式输出 (SSE) 实时打字效果
proxy_buffering off;
proxy_cache off;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
# Chunked encoding 支持
chunked_transfer_encoding on;
}
}
}
四、 环境变量与配置调优说明
|
环境变量 / 参数 |
推荐设定值 |
关键功能与优化原理 |
|---|---|---|
|
VECTOR_STORE |
pgvector |
告诉 Dify 直接使用 PostgreSQL 作为向量数据库,取消对 External Vector DB (Milvus/Weaviate) 的依赖。 |
|
SERVER_WORKER_AMOUNT |
2 |
控制 API 服务的 Gunicorn 进程数。默认高并发配置会开 4-8 个 worker,在笔记本环境下 2 个 worker 足够且节省内存。 |
|
CELERY_WORKER_CONCURRENCY |
2 |
控制后台并发处理解析文档的进程数,避免上传文档时 CPU 瞬间被挤爆导致其它服务卡死。 |
|
OLLAMA_KEEP_ALIVE |
24h |
维持 Ollama 显存/内存中模型的常驻时间,避免频繁卸载和重新加载模型带来的耗时卡顿。 |
|
OLLAMA_NUM_PARALLEL |
2 |
限制 Ollama 允许同时并发处理的模型推理请求数,适应笔记本 CPU 核心数限制。 |
|
proxy_buffering off; |
Nginx 配置 |
禁用 HTTP Proxy 缓存。若开启,大模型生成的 SSE 流文本会被 Nginx 拦截积攒,导致前端体验异常。 |
五、 快速部署与 Ollama 联调步骤
-
拉起全栈容器服务:
docker-compose up -d -
在 Ollama 中下载适合单机运行的轻量级大模型与 Embedding 模型:
# 进入 ollama 容器下载 Qwen2.5 语言模型 (7B 4bit 量化,约 4.7GB)
docker exec -it dify-ollama ollama pull qwen2.5:7b-instruct-q4_K_M
# 下载轻量级文本向量 Embedding 模型 (约 274MB)
docker exec -it dify-ollama ollama pull bge-large-zh-v1.5 -
访问 Dify Web 界面并初始化管理员账号:
浏览器打开 http://localhost/,按提示设置管理员账号密码。 -
配置 Dify 与 Ollama 集成:
-
登录后,点击右上角个人头像 -> 设置 -> 模型供应商 -> Ollama。
-
添加 LLM 模型:
-
模型类型:LLM
-
模型名称:qwen2.5:7b-instruct-q4_K_M
-
基础 URL (Base URL):http://ollama:11434 (注意:使用容器内部域名 ollama)
-
添加 Text Embedding 模型:
-
模型类型:Text Embedding
-
模型名称:bge-large-zh-v1.5
-
基础 URL (Base URL):http://ollama:11434
更多推荐




所有评论(0)