open-webui 聊天应用

导出镜像

# 安装一个底层工具
yum install skopeo -y
# 拉取指定平台amd64或arm64的镜像
skopeo copy --override-os linux --override-arch amd64 \
docker://ghcr.io/open-webui/open-webui:0.8.10 \
docker-archive:open-webui-0.8.10_amd64.tar:ghcr.io/open-webui/open-webui:0.8.10
# 二次压缩
gzip open-webui-0.8.10_amd64.tar
# 本地加载docker镜像
docker load -i open-webui-0.8.10_amd64.tar.gz

docker-compose.yml

  • 预备目录:mkdir -p /www/open-webui/data/open-webui
services:
  open-webui:
    image: ghcr.io/open-webui/open-webui:0.9.2
    container_name: open-webui
    # user: "1000:1000"                               # 以 UID 1000 运行,会有静态文件写入权限问题,owui需要root运行
    restart: unless-stopped
    networks:
      - ghost_net
    volumes:
      - ./data/open-webui:/app/backend/data         # 核心数据持久化
      - ./data/hf_cache:/root/.cache/huggingface    # 映射本地 Embedding 模型物理路径
      - /etc/localtime:/etc/localtime:ro            # 时区同步
    environment:
      # === 基础安全设置 ===
      - TZ=Asia/Shanghai                            # 容器时区
      - WEBUI_AUTH=True                             # 强制登录认证
      - WEBUI_SECRET_KEY=kaicong                    # Session 加密密钥
      - ANONYMOUS_TELEMETRY=False                   # 禁用匿名遥测
      - CHECK_UPDATE=False                          # 禁用检查更新
      - ENABLE_GRAVATAR=False                       # 禁用第三方头像加载
      # === 模型与 RAG 本地化 (核心修改区) ===
      - OFFLINE_MODE=True                           # 全局开启离线模式
      - HF_HUB_OFFLINE=1                            # 强制禁用 HuggingFace 在线连接
      - RAG_EMBEDDING_MODEL=/root/.cache/huggingface/bge-small-zh-v1.5 # 指定本地向量模型路径
      - RAG_TOP_K=5                                 # 检索片段数量
      - USE_OLLAMA_DOCKER=False                     # 不在容器内启动 Ollama
      - ENABLE_OLLAMA_API=False                     # 禁用内网 Ollama 自动探测(防止误连)
      # === 联网搜索设置 (基于 SearXNG) ===
      - ENABLE_RAG_WEB_SEARCH=True                  # 开启联网增强功能
      - RAG_WEB_SEARCH_ENGINE=searxng               # 使用 SearXNG 作为后端
      - SEARXNG_QUERY_URL=http://searxng:8080/search?q=<query> # 内网搜索接口
      - RAG_WEB_SEARCH_RESULT_COUNT=10              # 搜索抓取条数
      - RAG_WEB_SEARCH_CONCURRENT_REQUESTS=15       # 并发搜索请求数

networks:
  ghost_net:
    external: true  # 声明使用已存在的外部网络

语音和Rag小模型本地化

# 1. 安装工具: huggingface_hub 1.8.0(新版),CLI 已改名 hf
sudo dnf install python3-pip -y
pip3 install -U huggingface_hub

# 2. 设置国内镜像加速(Oracle 连海外通常快,但用镜像更稳)
# export HF_ENDPOINT=https://hf-mirror.com

# RAG 嵌入模型(bge-small-zh-v1.5)
hf download BAAI/bge-small-zh-v1.5 --local-dir /www/open-webui/data/hf_cache/bge-small-zh-v1.5

# OpenWebUI 优先加载 safetensors,你可以删除其他框架的权重文件
cd /www/open-webui/data/hf_cache/bge-small-zh-v1.5;rm pytorch_model.bin

# 4. 开启rag和语音
设置 - 文档 - 绕过绕过嵌入和检索 勾选,重建索引

语音输入小模型

# 语音识别模型(whisper-base)
      - HF_HUB_OFFLINE=0       # 临时打开
      - OFFLINE_MODE=False
通过界面操作,语音模型下载后,再关闭网络
      - HF_HUB_OFFLINE=1
      - OFFLINE_MODE=ture

失败~~~~~~~~放弃

conf.d/open-webui.conf

server {
    listen 80;
    server_name chat.atibm.com;

    # 强制跳转 HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name chat.atibm.com ;

    # ==================== SSL 证书配置 ====================
    ssl_certificate     /etc/letsencrypt/live/ghost.atibm.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/ghost.atibm.com/privkey.pem;

    # SSL 安全优化(标准配置)
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;

    # ==================== 日志 ====================
    access_log  /var/log/nginx/chat-access.log main;
    error_log   /var/log/nginx/chat-error.log;

    # 上传文件大小限制
    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";

        proxy_cache off;
        proxy_buffering off;
        proxy_read_timeout 300s;
    }
}

后续管理

  • 添加用户
  • 模型权限设为全员可用
  • 添加更多的openai,以及模型前缀便于识别不同来源
  • yml配置里 模型市场访问开关和仅限本地模型开关