Dynadot 搬瓦工 腾讯云

2026 搬瓦工 VPS 部署 Ollama + Open WebUI 教程:搭建私人 ChatGPT(Docker)

Sider GigsGigsCloud

本文老唐手把手教大家在搬瓦工 VPS 上部署 Ollama + Open WebUI,搭建一个完全属于自己的私人 ChatGPT。整个过程大约 20 分钟,需要的前置知识:会用 SSH 连接 VPS,会在命令行里敲命令,其他的跟着教程走就行。

部署完成后你会得到一个和 ChatGPT 长得差不多的聊天界面,可以对接 VPS 本地运行的开源模型(DeepSeek、Qwen 等),也可以对接 DeepSeek API、OpenAI API 等外部服务。数据全部存在你自己的服务器上,不经过任何第三方。

一、准备工作

开始之前,确认以下条件:

准备项 要求
VPS 建议 2C4G 以上(只跑平台 + API 的话 2C2G 也行)
操作系统 Ubuntu 22.04 / 24.04 LTS(本文以 Ubuntu 24.04 为例)
域名(可选) 如果想配 HTTPS 和自定义域名访问,需要一个域名
SSH 工具 能连上 VPS 就行,Windows 用 PuTTY 或 Xshell,Mac/Linux 用终端

如果还没有 VPS,推荐搬瓦工 CN2 GIA-E 套餐,线路质量好,延迟低。购买教程参考:《2026 最新搬瓦工购买教程》

已有搬瓦工 VPS 的朋友,在 KiwiVM 后台 → Install new OS → 选择 Ubuntu 24.04 重装系统即可。重装会清空数据,注意提前备份。

二、安装 Docker

SSH 连接到 VPS 后,先安装 Docker。后面的 Open WebUI 通过 Docker 部署,Ollama 虽然可以直接装,但 Docker 也需要用到。

# 更新软件源
apt update && apt upgrade -y

# 安装 Docker(官方一键脚本)
curl -fsSL https://get.docker.com | sh

# 设置 Docker 开机自启
systemctl enable docker
systemctl start docker

# 验证安装
docker --version

正常的话会输出类似 Docker version 27.x.x 的版本号。如果报错,检查一下网络连接是否正常。

顺便装一下常用工具(后面可能用到):

apt install -y curl wget git vim

三、安装 Ollama

Ollama 负责在 VPS 上管理和运行大模型。安装只需要一条命令:

curl -fsSL https://ollama.com/install.sh | sh

安装完成后 Ollama 会自动作为系统服务启动,默认监听 127.0.0.1:11434。验证一下:

systemctl status ollama

看到 active (running) 就说明启动成功了。

3.1 拉取模型

根据你的 VPS 内存大小选择模型:

VPS 内存 推荐模型 拉取命令
2GB Qwen2.5:0.5b(仅测试用) ollama pull qwen2.5:0.5b
4GB Qwen2.5:3b 或 DeepSeek-R1:1.5b ollama pull qwen2.5:3b
8GB+ DeepSeek-R1:7b 或 Qwen2.5:7b ollama pull deepseek-r1:7b

以 8GB 内存的 VPS 为例,拉取 DeepSeek-R1 7B 模型:

ollama pull deepseek-r1:7b

模型文件约 4.4GB,下载时间取决于 VPS 带宽,搬瓦工 CN2 GIA-E 一般几分钟就能下完。下载完成后可以先测试一下:

ollama run deepseek-r1:7b

进入对话模式后随便问个问题,能正常回复就说明模型运行没问题。输入 /bye 退出对话。

如果你的 VPS 内存比较小(2C2G),不打算在本地跑模型,这一步可以跳过,后面直接对接外部 API 即可。不过 Ollama 本身还是建议装上,占用资源很少,以后想试本地模型的时候可以随时用。

3.2 配置 Ollama 监听地址

默认情况下 Ollama 只监听 127.0.0.1,也就是只允许本机访问。Open WebUI 通过 Docker 运行时,需要从容器内部访问 Ollama,所以要么改监听地址,要么用 Docker 的 host 网络模式。

老唐推荐的方式是修改 Ollama 的监听地址为 0.0.0.0(所有地址),同时通过防火墙限制外部访问。

注意: 修改为 0.0.0.0 后,在配置防火墙(第六节)之前,Ollama 的 11434 端口会暂时暴露在公网上,没有任何认证保护。如果你比较在意安全,可以先执行一条临时防火墙规则只阻止外网访问(保留本机和 Docker 容器的访问),等后面配好 ufw 再清理:

