记录一次异构部署ollama+weubui+docker
·
本教程目的在于记录一次Ollama + webUi的部署,和其他教程不同的是,本次部署是前后端分离部署,即ollama后端在 B服务器上,WebUi 前端在A服务器上。这样部署的主要原因是环境受限以及安全考虑
环境:
服务器A(具有public IP),服务器B(有4张4090显卡)
部署思路:
两台服务器均采用docker进行容器化管理,并使用docker-compose方便端口网络调用。
将ollama后端部署于服务器B(服务器B没有公网IP,但是有强大的算力资源),将webUi前端不熟于服务器A(服务器A有公网IP,但是没有算力资源)
- 在服务器B上配置ollama-docker并暴露11434端口(ollama的服务端口)
- 通过autossh 将B的11434端口转发指向 A的11434端口(记得在云服务器中开放端口规则)
- 在服务器A上部署 openweb-Ui-docker,设置为host网络模式,可以直接访问 11434端口
- 配置完成,使用服务器A的 openweb-Ui即可享受ollama的模型服务
在服务器B上配置ollama-docker并暴露11434端口(ollama的服务端口)
CPU模式
docker run -d -v /opt/ai/ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
GPU模式(需要有NVIDIA显卡支持)
安装英伟达容器工具包(以Ubuntu22.04为例,其他系统请参考:英伟达官方文档)
# 1.配置apt源
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
# 2.更新源
sudo apt-get update
# 3.安装工具包
sudo apt-get install -y nvidia-container-toolkit
docker使用GPU运行ollama
docker run --gpus all -d -v /opt/ai/ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
通过autossh 将B的11434端口转发指向 A的11434端口(记得在云服务器中开放端口规则)
首先在服务器B中保存服务器A的公钥,确保能直接ssh到服务器A,并且将配置写入config文件中
$ vim ~/.ssh/config
# config 配置
Host [YOUR_HOST_NAME]
HostName [HOST_IP]
Port 22
User root
ServerAliveInterval 60
ServerAliveCountMax 3
IdentityFile [YOUR_SERVICE_PUBLIC_KEY]
配置自动转发规则
$ vim ~/ollama_autossh.sh
#!/bin/bash
if ! pgrep -f "autossh.*-R 0.0.0.0:11434:localhost:11434" > /dev/null; then
echo "Starting ollama Port Forwarding..."
nohup autossh -M 0 -N -R 0.0.0.0:11434:localhost:11434 [YOUR_HOST_NAME] > ~/ollama.log 2>&1 &
echo "ollama Port Forwarding started."
else
echo "ollama Port Forwarding is already running."
fi
~
# 写入 ~/.bashrc, 每次登录自启动转发
$ bash ~/ollama_autossh.sh
在服务器A上部署 openweb-Ui-docker,设置为host网络模式,可以直接访问 11434端口
(PS. 这里我踩了很多坑,首先要确保转发服务是成功的,使用 telnet localhost 11434 测试服务器A端口是否有启动服务监听,然后要确保前端docker的网络状况是正确的,可以直接使用docker-compose,方便配置)
# docker-compose
version: '3'
services:
webui:
image: ghcr.io/ollama-webui/ollama-webui:main
ports:
- "3003:8080"
extra_hosts:
- "host.docker.internal:host-gateway"
environment:
- OLLAMA_HOST=host.docker.internal
- OLLAMA_PORT=11434
restart: always
然后运行compose
docker-compose -f ollama-webui.yml up -d
检查容器状态,确认服务正确运行
docker-compose -f ollama-webui.yml ps
使用webUi
登录转发端口, 【PUBLIC_IP:3003】(我这里转发的是3003),直接注册即可使用。
成功使用本地模型
至此,通过端口转发的前后端分离 ollama + webUi配置完成,您可以利用public IP访问webui享受ollama的本地推理服务。关于如何配置https, ngix 负载均衡,请看另一篇文章。
更多推荐
已为社区贡献1条内容
所有评论(0)