Openwebui 使用docker安装,并使用nginx反代

domo 发布于 2025-01-19 1411 次阅读


docker 本篇多次使用/调试指令记录

docker restart nginx #重启指定容器
docker ps #列出运行中的容器
docker ps -a #列出所有容器(包含未运行)
docker-compose down #关闭镜像
docker-compose up -d #运行拉取镜像
docker logs nginx #打印日志
docker network connect #容器名 open-webui #将该容器添加至指定网络
docker inspect nginx | grep -i "Network"  #查看指定容器在哪个docker网络上(nginx为例)
docker exec -it container_name /bin/bash #进入指定容器内
exit  #在容器内退出
docker nginx -t   #在容器内检查nginx语法是否错误



知识点

  • 如果在不同的文件夹运行docker-compose文件,会分配不同的docker网络,后面可以更改,配置nginx的时候可能会遇到这个问题

创建docker-compose.yml

openwebui的源码:github

openwebui的官方文档:doc

version: '3.8'

services:
  open-webui:
    image: ghcr.io/open-webui/open-webui:main      
    container_name: open-webui
    environment:
      - OPENAI_API_KEY= openai的api key
    ports:
      - "3000:8080"
    volumes:
      - open-webui:/app/backend/data
    restart: always

volumes:
  open-webui:

dockercompos配置文件的解释

version: '3.8'  
  # 定义 Compose 文件的版本,这里使用的是 3.8 版本。
services: 
   # 这里定义了你容器中的服务。每一个服务都会启动一个容器。
  open-webui:  
     # 服务的名称,这里定义的是 `open-webui` 服务。
    image: ghcr.io/open-webui/open-webui:main  
      # 使用的镜像名称。此镜像位于 GitHub Container Registry,标签是 `main`。
    container_name: open-webui  
         # 容器的名称,这里指定了容器的名称为 `open-webui`。
    
    environment:  
         # 这里是环境变量配置,传递给容器内部。
      - OPENAI_API_KEY= openai的api key  # 设置 `OPENAI_API_KEY` 环境变量,用于容器内的应用程序访问 OpenAI API。需要将 `openai的api key` 替换为实际的 OpenAI API 密钥。

    ports:  # 定义主机端口和容器端口的映射。
      - "3000:8080"  # 这表示将宿主机的 3000 端口映射到容器内的 8080 端口。即访问宿主机的 `http://localhost:3000` 时,流量将转发到容器内的 8080 端口。

    volumes:  # 定义持久化数据的卷。这里是将宿主机的卷 `open-webui` 挂载到容器内的 `/app/backend/data` 目录。
      - open-webui:/app/backend/data  
# 持久化数据存储卷,`open-webui` 是卷的名称。数据将存储在宿主机的 Docker 卷中,容器重新启动时数据会保留。

    restart: always  
# 设置容器的重启策略。当容器停止时,Docker 会自动重新启动它。`always` 表示只要容器停止,它都会自动重启。

volumes:  
# 这里定义了持久化存储的卷。
  open-webui:  
# 定义一个卷 `open-webui`,这是一个 Docker 卷,在宿主机和容器之间共享数据。这个卷会用于存储容器 `/app/backend/data` 中的数据。

配置完成后运行拉取镜像

docker-compose up -d

#小知识,如果文件夹下有多个compose文件或者命名不同,可以指定运行
docker-compose -f docker-compose-openwebui.yml up -d

现在你就可以通过http://你的ip+端口访问openwebui了


配置nginx反代,使用域名访问

  • 将自己解析过的域名填入
  • 证书那块,可以自申请,也可以用cf的15年证书,我用的cf的,所以直接将证书保存在目录然后在nginx中配置映射容器内就好了
  • WebSocket support这段是后来跟GPT沟通后加的,因为出现了,可以访问网页,但是跟ai沟通,ai没有网络的情况,如果没出现这个情况可以删掉
  • 记得更改location 中的容器名和端口号
# HTTPS server for 你的域名   #填入你的域名
server {
    listen 443 ssl;
    server_name 你的域名;#填入你的域名

    # SSL 配置
    ssl_certificate /etc/nginx/certs/cert.pem;    #证书
    ssl_certificate_key /etc/nginx/certs/key.pem; #证书密钥

    # WebSocket support
    location /ws/ {
        proxy_pass http://open-webui:8080/ws/;  # 根据实际 WebSocket 服务路径调整
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        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;
    }

    # 其他 SSL 配置(例如 TLS 强化配置)
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';

    # 默认 location 配置
    location / {
        proxy_pass http://open-webui:8080; #填入你的openwebui的容器名+端口号
        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;
    }
}

nginx配置文件解读
1. 设置 HTTPS 服务
  • 监听 HTTPS 端口listen 443 ssl; 表示监听 443 端口,用于处理 HTTPS 请求。
  • 指定域名server_name 你的域名; 确定只响应该域名的请求。
  • 配置证书
    • ssl_certificate 指定 SSL 证书路径。
    • ssl_certificate_key 指定证书密钥路径。
  • 启用安全协议
    • 限制 SSL/TLS 协议为 TLS 1.2 和 TLS 1.3。
    • 设置安全加密套件,通过 ssl_ciphers 提高传输安全性。

2. 反向代理到 Open-WebUI

  • 默认路径 /
    • 请求被转发到 http://open-webui:8080,其中 open-webui 是 Open-WebUI 的容器名称,8080 是应用的监听端口。
    • 使用 proxy_set_header 设置常见的 HTTP 请求头(如主机、真实 IP、协议等),确保后端应用可以识别用户的请求信息。

3. 支持 WebSocket 连接

  • 路径 /ws/
    • 为 WebSocket 请求(通常用于实时通信)启用反向代理
    • proxy_http_version 1.1proxy_set_header Upgrade 确保 WebSocket 协议的正确升级。
    • proxy_pass http://open-webui:8080/ws/ 将 WebSocket 请求转发给 Open-WebUI。

4. 增强 HTTPS 安全性

  • 强制使用现代且安全的 TLS 协议版本(TLS 1.2 和 1.3)。
  • 使用强加密套件,防止弱加密算法的攻击。

整体作用

  • 接受客户端对 你的域名 的 HTTPS 请求。
  • 根据请求路径将普通 HTTP 请求或 WebSocket 请求转发到 Open-WebUI 容器。
  • 提供安全的 HTTPS 传输通道,并加强加密和通信安全性。
  • 这种配置特别适用于需要安全访问和实时通信的应用(如聊天工具)。



保存重启nginx

docker restart nginx

如果一切正常就可以访问了

此作者没有提供个人介绍
最后更新于 2025-01-19