# 只阻止外网访问 11434,不影响 Docker 容器通过内部网络访问 Ollama
iptables -A INPUT -p tcp --dport 11434 ! -s 127.0.0.0/8 ! -s 172.16.0.0/12 -j DROP

然后修改 Ollama 配置:

sudo systemctl edit ollama

在打开的编辑器中输入以下内容(注意不要删除已有的注释行):

[Service]
Environment="OLLAMA_HOST=0.0.0.0"

保存退出后重启 Ollama:

sudo systemctl daemon-reload
sudo systemctl restart ollama

验证监听地址是否已更改:

ss -tlnp | grep 11434

应该看到 0.0.0.0:11434,说明配置生效了。

四、安装 Open WebUI

Open WebUI 提供了一个和 ChatGPT 几乎一样的聊天界面,支持对接 Ollama 本地模型和 OpenAI 兼容的 API。

4.1 Docker 一键部署

先生成一个固定的密钥并保存下来(后续更新容器时需要用同一个密钥,否则所有用户会被登出):

# 生成密钥并保存到文件
openssl rand -hex 32 > /root/.open-webui-secret-key
cat /root/.open-webui-secret-key

记住这个密钥(或者记住文件位置),然后启动容器:

docker run -d -p 3000:8080 \
  --add-host=host.docker.internal:host-gateway \
  -v open-webui:/app/backend/data \
  -e WEBUI_SECRET_KEY="$(cat /root/.open-webui-secret-key)" \
  --name open-webui \
  --restart always \
  ghcr.io/open-webui/open-webui:main

解释一下各参数的作用:

参数 作用
-d 后台运行
-p 3000:8080 将容器的 8080 端口映射到 VPS 的 3000 端口
--add-host=host.docker.internal:host-gateway 让容器能通过 host.docker.internal 访问宿主机的服务(Ollama)
-v open-webui:/app/backend/data 持久化数据存储,删除容器不丢数据
-e WEBUI_SECRET_KEY=... 设置一个固定的密钥,避免容器重建后所有用户被登出
--restart always VPS 重启后容器自动启动

第一次运行需要下载镜像,大小约 2GB,耐心等几分钟。下载完成后可以查看容器状态:

docker ps

看到 open-webui 容器的 STATUS 是 Up 就说明启动成功了。

4.2 首次访问和配置

打开浏览器,访问 http://你的VPS-IP:3000

首次访问会要求创建管理员账号,设置用户名和密码后登录。登录后你会看到一个和 ChatGPT 非常相似的界面。

如果 VPS 上已经安装了 Ollama 并拉取了模型,在页面左上角的模型选择器中应该能看到已下载的模型(比如 deepseek-r1:7b)。选择模型后就可以开始对话了。

如果模型列表为空,说明 Open WebUI 没有成功连接到 Ollama。检查以下几点:

  1. Ollama 是否在运行:systemctl status ollama
  2. Ollama 是否监听 0.0.0.0:ss -tlnp | grep 11434
  3. 从容器内部测试连接:docker exec open-webui curl -s http://host.docker.internal:11434(如果容器内没有 curl,换用 docker exec open-webui wget -qO- http://host.docker.internal:11434

如果上面第 3 步报错,可以试试使用 host 网络模式重新部署(先删除旧容器):

docker rm -f open-webui

docker run -d --network=host \
  -v open-webui:/app/backend/data \
  -e WEBUI_SECRET_KEY="$(cat /root/.open-webui-secret-key)" \
  -e OLLAMA_BASE_URL=http://127.0.0.1:11434 \
  --name open-webui \
  --restart always \
  ghcr.io/open-webui/open-webui:main

使用 --network=host 模式后,Open WebUI 直接监听在 VPS 的 8080 端口(不再是 3000),访问地址变为 http://你的VPS-IP:8080

五、对接外部 API

VPS 本地模型受限于 CPU 推理速度和模型参数大小,回答质量和速度都不如云端 API。老唐建议同时配置一个外部 API 作为补充,日常用 API,需要隐私的时候切换到本地模型。

5.1 配置 DeepSeek API

