自建 Open WebUI 并实现 GitLab SSO
OpenWebUI 是一个开源的 WebUI 项目,它提供了一个统一的界面来访问各种 AI 模型,其自建部署非常简单,拿 docker compose 基本上几下就好了。
services:
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
restart: unless-stopped
ports:
- "28880:8080"
environment:
- WEBUI_SECRET_KEY=xxxxxxxxx
- OAUTH_PROVIDER_NAME=${OAUTH_PROVIDER_NAME}
- OAUTH_CLIENT_ID=${OAUTH_CLIENT_ID}
- OAUTH_CLIENT_SECRET=${OAUTH_CLIENT_SECRET}
- OPENID_PROVIDER_URL=${OPENID_PROVIDER_URL}
- OAUTH_SCOPES=${OAUTH_SCOPES}
- ENABLE_OAUTH_ROLE_MANAGEMENT=true
- ENABLE_OAUTH_GROUP_MANAGEMENT=true
- ENABLE_OAUTH_SIGNUP=true
- ENABLE_SIGNUP=false
- ENABLE_LOGIN_FORM=true
- DEFAULT_USER_ROLE=user
- WEBUI_URL=${WEBUI_URL}
- OFFLINE_MODE=true
- ENABLE_OLLAMA_API=false
- ENABLE_OPENAI_API=false
volumes:
- ./data:/app/backend/data
注意这里我用的是商业API服务,机器上也没有配置高级网络途径,所以直接禁用了ENABLE_OLLAMA_API
和ENABLE_OPENAI_API
,为了避免这玩意儿在启动时坚持要下载几个自带的抱脸虫模型,设置了OFFLINE_MODE=true
。
.env
文件:
OAUTH_CLIENT_ID=12345678
OAUTH_CLIENT_SECRET=12345678
OPENID_PROVIDER_URL=https://12345678.12345678.com/.well-known/openid-configuration
WEBUI_URL=https://ai.12345678.com
OAUTH_PROVIDER_NAME=XXXX GitLab
OAUTH_SCOPES=openid email profile
但是,SSO方面,文档写的不是很详细,尤其是缺乏对于 Gitlab 的配置。折腾了半天,搞到了能用的状态,记录一下。
首先,去gitlab的应用管理页面,新建一个应用,应用作用域填openid profile email
,应用名称随意。这里出现了倒数第二大的一个坑:一定要把“私密”的勾去掉,因为 open-webui 不支持这个模式,细节不清楚,总之不清楚。
而最大的坑,其实也在这里:如果你第一次勾选了“私密”,那么单纯的“编辑”-保存是没有用的,必须重新生成一次 secret key;有人用删掉重新创建的方法也达到了目的。
别问我是怎么知道的。
gitlab
这边,回调地址写https://ai.12345678.com/oauth/oidc/callback
.
之后,还有一个问题:你直接按上面的 docker compose 去用的话,直接在 gitlab 那边登陆管理员号,第一次是可以登陆并且进入管理员面板的,但随后登出再回来,就发现自己变成普通用户了。尝试半天没有找到原因,到找到了并不复杂的变通方法:
在第一次启动的时候,把上面的ENABLE_SIGNUP
改成true
,这样就可以直接注册管理员账号了。管理员账号就这么用,永远都不使用 OIDC 登陆了,反正就你自己,又不是不能用……
之后再把ENABLE_SIGNUP
改成false
,提高安全性,其他普通用户就自己用 SSO 登陆就行。
总结来说,OpenWebUI 还是需要再发展一下。