在拥有 NVIDIA GPU 的 VPS 上部署私有的 AI 大模型服务,正成为越来越多开发者和技术团队的选择。这不仅能完全掌控数据,还能避免 API 调用的长期成本。然而,在相对较新的 Ubuntu 24.04 系统上,让 Docker 容器完美调用 GPU 算力,并顺畅运行 Ollama 这样的工具,存在不少“隐形”的坑。
本指南基于我在 Pro 2000 GPU VPS (Ubuntu 24.04) 上的亲身实践,详细记录了每一步操作和踩坑经历。我们将从零开始,配置 Docker 环境,安装 NVIDIA Container Toolkit 以实现 GPU 加速,最终成功部署 Ollama 服务,并通过 Open WebUI 获得一个类似 ChatGPT 的网页对话界面。通过本教程,您将拥有一个完全私有、免费且高效的本地 AI 助手。
1. 环境准备
-
VPS 型号:Pro 2000
-
GPU:NVIDIA Blackwell 架构(16GB 显存)
-
CPU:多核处理器
-
内存:16GB
-
操作系统:Ubuntu 24.04 (Noble Numbat)
-
用户:administrator
2. 安装 Docker
1. 更新系统并安装依赖
sudo apt update
sudo apt install -y ca-certificates curl
2. 添加 Docker 官方 GPG 密钥(使用阿里云镜像)
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
3. 添加 Docker 软件源
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] http://mirrors.aliyun.com/docker-ce/linux/ubuntu \
$(. /etc/os-release && echo \"${UBUNTU_CODENAME:-$VERSION_CODENAME}\") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
4. 安装 Docker 引擎
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
-
docker-ce:Docker 引擎的核心组件(Community Edition,社区版) -
docker-ce-cli:Docker 的命令行工具,让你能执行docker run等命令 -
containerd.io:容器运行时,负责实际运行容器 -
docker-buildx-plugin:扩展插件,支持构建多平台镜像 -
docker-compose-plugin:Docker Compose 插件,用于定义和运行多容器应用
5. 验证安装
sudo docker run hello-world
6. 免 sudo 使用 Docker
sudo usermod -aG docker $USER
newgrp docker
验证:docker ps 应该不再需要 sudo。
7. 安装 NVIDIA Container Toolkit
nvidia-container-toolkit 是连接 Docker 与 NVIDIA GPU 驱动的桥梁,只有安装并配置它,Docker 容器才能调用宿主机的 GPU 算力,否则Docker将只能调用CPU算力。
sudo rm -f /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo bash -c 'cat > /etc/apt/sources.list.d/nvidia-container-toolkit.list <<EOF
deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://nvidia.github.io/libnvidia-container/stable/deb/amd64 /
EOF'
# 添加 GPG 密钥
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
# 更新并安装
sudo apt update
sudo apt install -y nvidia-container-toolkit
# 配置 Docker
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
# 验证 GPU 是否可用
sudo docker run --rm --gpus all nvidia/cuda:12.2.2-base-ubuntu22.04 nvidia-smi
部署 Ollama 容器
1. 拉取镜像并启动 GPU 容器
# 拉取 Ollama 镜像
docker pull ollama/ollama:latest
# 启动容器(注意:\ 后面不能有任何字符)
docker run -d \
--gpus all \
--name ollama-server \
-p 11434:11434 \
-v ollama-data:/root/.ollama \
--restart unless-stopped \
ollama/ollama:latest
# 验证 GPU 是否生效
docker exec -it ollama-server nvidia-smi
-
-d: 后台运行,避免终端被容器日志占满。 -
--name ollama-server:给容器起一个名字,方便后续管理(比如docker stop ollama-server) -
-p 11434:11434: 端口映射,把“房子(容器)里的门牌(端口)”映射到“小区(宿主机)的门牌”,外界才能访问。 -
-v ollama-data:/root/.ollama: 数据卷,让模型文件独立于容器存活。即使容器被删了,重新创建一个并挂载同一个卷,模型还在。 -
--gpus all: 把宿主机上所有的“显卡通行证”都发给这个容器。 -
--restart unless-stopped:重启策略-
unless-stopped:除非用户手动停止,否则在容器退出或系统重启时自动重启
-
2. 下载并运行模型
#拉取模型
docker exec -it ollama-server ollama pull deepseek-r1:7b
# 运行模型,交互式对话
docker exec -it ollama-server ollama run deepseek-r1:7b
# 或通过 API 测试
curl http://localhost:11434/api/generate -d '{
"model": "deepseek-r1:7b",
"prompt": "你好",
"stream": false
}'
# 验证容器状态
docker ps
# 当前下载的模型列表
docker exec -it ollama-server ollama list
-
docker exec:在已运行的容器中执行命令 -
-it:交互模式,-i 保持输入流打开,-t 分配一个伪终端 pull命令会预先下载模型文件到数据卷中,之后run时就能快速启动。模型文件通常有几个GB大小,需要耐心等待。- ollama list 列出当前 Ollama 已经下载了哪些模型,用于确认下载是否成功
部署 Open WebUI
Open WebUI 提供类似 ChatGPT 的网页界面。
1. 启动 Open WebUI 容器
docker run -d \
--name open-webui \
-p 3000:8080 \
-v open-webui-data:/app/backend/data \
--restart unless-stopped \
-e OLLAMA_BASE_URL=http://ollama-server:11434 \
--link ollama-server \
ghcr.io/open-webui/open-webui:main
-
-e OLLAMA_BASE_URL=http://ollama-server:11434:告诉 Open WebUI 去哪里找 Ollama 服务 -
--link ollama-server:让这个容器能够通过容器名ollama-server访问到之前启动的 Ollama 容器 -
访问
http://你的IP:3000就可以打开网页界面了
2. 验证部署
# 查看容器状态
docker ps
# 应该看到两个容器:ollama-server 和 open-webui
3. 访问 Web 界面
# 在浏览器中打开
http://你的VPS_公网IP:3000
4. 开放防火墙端口(如果需要外部访问)
sudo ufw allow 3000
sudo ufw allow 11434 # API 端口,可选
如果开启了防火墙,务必要开放 3000 和 11434 端口。
安全建议:对于生产环境,不推荐直接暴露 11434 API 端口,建议用 Nginx 反向代理并配置 API 密钥。
常用管理命令
容器管理
# 查看运行中的容器
docker ps
# 查看所有容器(包括停止的)
docker ps -a
# 查看容器日志
docker logs ollama-server
docker logs open-webui
# 停止容器
docker stop ollama-server
# 启动容器
docker start ollama-server
# 删除容器
docker rm -f ollama-server
# 重启容器
docker restart ollama-server
模型管理
# 查看已下载的模型
docker exec -it ollama-server ollama list
# 下载其他模型
docker exec -it ollama-server ollama pull qwen2:7b
docker exec -it ollama-server ollama pull llama3.2:3b
# 删除模型
docker exec -it ollama-server ollama rm deepseek-r1:7b
# 交互式对话
docker exec -it ollama-server ollama run deepseek-r1:7b
资源监控
# 查看容器资源使用情况
docker stats
# 查看 GPU 状态(如果配置了 GPU)
nvidia-smi
最终成果
部署完成后,你可以:
-
网页对话:通过
http://你的IP:3000使用 AI 助手 -
API 调用:通过
http://你的IP:11434集成到其他应用 -
多模型切换:在 Open WebUI 中随时切换不同模型
-
数据私有:所有对话数据存储在自己的服务器上