DeepSeek API 兼容 OpenAI 格式,价格便宜,中文能力强,个人用一个月大概几块钱。

  1. 去 <a href=”https://platform.deepseek.com/” target=”_blank”>DeepSeek 开放平台</a> 注册账号并获取 API Key
  2. 在 Open WebUI 中点击左下角头像 → 管理员面板 → 设置 → 连接(Connections)
  3. 找到 “OpenAI API” 部分,填入:
    • API Base URL:https://api.deepseek.com/v1
    • API Key:你的 DeepSeek API Key
  4. 点击保存

保存后回到聊天界面,模型选择器中会出现 DeepSeek 的模型(deepseek-chatdeepseek-reasoner 等)。选择 deepseek-chat 即可使用 DeepSeek-V3 满血版模型。

5.2 配置其他 API

除了 DeepSeek,你还可以添加其他兼容 OpenAI 格式的 API:

API 服务 API Base URL 说明
DeepSeek https://api.deepseek.com/v1 便宜好用,中文能力强
OpenAI https://api.openai.com/v1 GPT-4o 等模型,需要海外支付方式
智谱 AI https://open.bigmodel.cn/api/paas/v4 GLM-4 系列,国内付款方便
硅基流动 https://api.siliconflow.cn/v1 聚合多家模型,有免费额度

在 Open WebUI 的连接设置中可以添加多个 API 源,切换模型时会自动路由到对应的 API。

六、配置域名和 HTTPS(可选但推荐)

直接用 IP + 端口号访问虽然能用,但有两个问题:一是记不住,二是 HTTP 明文传输不安全(密码和对话内容在网络上裸奔)。如果你有域名,强烈建议配置 HTTPS 访问。

这里老唐用 Caddy 来做反向代理,比 Nginx 简单很多,而且自动申请和续签 SSL 证书。

6.1 安装 Caddy

apt install -y debian-keyring debian-archive-keyring apt-transport-https

curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg

curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | tee /etc/apt/sources.list.d/caddy-stable.list

apt update
apt install caddy

6.2 配置反向代理

先将你的域名(比如 chat.example.com)解析到 VPS 的 IP 地址(添加一条 A 记录)。等待 DNS 生效后(通常几分钟),编辑 Caddy 配置文件:

vim /etc/caddy/Caddyfile

清空文件内容,写入以下配置:

chat.example.com {
    reverse_proxy localhost:3000
}

就这么简单,三行配置搞定。Caddy 会自动向 Let’s Encrypt 申请 SSL 证书,并配置 HTTPS。

保存后重载 Caddy 配置:

systemctl reload caddy

如果 reload 报错(比如首次修改配置文件格式不对),可以用 systemctl restart caddy 代替。

注意: Caddy 需要占用 80 和 443 端口来申请和续签证书。如果 VPS 上有其他服务(如 Nginx、Apache)占用了这些端口,需要先停掉或卸载。

稍等一两分钟让 Caddy 完成证书申请,然后访问 https://chat.example.com,就能看到 Open WebUI 的界面了,地址栏会显示安全的 HTTPS 锁标志。

6.3 关闭直接 IP 访问

配好域名之后,建议通过防火墙关闭 3000 端口的直接访问,只保留 80(HTTP,用于 Caddy 自动跳转 HTTPS)和 443(HTTPS)端口:

# 安装 ufw 防火墙
apt install -y ufw

# 配置规则(顺序很重要:先放行 SSH,再启用防火墙!)
ufw allow 22/tcp    # SSH(如果你改过 SSH 端口,这里写实际端口)
ufw allow 80/tcp    # HTTP(Caddy 自动跳转到 HTTPS)
ufw allow 443/tcp   # HTTPS

# 启用防火墙(会提示可能中断 SSH 连接,输入 y 确认)
ufw enable

# 查看状态
ufw status

务必确保在 ufw enable 之前已经放行了 SSH 端口(默认 22),否则防火墙启用后你会被锁在 VPS 外面,只能通过搬瓦工 KiwiVM 后台的 Shell 去修复。

这样 Open WebUI 只能通过 https://chat.example.com 访问,直接用 IP:3000 就访问不了了。Ollama 的 11434 端口也被防火墙挡住了,外部无法直接调用你的 Ollama API。

七、日常维护

7.1 更新 Open WebUI

Open WebUI 更新比较频繁,更新方法:

# 停止并删除旧容器(数据不会丢,存在 volume 里)
docker rm -f open-webui

# 拉取最新镜像
docker pull 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 \
  -e WEBUI_SECRET_KEY="$(cat /root/.open-webui-secret-key)" \
  --name open-webui \
  --restart always \
  ghcr.io/open-webui/open-webui:main

