🐳 docker-compose 完整配置
yaml (docker-compose.yml)
version: '3.8'
services:
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
restart: unless-stopped
ports:
- "3000:8080"
environment:
- OLLAMA_BASE_URL=http://ollama:11434
- DATA_DIR=/app/backend/data
- ENABLE_SIGNUP=true
volumes:
- open-webui:/app/backend/data
depends_on:
- ollama
ollama:
image: ollama/ollama:latest
container_name: ollama
restart: unless-stopped
ports:
- "11434:11434"
volumes:
- ollama:/root/.ollama
# GPU 支持(可选)
# deploy:
# resources:
# reservations:
# devices:
# - driver: nvidia
# count: all
# capabilities: [gpu]
volumes:
open-webui:
ollama:
运行:docker-compose up -d
🎮 GPU 支持
NVIDIA GPU
yaml
services:
ollama:
image: ollama/ollama:latest
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
AMD GPU (ROCm)
yaml
services:
ollama:
image: ollama/ollama:rocm
devices:
- /dev/kfd
- /dev/dri
🌐 反向代理配置
Nginx 配置
nginx
server {
listen 80;
server_name your-domain.com;
client_max_body_size 100M;
location / {
proxy_pass http://open-webui: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;
# WebSocket 支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
🔄 自动更新
yaml
services:
watchtower:
image: containrrr/watchtower
container_name: watchtower
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_POLL_INTERVAL=86400 # 每天检查一次
command: open-webui
📊 资源限制
yaml
services:
open-webui:
deploy:
resources:
limits:
cpus: '2'
memory: 4G
reservations:
cpus: '0.5'
memory: 1G
💾 数据备份
bash
# 备份数据卷
docker run --rm -v open-webui:/data -v $(pwd):/backup \
alpine tar czf /backup/open-webui-backup.tar.gz /data
# 恢复数据
docker run --rm -v open-webui:/data -v $(pwd):/backup \
alpine tar xzf /backup/open-webui-backup.tar.gz -C /