前言
其实一直以来都在寻找一个类似于Cherry Studio网页版的程序,曾经试过ChatGPTNextWeb(现在应该是NextChat),感觉其实并不是特别好用,后面就没怎么关注,最近在朋友的推荐下发现了这个程序,于是给大家分享一下。
为什么选择它
在搭建之前其实尝试了Lobehub,NextChat和原本的OpenWebUI,但是都有各自的缺点,NextChat的UI有点过于AI卡片化了,不是特别好看,功能不是很多(但是在多年的更新下有了许多APP设备端),Lobehub则是要安装S3等程序过于多,原本的OpenWebUI则是连原版的Anthropic接口支持都没,控制面板还非常的杂乱。最后选择了HaloWebUI(当然朋友还推荐了一个功能较少的Librechat大家可以去试试)
如何搭建
首先当然是打开Gayhub仓库
现在最为容易的搭建方法莫过于Docker Compsoer,这里以宝塔面板作为示例来给大家
官方项目类的yaml代码是从源码编译的,但是仓库本身也有Actions自动release,为了方便我们推荐忽略从源代码构建的代码,and大部分都是个人用户所以我们不使用PgSQL作为数据库来搭建
services:
open-webui:
args:
INSTALL_PROFILE: ${INSTALL_PROFILE-core}
PRELOAD_LOCAL_MODELS: ${PRELOAD_LOCAL_MODELS-false}
ENABLE_PYODIDE: ${ENABLE_PYODIDE-false}
VITE_SOURCEMAP: ${VITE_SOURCEMAP-false}
HALO_RUNTIME_PROFILE: ${HALO_RUNTIME_PROFILE-main}
image: ghcr.io/ztx888/halowebui:${WEBUI_DOCKER_TAG-main}
container_name: open-webui
volumes:
- open-webui:/app/backend/data
ports:
- ${OPEN_WEBUI_PORT-8080}:8080
environment:
- 'WEBUI_SECRET_KEY=${WEBUI_SECRET_KEY}'
extra_hosts:
- host.docker.internal:host-gateway
restart: unless-stopped
volumes:
open-webui: {}给大家解释下这里面的几个较为有用参数ENABLE_PYODIDE:开启代码运行器(类似于豆包网页版代码右上角的运行)HALO_RUNTIME_PROFILE:有main和slim两个选项,如果不是特别在于部署体积推荐使用main来获取更好的mcp服务器体验${变量-变量}:前面是变量名字,后面是默认变量${WEBUI_SECRET_KEY}:为了防止key的泄露,我们推荐在.env中设置用于加固(推荐生成较长的随机字符)
其他保持默认基本上都可以了(端口可以换一下)
打开宝塔面板-Docker,选择容器编排-编排模板,点击添加类似于如下
补充下面.env内容=后面的字符即可
然后点击添加容器编排-使用模板,选择你创建的模板点击确定即可
启动
按照上面的部署来说大部分都能正常启动了,推荐使用反代来保障通信的安全,这里给出官方推荐的反代配置
location /_app/immutable/ {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
expires 1y;
add_header Cache-Control "public, max-age=31536000, immutable" always;
}
location /static/ {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
expires 1d;
add_header Cache-Control "public, max-age=86400" always;
}
location ~ ^/(assets|wasm)/ {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
expires 1d;
add_header Cache-Control "public, max-age=86400" always;
}
location /ws {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}如果后端服务器带宽较低,首屏加载可能会变慢。推荐把浏览器访问入口放在 Nginx 或 CDN 后面,让前端静态资源就近缓存,接口和实时聊天仍然转发到后端服务。
- 保持用户访问地址不变,不需要单独配置前端后端地址。
/api、/ws、/openai、/ollama、/gemini、/anthropic、/grok等路径继续反向代理到后端。/_app/immutable/是带版本指纹的前端构建文件,可以设置一年长缓存。/assets/、/wasm/、/static/可以设置较短缓存,例如一天;/cache/、上传文件、接口响应不建议套用长缓存。- 如果要把前端和后端放到不同域名,需要单独处理跨域、登录态、WebSocket、上传下载等链路,不建议只改一个后端 API 地址。
反代后打开网站即可,第一个注册的用户默认成为管理员,进入网站后点击左下角的头像,再点击设置即可进入管理页面。
点击接口配置来配置你的API接口,这里推荐OpenCode Go套餐,第一个月只要五刀,第二个月起10刀,大约可用60刀的API额度,有着大部分的国模可用,目前有下面这些:
GLM-5
GLM-5.1
Kimi K2.5
Kimi K2.6
MiMo-V2.5
MiMo-V2.5-Pro
MiniMax M2.5
MiniMax M2.7
MiniMax M3
Qwen3.6 Plus
Qwen3.7 Plus
Qwen3.7 Max
DeepSeek V4 Pro
DeepSeek V4 Flash通过博主的AFF注册并购买还可以获得5$的额外API使用额度哦
当然这家有点奇奇怪怪的小问题,比如Qwen和Minimax要走Anthropic的Message接口来调用(这也是选择HaloWebUI的理由之一),当然它也支持Responses API(非常有益于缓存输入),配置完点击获取模型添加即可。
当然要和你的朋友们一起共享的话记得到模型管理界面,全选所有模型切换成公共哦
结语
HaloWebUI作为OpenWebUI的变种本就在原有基础上优化了许多(虽然那个使用价格统计问题很大),不过功能还是非常丰富的,等待大家自己去发现咯