适用于生产环境部署 open-webui 的 docker compose 配置
简介
open-webui 的默认 docker-compose.yaml 其实并不太适合正式一点的环境使用.主要存在以下几个问题:
- 数据库使用了默认的 sqlite,这个并不太适合,需要换成 postgresql.
- redis 也没用上,正式一点的环境还是得用上吧.
- open-webui pipelines 也没有,考虑到扩展性,还是可以先配置上的.
- 使用默认的 docker volume,个人不太喜欢,还是喜欢直接挂载当前项目的指定目录到容器内直接使用,更加方便迁移和备份.
详情
废话少说,完整的 docker-compose.yaml
参考如下:
name: open-webui
services:
open-webui:
image: ghcr.io/open-webui/open-webui:0.6.5
volumes:
- ./volumes/open-webui:/app/backend/data
ports:
- ${OPEN_WEBUI_PORT:-8080}:8080
environment:
# 禁用 Ollama API
ENABLE_OLLAMA_API: ${ENABLE_OLLAMA_API:-false}
# 启用 OpenAI API
ENABLE_OPENAI_API: ${ENABLE_OPENAI_API:-true}
OPENAI_API_BASE_URL: ${OPENAI_API_BASE_URL:-https://api.openai.com/v1}
OPENAI_API_KEY: "${OPENAI_API_KEY:-openwebui123456}"
# 使用 PostgreSQL 数据库
DATABASE_URL: ${DATABASE_URL:-postgresql://postgres:openwebui123456@db:5432/openwebui}
# 使用 Redis
REDIS_URL: ${REDIS_URL:-redis://redis:6379/0}
ENABLE_WEBSOCKET_SUPPORT: ${ENABLE_WEBSOCKET_SUPPORT:-true}
WEBSOCKET_MANAGER: ${WEBSOCKET_MANAGER:-redis}
WEBSOCKET_REDIS_URL: ${WEBSOCKET_REDIS_URL:-redis://redis:6379/0}
# 其他环境变量(根据需要启用或配置)
GLOBAL_LOG_LEVEL: ${GLOBAL_LOG_LEVEL:-INFO}
UVICORN_WORKERS: ${UVICORN_WORKERS:-1}
ENV: ${ENV:-prod}"
# ENABLE_SIGNUP: ${ENABLE_SIGNUP:-false}
# ENABLE_LOGIN_FORM: ${ENABLE_LOGIN_FORM:-false}
# ENABLE_ADMIN_CHAT_ACCESS: ${ENABLE_ADMIN_CHAT_ACCESS:-true}
# ENABLE_ADMIN_EXPORT: ${ENABLE_ADMIN_EXPORT:-true}
# ENABLE_RAG_WEB_SEARCH: ${ENABLE_RAG_WEB_SEARCH:-false}
# ENABLE_IMAGE_GENERATION: ${ENABLE_IMAGE_GENERATION:-false}
ENABLE_API_KEY: ${ENABLE_API_KEY:-true}
# RAG_EMBEDDING_ENGINE: ${RAG_EMBEDDING_ENGINE:-openai}
OFFLINE_MODE: ${OFFLINE_MODE:-false}
extra_hosts:
- host.docker.internal:host-gateway
restart: unless-stopped
depends_on:
- db
- redis
db:
image: postgres:15-alpine
restart: always
environment:
TZ: Asia/Shanghai
PGUSER: ${PGUSER:-postgres}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-openwebui123456}
POSTGRES_DB: ${POSTGRES_DB:-openwebui}
PGDATA: ${PGDATA:-/var/lib/postgresql/data/pgdata}
command: >
postgres -c 'max_connections=${POSTGRES_MAX_CONNECTIONS:-100}'
-c 'shared_buffers=${POSTGRES_SHARED_BUFFERS:-128MB}'
-c 'work_mem=${POSTGRES_WORK_MEM:-4MB}'
-c 'maintenance_work_mem=${POSTGRES_MAINTENANCE_WORK_MEM:-64MB}'
-c 'effective_cache_size=${POSTGRES_EFFECTIVE_CACHE_SIZE:-4096MB}'
volumes:
- ./volumes/db/data:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready"]
interval: 1s
timeout: 3s
retries: 30
redis:
image: valkey/valkey:8-alpine
restart: always
volumes:
- ./volumes/redis/data:/data
environment:
REDISCLI_AUTH: ${REDIS_PASSWORD:-openwebui123456}
entrypoint:
["valkey-server", "--requirepass", "${REDIS_PASSWORD:-openwebui123456}"]
healthcheck:
test: ["CMD", "valkey-cli", "ping"]
start_period: 5s
interval: 1s
timeout: 3s
retries: 5
pipelines:
image: ghcr.io/open-webui/pipelines:main
volumes:
- ./volumes/pipelines:/app/pipelines
- ./volumes/data:/data
restart: always
environment:
PIPELINES_API_KEY: ${PIPELINES_API_KEY:-openwebui123456}
在这个配置中:
- 我们指定了 open-webui 需要使用的版本为 0.6.5,而不是直接写一个
main
,不是每次都从本地构建. - 增加了 redis,这里使用 valkey.
- 增加了数据库配置,这里使用的是 postgresql.
- 这里没有使用 ollama,一般我们都直接使用一个兼容 openai 的服务来提供.
- 增加了 open-webui pipelines 服务,如果不需要也可以不用,具体用法见官方文档.根据 open-webui pipelines,他没有版本号,对应的 docker 镜像也没有.
此外,我们还可以自己写一个 .env
文件来设置默认的环境变量,根据 docker-compose.yaml
文件的内容,你应该可以容易写出,这里不做赘述.还有其他的环境变量可以设置的,详情见 open-webui 的文档.