在《deepseek本地部署和使用(Linux虚拟机)》中,我们使用Ollama部署了Deepseek-r1,但是只能通过命令行方式交互,默认Ollama启动后,会启动一个监听到127.0.0.1,用以接收POST 请求,服务器使用指定的 DeepSeek-R1 模型处理提示并返回生成的响应。
~]# ss -tlnp|grep ollam
LISTEN 0 4096 127.0.0.1:11434 0.0.0.0:* users:(("ollama",pid=441905,fd=3))
curl 发送请求
请求命令如下:
curl -X POST http://127.0.0.1:11434/api/generate \-H "Content-Type: application/json" \-d '{"model": "deepseek-r1:1.5b","prompt": "请比较一下5.4和5.12的大小。"}'
回显也是JSON格式,我猜测 Ollama 的 API 可能默认是以流式的方式返回数据,也就是每次生成一个词就发送一次响应。
集成WebUI
执行如下命令即可启动open webui(需要联网);在无法联网的场景下需要事先下载ghcr.io/open-webui/open-webui:main镜像,上传到服务器之后启动。
docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
该命令的参数释义如下:
1. docker run
-
含义:用于创建并启动一个新的 Docker 容器。
-
作用:这是 Docker 的核心命令之一,用于运行容器。
2. -d
-
含义:
-d
表示以 ** detached 模式** 运行容器,即在后台运行。 -
作用:容器会在后台运行,不会占用当前终端。
3. -p 3000:8080
-
含义:将容器内部的端口
8080
映射到宿主机的端口3000
。 -
作用:通过
localhost:3000
访问容器内部运行的服务(通常是 Web 服务)。 - 效果:
LISTEN 0 4096 0.0.0.0:3000 0.0.0.0:* users:(("docker-proxy",pid=347493,fd=4))
LISTEN 0 4096 [::]:3000 [::]:* users:(("docker-proxy",pid=347507,fd=4))
4. --add-host=host.docker.internal:host-gateway
-
含义:向容器的
/etc/hosts
文件中添加一个自定义的 hosts 记录。 -
作用:允许容器内的服务通过
host.docker.internal
访问宿主机的网络资源。-
host.docker.internal
是 Docker 提供的一个特殊域名,指向宿主机的网络接口。 -
host-gateway
是宿主机的网关地址。
-
- 效果:
172.17.0.1 host.docker.internal
5. -v open-webui:/app/backend/data
-
含义:将宿主机的
open-webui
目录挂载到容器内的/app/backend/data
目录。 -
作用:实现宿主机和容器之间的数据共享。容器内的数据可以持久化到宿主机的目录中。
- 效果:
- ~]# ll /var/lib/docker/volumes/open-webui
总用量 0
drwxr-xr-x 5 root root 67 2月 7 10:39 _data
6. --name open-webui
-
含义:为容器指定一个名称
open-webui
。 -
作用:可以通过这个名称方便地管理和操作容器,例如使用
docker stop open-webui
停止容器。
7. --restart always
-
含义:设置容器的重启策略为
always
。 -
作用:无论容器因为何种原因退出,Docker 都会自动重启该容器。
8. ghcr.io/open-webui/open-webui:main
-
含义:指定要运行的 Docker 镜像及其版本。
-
ghcr.io/open-webui/open-webui
是镜像的名称,存储在 GitHub Container Registry (GHCR) 中。 -
main
是镜像的标签,表示使用的是主分支的版本。
-
启动后状态验证
~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
50c57b182bf3 ghcr.io/open-webui/open-webui:main "bash start.sh" 20 hours ago Up 20 hours (healthy) 0.0.0.0:3000->8080/tcp, :::3000->8080/tcp open-webui
访问 OpenWebUI 界面(因服务器性能,可能相应比较慢)
打开浏览器,在地址栏输入 http://主机IP地址:3000/
并打开,进入 OpenWebUI 的聊天测试界面。首次进入需要注册账号。
选择并连接 Ollama 模型
在聊天界面的左上角选择当前在 Ollama 中运行的大语言模型。如果无选择内容,则可能是因为无法连接到 Ollama,可以进行以下修改:
~]# systemctl edit ollama
添加
[Service]
Environment="OLLAMA_HOST=0.0.0.0"重启 Ollama 服务:
systemctl daemon-reload
systemctl restart ollama重新刷新open webui的页面即可。
补充一点内容: 1、open webui请求Ollama服务的时候,会触发ollama运行对应的model,效果其实跟ollama run mode-name一样,在回答问题期间,通过ollama ps则可查看运行的model: ~]# ollama ps NAME ID SIZE PROCESSOR UNTIL deepseek-r1:1.5b a42b25d8c10a 1.6 GB 100% CPU 4 minutes from now deepseek-r1:7b 0a8c26691023 5.5 GB 100% CPU 4 minutes from now 2、问题回答完毕,对应的model不会立即终止运行,如果一直没有问题请求,则超时被杀,再次查看就空空如也了: ~]# ollama ps NAME ID SIZE PROCESSOR UNTIL