本教程目的在于记录一次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 负载均衡,请看另一篇文章。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