WEBUI_SECRET_KEY 必须和初次安装时保持一致,否则所有用户会被登出。如果按照前面第四节的步骤操作,密钥已经保存在 /root/.open-webui-secret-key 文件里了。

如果你当时没有保存密钥,可以在删除旧容器之前用以下命令查看:

docker inspect open-webui | grep WEBUI_SECRET_KEY

7.2 更新 Ollama

curl -fsSL https://ollama.com/install.sh | sh

直接重新运行安装脚本即可,会覆盖安装最新版本,已下载的模型不受影响。

7.3 更新模型

# 更新已下载的模型到最新版本
ollama pull deepseek-r1:7b

如果模型有新版本,会自动下载差异部分。

7.4 备份数据

Open WebUI 的数据(用户信息、聊天记录、设置等)存储在 Docker volume 中,备份方法:

# 备份到当前目录
docker run --rm -v open-webui:/data -v $(pwd):/backup \
  alpine tar czf /backup/openwebui-backup-$(date +%Y%m%d).tar.gz /data

会在当前目录生成一个 openwebui-backup-日期.tar.gz 文件,下载保存即可。

恢复备份:

docker stop open-webui
docker run --rm -v open-webui:/data -v $(pwd):/backup \
  alpine sh -c "rm -rf /data/* && tar xzf /backup/openwebui-backup-20260222.tar.gz -C /"
docker start open-webui

八、安全加固清单

部署完成后,建议对照以下清单做一遍安全检查:

项目 操作 状态
关闭 Open WebUI 注册功能 管理员面板 → 设置 → 通用 → 关闭”启用新用户注册”
配置防火墙 只开放 22、80、443 端口
配置 HTTPS 通过 Caddy 配置域名 + SSL
修改 SSH 端口(可选) 编辑 /etc/ssh/sshd_config,改为非标准端口
设置 SSH 密钥登录(可选) 禁用密码登录,使用密钥认证
限制 Ollama 外部访问 防火墙不开放 11434 端口

九、常见问题

Q:Docker 拉取镜像速度很慢怎么办?

搬瓦工海外 VPS 一般不会有这个问题。如果确实慢,可以尝试使用国内镜像源(适用于国内服务器)。海外 VPS 直接拉取 ghcr.io 的镜像速度通常很快。

Q:Open WebUI 页面打不开?

按顺序排查:1)确认容器在运行 docker ps;2)确认端口映射 docker port open-webui;3)确认防火墙没有阻止 3000 端口 ufw status;4)尝试在 VPS 本地测试 curl http://localhost:3000

Q:Open WebUI 连不上 Ollama,模型列表为空?

大概率是 Docker 容器访问不了宿主机的 Ollama 服务。解决方法:1)确认 Ollama 监听 0.0.0.0(参考第三节);2)确认 --add-host=host.docker.internal:host-gateway 参数加上了;3)实在不行用 --network=host 模式。

Q:对话时回复很慢?

如果用的是本地模型,VPS CPU 推理本身就慢(7B 模型大概 3-8 tokens/s),这是正常的。想要快就换 API 调用。如果用的是 API 但仍然慢,检查一下 VPS 到 API 服务器的网络延迟。

Q:VPS 重启后服务还在吗?

Ollama 是 systemd 服务,开机自启。Open WebUI 设置了 --restart always,Docker 启动后会自动拉起。Caddy 也是 systemd 服务,开机自启。所以重启 VPS 后所有服务都会自动恢复,不需要手动操作。

Q:如果只想用 API 不想跑本地模型,可以不装 Ollama 吗?

可以。Open WebUI 不依赖 Ollama,单独部署也能用。不过 Ollama 占用资源很少(不加载模型的话几乎不占内存),装着也不碍事,以后想试本地模型的时候就方便了。

十、下一步

私人 ChatGPT 搭好了,接下来可以继续折腾:

搬瓦工新手入门:《搬瓦工新手入门完全指南:方案推荐、机房选择、优惠码和购买教程》

搬瓦工购买教程:《2026 最新搬瓦工购买教程:新用户注册账户、选择套餐、支付宝付款》

Dynadot Hostwinds
赞(0)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《2026 搬瓦工 VPS 部署 Ollama + Open WebUI 教程:搭建私人 ChatGPT(Docker)
文章链接:https://oldtang.com/14599.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。