近年来,AI 生成图像和视频的技术发展迅猛,开源生态越来越成熟。ComfyUI 凭借其节点化的工作流设计,成为许多创作者的首选工具。与此同时,Ollama 让本地运行大语言模型变得极其简单,Open WebUI 则提供了友好的聊天界面。
然而,将这些服务整合在一起并安全地暴露到公网,并不是一件容易的事。尤其是当你想在外网访问 ComfyUI 生成视频,又不想让 Open WebUI 这类涉及隐私的服务被随意扫描时,配置反向代理、端口映射和 SSH 隧道就成了必须掌握的技能。
本文基于作者在 Ubuntu 24.04 服务器上的实际操作,完整记录了:
使用 Docker Compose 部署 ComfyUI、Ollama 和 Open WebUI
配置 Nginx 反向代理,实现
/comfyui/、/ollama/路径统一访问Open WebUI 的安全访问方案(本地端口绑定 + SSH 隧道)
从 Hugging Face 下载开源的 Wan2.2 视频生成模型到正确的目录
16GB 显存下运行 5B 模型的优化参数建议
无论你是想把服务器改造成家庭 AI 创作中心,还是想在自己的云主机上搭建一套可远程访问的 AI 工具链,这篇文章都能为你提供一份完整的、可以直接上手的参考。
一、环境说明
本文基于 Ubuntu 24.04 系统,使用 Docker Compose 部署 ComfyUI、Ollama 和 Open WebUI,通过 Nginx 反向代理统一管理访问入口。
服务器配置文件
创建/Comfyui目录,新建 compose.yml 和 nginx.conf两个文件。
administrator@Newt:mkdir comfyui/
administrator@Newt:nano compose.yml
administrator@Newt:nano nginx.conf
administrator@Newt:~/comfyui$ ls
compose.yml nginx.conf
services:
nginx:
image: nginx:latest
container_name: nginx-proxy
restart: unless-stopped
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
depends_on:
- ollama
- open-webui
- comfyui
ollama:
image: ollama/ollama:latest
container_name: ollama
restart: unless-stopped
volumes:
- ollama_data:/root/.ollama
environment:
- OLLAMA_HOST=0.0.0.0
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
restart: unless-stopped
ports:
- "127.0.0.1:3000:8080"
volumes:
- webui_data:/app/backend/data
environment:
- OLLAMA_BASE_URL=http://ollama:11434
- WEBUI_SECRET_KEY=your-super-secret-key-change-this
- ENABLE_SIGNUP=true
depends_on:
- ollama
comfyui:
image: yanwk/comfyui-boot:cu128-slim
container_name: comfyui
restart: unless-stopped
ports:
- "8188:8188"
volumes:
- comfyui_storage:/root
- comfyui_models:/root/ComfyUI/models
- comfyui_output:/root/ComfyUI/output
- comfyui_input:/root/ComfyUI/input
environment:
- CLI_ARGS=--listen 0.0.0.0 --port 8188
- NVIDIA_VISIBLE_DEVICES=all
- CUDA_VISIBLE_DEVICES=0
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
volumes:
ollama_data:
external: true
name: ollama-data
webui_data:
external: true
name: open-webui-data
comfyui_storage:
name: comfyui_storage
comfyui_models:
name: comfyui_models
comfyui_output:
name: comfyui_output
comfyui_input:
name: comfyui_input
events {
worker_connections 1024;
}
http {
client_max_body_size 100M;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log warn;
include /etc/nginx/mime.types;
default_type application/octet-stream;
gzip on;
gzip_types text/css text/javascript application/javascript application/json;
server {
listen 80;
server_name _;
# ComfyUI 配置
location /comfyui/ {
proxy_pass http://comfyui:8188/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_buffering off;
}
# Ollama API 配置
location /ollama/ {
proxy_pass http://ollama:11434/;
proxy_set_header Host $host;
proxy_buffering off;
}
# 首页
location / {
return 200 '<!DOCTYPE html>
<html>
<head><title>AI Services Gateway</title>
<style>
body { font-family: Arial; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); }
.container { max-width: 800px; margin: 50px auto; background: white; border-radius: 20px; padding: 40px; }
.service { margin: 20px 0; padding: 20px; background: #f8f9fa; border-radius: 10px; }
.service a { font-size: 20px; color: #667eea; text-decoration: none; }
.status { color: green; }
</style>
</head>
<body>
<div class="container">
<h1>🚀 AI Services Gateway</h1>
<div class="service"><a href="/comfyui/">🎨 ComfyUI</a><div class="status">✅ AI 图像生成</div></div>
<div class="service"><a href="/ollama/">🤖 Ollama API</a><div class="status">✅ 大模型 API</div></div>
</div>
</body>
</html>';
add_header Content-Type text/html;
}
}
}
二、重要配置说明
Open WebUI 端口映射说明
Open WebUI 必须使用 127.0.0.1:3000:8080 而非 3000:8080,原因如下:
127.0.0.1:3000:8080:只绑定到本地回环地址,仅服务器本机和 SSH 隧道可访问3000:8080:绑定到所有网络接口,公网可直接访问
访问方式:
# SSH 隧道连接(在本地电脑执行)
ssh -L 3000:localhost:3000 administrator@38.xx.xx.xx
# 本地浏览器访问
http://localhost:3000
这样做既保证了 Open WebUI 的可用性,又避免将端口暴露到公网造成安全隐患。
服务访问地址汇总
| 服务 | 访问地址 | 说明 |
|---|---|---|
| ComfyUI | http://服务器IP/comfyui/ | 通过 Nginx 代理 |
| Ollama API | http://服务器IP/ollama/ | 通过 Nginx 代理 |
| Open WebUI | http://localhost:3000 | 需要 SSH 隧道 |
三、ComfyUI 模型下载
3.1 查看模型存储位置
ComfyUI 的模型存储在 Docker 卷中:
# 查看卷的实际路径
administrator@Newt:~/comfyui$ docker volume inspect comfyui_models
[
{
"CreatedAt": "2026-05-25T05:32:33Z",
"Driver": "local",
"Labels": {
"com.docker.compose.config-hash": "c3de70f920783d374da1310c211df4b73ed5cef1c564c0ab580bfae1d842ed2d",
"com.docker.compose.project": "comfyui",
"com.docker.compose.version": "5.1.3",
"com.docker.compose.volume": "comfyui_models"
},
"Mountpoint": "/var/lib/docker/volumes/comfyui_models/_data",
"Name": "comfyui_models",
"Options": null,
"Scope": "local"
}
]
#进入当前目录
root@Newt:cd /var/lib/docker/volumes/comfyui_models/_data
#查看当前目录
root@Newt:/var/lib/docker/volumes/comfyui_models/_data# ls
audio_encoders configs frame_interpolation model_patches unet
background_removal controlnet gligen optical_flow upscale_models
checkpoints diffusers hypernetworks photomaker vae
clip diffusion_models latent_upscale_models style_models vae_approx
clip_vision embeddings loras text_encoders
3.2 寻找开源模型:以 Wan2.2 为例
Wan2.2 是阿里巴巴开源的视频生成模型,在 Hugging Face 上发布。
访问 Hugging Face 模型页面:
官方仓库:
https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged国内镜像加速:
https://hf-mirror.com/Comfy-Org/Wan_2.2_ComfyUI_Repackaged
Wan2.2 模型版本选择:
| 版本 | 显存需求 | 适用场景 |
|---|---|---|
| 5B FP16 | 22-24GB | 高画质 |
| 5B FP8 | 12-14GB | 16GB 显卡推荐 |
| 14B 版本 | 24GB+ | 专业级 |
三个必备文件(缺一不可):
扩散模型(Diffusion Model)- 核心生成模型(约 9-10GB)
文本编码器(Text Encoder)- 理解提示词(约 6GB)
VAE(变分自编码器)- 图像压缩(约 1-2GB)
3.3 下载模型到对应目录
方法一:使用 wget 直接下载(推荐)
cd /var/lib/docker/volumes/comfyui_models/_data
# 使用国内镜像加速
export HF_ENDPOINT=https://hf-mirror.com
# 下载扩散模型(5B FP8 版本,适合 16GB 显存)
wget -O diffusion_models/wan2.2_ti2v_5B_fp8_scaled.safetensors \
https://hf-mirror.com/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/diffusion_models/wan2.2_ti2v_5B_fp8_scaled.safetensors
# 下载文本编码器
wget -O text_encoders/umt5_xxl_fp8_e4m3fn_scaled.safetensors \
https://hf-mirror.com/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/text_encoders/umt5_xxl_fp8_e4m3fn_scaled.safetensors
# 下载 VAE
wget -O vae/wan2.2_vae.safetensors \
https://hf-mirror.com/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/vae/wan2.2_vae.safetensors
# 查看文件大小
ls -lh /var/lib/docker/volumes/comfyui_models/_data/diffusion_models/
ls -lh /var/lib/docker/volumes/comfyui_models/_data/text_encoders/
ls -lh /var/lib/docker/volumes/comfyui_models/_data/vae/
# 重启 ComfyUI 使模型生效
docker restart comfyui
四、模型目录结构说明
下载完成后的完整目录结构:
/var/lib/docker/volumes/comfyui_models/_data/
├── diffusion_models/
│ └── wan2.2_ti2v_5B_fp8_scaled.safetensors (9.31G)
├── text_encoders/
│ └── umt5_xxl_fp8_e4m3fn_scaled.safetensors (6.27G)
├── vae/
│ └── wan2.2_vae.safetensors (1.31G)
├── checkpoints/ # Stable Diffusion 检查点
├── loras/ # LoRA 模型
├── controlnet/ # ControlNet 模型
├── upscale_models/ # 超分辨率模型
└── ... # 其他模型目录
五、常见问题
Q1:为什么要用 SSH 隧道访问 Open WebUI?
Open WebUI 作为对话界面,包含用户隐私数据。将其绑定到 127.0.0.1:3000 配合 SSH 隧道,可以:
防止公网扫描和攻击
数据通过加密传输
无需额外配置 HTTPS 证书
Q2:如何确认模型被 ComfyUI 识别?
访问
http://服务器IP/comfyui/在
Load Checkpoint或Load Diffusion Model节点中查找模型名称或者查看 ComfyUI 启动日志:
docker logs comfyui | grep -i "model"
六、总结
本文完成了以下配置:
Docker Compose 配置:Nginx 反向代理 + ComfyUI + Ollama + Open WebUI
Nginx 代理规则:统一通过
/comfyui/和/ollama/路径访问Open WebUI 安全配置:绑定到本地端口,通过 SSH 隧道访问
模型下载:从 Hugging Face 获取 Wan2.2 开源模型到正确目录
现在你可以:
访问
http://服务器IP/comfyui/使用 ComfyUI访问
http://服务器IP/ollama/调用 Ollama API通过 SSH 隧道访问
http://localhost:3000使用 Open WebUI