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.1
和proxy_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
如果一切正常就可以访问了
Comments 1 条评论
biubiu