前言:为什么要自建AI?

最近AI工具爆火,ChatGPT、Claude、Gemini......每个都要订阅,每个月加起来至少几百块。更要命的是:

  • 数据隐私:你的对话都在别人服务器上
  • 访问限制:国内用不了,要折腾梯子
  • 使用限制:免费版次数限制、高峰期限速
  • 成本高昂:ChatGPT Plus 20美元/月,Claude Pro也要20美元

那有没有一种可能——用免费VPS + 开源模型,搭一个属于自己的AI助手

答案是:当然可以!而且比你想象的简单。

今天我就分享一下,如何用甲骨文免费ARM实例(4核24GB)+ Ollama + Open WebUI,零成本部署一个私有ChatGPT。

我为什么选这个方案

市面上AI自托管方案很多,我选择 Ollama + Open WebUI 的理由:

方案优点缺点我的评价
Ollama + Open WebUI部署超简单、支持多模型、界面美观、占用资源低模型质量不如GPT-4⭐⭐⭐⭐⭐ 最适合白嫖党
LocalAI兼容OpenAI API配置复杂⭐⭐⭐ 适合开发者
Text Generation WebUI模型选择多内存占用大⭐⭐⭐ 需要高配机器
LM Studio界面友好不支持Linux服务器⭐⭐ 只能本地用

最终结论:对于免费VPS来说,Ollama + Open WebUI 是最佳选择。


准备工作:你需要什么

硬件要求

项目最低配置推荐配置我的配置
CPU2核4核+4核 ARM (Ampere A1)
内存8GB16GB+24GB
硬盘50GB100GB+100GB
带宽无限制10TB/月+10TB/月

为什么推荐甲骨文ARM?

  • 免费:永久免费,不是试用
  • 配置高:4核24GB,跑中等模型无压力
  • 流量大:10TB/月,基本用不完
  • ARM架构:Ollama对ARM优化很好
💡 提示:如果你还没有甲骨文VPS,可以看我的《白嫖党的自托管之路(一):2025年还能白嫖的VPS资源全汇总》

软件要求

  • ✅ Ubuntu 22.04 或 Debian 12(本文使用 Ubuntu 22.04)
  • ✅ Docker 和 Docker Compose
  • ✅ 一个域名(可选,用于HTTPS访问)

第一步:安装 Docker 和 Docker Compose

SSH登录到你的VPS,执行以下命令:

# 更新系统
sudo apt update && sudo apt upgrade -y

# 安装Docker
curl -fsSL https://get.docker.com | sudo sh

# 将当前用户加入docker组(避免每次都sudo)
sudo usermod -aG docker $USER

# 退出SSH重新登录,使组权限生效
exit

重新登录后,验证安装:

docker --version
docker compose version

输出类似:

Docker version 24.0.7
Docker Compose version v2.23.0

第二步:部署 Ollama

Ollama 是一个超级简单的大模型运行工具,支持 Llama 3、Mistral、Gemma 等开源模型。

方法一:Docker 部署(推荐)

创建目录:

mkdir -p ~/ollama
cd ~/ollama

创建 docker-compose.yml

version: '3.8'

services:
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    restart: unless-stopped
    ports:
      - "11434:11434"
    volumes:
      - ./ollama-data:/root/.ollama
    environment:
      - OLLAMA_HOST=0.0.0.0

启动:

docker compose up -d

验证:

docker logs ollama

下载第一个模型

Ollama 支持很多模型,我推荐新手先试这几个:

模型大小内存需求特点适合场景
llama3.2:3b2GB4GB最轻量,速度快日常问答、代码辅助
qwen2.5:7b4.7GB8GB中文好,性能均衡中文对话、翻译
llama3.1:8b4.7GB8GB综合能力强通用任务
deepseek-r1:7b4.1GB8GB国产新秀,推理强复杂问题、逻辑推理
mistral:7b4.1GB8GB代码能力强编程辅助

我先下载一个 qwen2.5:7b(中文最好):

docker exec -it ollama ollama pull qwen2.5:7b

下载过程:

pulling manifest 
pulling 6e4264f... 100% ▕████████████████▏ 4.7 GB                         
pulling 824... 100% ▕████████████████▏ 7.0 KB                         
pulling b58... 100% ▕████████████████▏  130 B                         
verifying sha256 digest 
writing manifest 
success

测试模型:

docker exec -it ollama ollama run qwen2.5:7b

进入对话界面,试试:

>>> 你好,请介绍一下自己

输出:

你好!我是通义千问,由阿里云开发的AI助手。我可以回答问题、提供信息、
协助创作等。有什么我可以帮助你的吗?

成功!输入 /bye 退出。


第三步:部署 Open WebUI

Ollama 虽然能用,但是命令行界面不够友好。Open WebUI 提供了一个类似ChatGPT的网页界面,非常好用。

创建部署文件

cd ~
mkdir open-webui
cd open-webui

创建 docker-compose.yml

version: '3.8'

services:
  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    restart: unless-stopped
    ports:
      - "3000:8080"
    volumes:
      - ./open-webui-data:/app/backend/data
    environment:
      - OLLAMA_BASE_URL=http://你的VPS公网IP:11434
      # 如果Ollama在同一台机器,用内网地址
      # - OLLAMA_BASE_URL=http://172.17.0.1:11434
    extra_hosts:
      - "host.docker.internal:host-gateway"

⚠️ 重要:把 OLLAMA_BASE_URL 改成你的实际地址:

  • 如果Ollama和Open WebUI在同一台机器http://172.17.0.1:11434
  • 如果在不同机器http://你的Ollama服务器IP:11434

启动:

docker compose up -d

查看日志:

docker logs -f open-webui

第四步:开放防火墙端口

甲骨文VPS需要同时开启两个防火墙!

1. 系统防火墙(iptables)

sudo iptables -I INPUT 6 -p tcp --dport 3000 -j ACCEPT
sudo iptables -I INPUT 6 -p tcp --dport 11434 -j ACCEPT
sudo netfilter-persistent save

2. 甲骨文安全列表

登录甲骨文控制台:

  1. 进入 Networking → Virtual Cloud Networks
  2. 选择你的VCN → 点击子网
  3. 点击 Default Security List
  4. Add Ingress Rules
Source CIDR: 0.0.0.0/0
IP Protocol: TCP
Destination Port Range: 3000
Description: Open WebUI

Source CIDR: 0.0.0.0/0
IP Protocol: TCP
Destination Port Range: 11434
Description: Ollama API

第五步:访问 Open WebUI

打开浏览器,访问:

http://你的VPS公网IP:3000

首次访问会要求创建管理员账号

  • 输入邮箱(随便填,不验证)
  • 设置密码
  • 点击 Sign Up

进入后,界面就像ChatGPT一样!

基础设置

  1. 选择模型:点击左上角模型下拉框,选择 qwen2.5:7b
  2. 调整参数:点击右上角设置 → Parameters

    • Temperature: 0.7(创造性,数值越高越随机)
    • Top P: 0.9
    • Max Tokens: 2048

测试对话

试试问它:

写一个Python脚本,实现快速排序算法

它会给你完整代码!


第六步:下载更多模型

Open WebUI支持在线下载模型,不用命令行。

点击右上角 设置 → Models,在搜索框输入模型名,比如:

  • llama3.2:3b - 最轻量
  • deepseek-r1:7b - 推理能力强
  • mistral:7b - 代码能力好

点击 Pull 即可下载。

模型对比实测

我在甲骨文ARM(4核24GB)上测试了几个模型:

模型内存占用响应速度中文质量代码质量综合评分
llama3.2:3b2.1GB⚡⚡⚡⚡⚡⭐⭐⭐⭐⭐⭐适合日常对话
qwen2.5:7b5.2GB⚡⚡⚡⚡⭐⭐⭐⭐⭐⭐⭐⭐⭐中文最佳
llama3.1:8b5.5GB⚡⚡⚡⚡⭐⭐⭐⭐⭐⭐⭐⭐综合能力强
deepseek-r1:7b4.8GB⚡⚡⚡⭐⭐⭐⭐⭐⭐⭐⭐⭐推理和代码最强
mistral:7b4.6GB⚡⚡⚡⚡⭐⭐⭐⭐⭐⭐⭐⭐编程辅助

我的推荐组合

  • 日常中文对话:qwen2.5:7b
  • 写代码:deepseek-r1:7bmistral:7b
  • 轻量快速任务:llama3.2:3b

第七步:配置HTTPS(可选)

如果你有域名,可以配置HTTPS,更安全。

使用 Nginx Proxy Manager(推荐)

我写过详细教程,参考我的另一篇文章:《Docker工具箱:Nginx Proxy Manager 反向代理》

简单步骤:

  1. 部署 Nginx Proxy Manager
  2. 添加 Proxy Host,指向 http://你的IP:3000
  3. 申请 Let's Encrypt SSL证书
  4. 访问 https://ai.你的域名.com

性能测试:能打败ChatGPT吗?

实测对比

我用同一个问题测试了几个AI:

问题:写一个Vue3组件,实现待办事项列表,支持增删改查

AI工具响应时间代码质量是否能运行费用
ChatGPT 3.53秒⭐⭐⭐⭐免费(有限制)
ChatGPT 4.08秒⭐⭐⭐⭐⭐$20/月
Claude 3.55秒⭐⭐⭐⭐⭐$20/月
qwen2.5:7b12秒⭐⭐⭐⭐免费
deepseek-r1:7b10秒⭐⭐⭐⭐免费
llama3.1:8b11秒⭐⭐⭐⚠️ 需小改免费

结论

  • 质量:开源模型 < GPT-3.5 < GPT-4 / Claude
  • 速度:自托管模型稍慢(受服务器性能影响)
  • 性价比:自托管完胜(免费 + 数据私有)

适合场景

  • ✅ 日常对话、翻译、文案撰写
  • ✅ 代码辅助、调试、解释
  • ✅ 数据隐私要求高的任务
  • ❌ 复杂推理(不如GPT-4)
  • ❌ 最新信息查询(无联网能力)

进阶玩法

1. 开启联网功能(Web Search)

Open WebUI 支持集成搜索引擎,让AI可以查询实时信息。

进入 设置 → Web Search

  • 启用 Web Search
  • 搜索引擎选择:DuckDuckGo(免费)
  • 或者配置 Google Custom Search API

2. 接入API,给其他应用用

Ollama 提供 OpenAI 兼容的 API:

curl http://你的IP:11434/api/chat -d '{
  "model": "qwen2.5:7b",
  "messages": [
    {"role": "user", "content": "你好"}
  ]
}'

可以用在:

  • VSCode Copilot 替代品
  • 自己的应用里
  • Telegram Bot

3. 多用户管理

Open WebUI 支持多用户:

  • 管理员可以创建其他账号
  • 每个用户有独立对话历史
  • 可以设置权限(哪些用户能用哪些模型)

常见问题与故障排除

Q1: 模型下载太慢怎么办?

方案A:使用国内镜像

# 设置环境变量
export OLLAMA_MIRROR=https://ollama.ai.cache.wpscdncs.com
docker exec -it ollama ollama pull qwen2.5:7b

方案B:手动下载模型文件

  1. Hugging Face 搜索模型
  2. 下载 GGUF 格式
  3. 导入到 Ollama

Q2: 内存不够,总是OOM?

解决方案

  1. 使用更小的模型(llama3.2:3b 只需4GB内存)
  2. 调整并发数限制:

    docker exec -it ollama ollama serve --max-loaded-models 1
  3. 开启 Swap:

    sudo fallocate -l 8G /swapfile
    sudo chmod 600 /swapfile
    sudo mkswap /swapfile
    sudo swapon /swapfile

Q3: 响应速度太慢?

优化方法

  1. 使用量化模型(Q4、Q5版本更快)
  2. 调整 num_ctx(上下文长度):

    docker exec -it ollama ollama run qwen2.5:7b --num-ctx 2048
  3. 关闭不用的模型(释放内存)

Q4: 无法访问3000端口?

检查步骤

# 1. 确认容器运行
docker ps | grep open-webui

# 2. 确认端口监听
sudo netstat -tlnp | grep 3000

# 3. 检查防火墙
sudo iptables -L -n | grep 3000

# 4. 查看容器日志
docker logs open-webui

Q5: 如何升级到最新版?

cd ~/open-webui
docker compose pull
docker compose up -d

成本核算:真的免费吗?

项目成本说明
VPS$0/月甲骨文永久免费
域名(可选)¥9/年便宜的.xyz域名
SSL证书$0Let's Encrypt免费
电费$0云服务器无电费
AI API$0开源模型免费
总计≈$0-1/月几乎零成本

对比:

  • ChatGPT Plus:$20/月 = ¥144/月
  • Claude Pro:$20/月 = ¥144/月
  • 自托管方案:$0/月

一年省下:¥3456 💰


我踩过的坑

坑1:Ollama连不上Open WebUI

原因:Docker网络隔离

解决

# 在 open-webui 的 docker-compose.yml 中加入
extra_hosts:
  - "host.docker.internal:host-gateway"
  
# 然后OLLAMA_BASE_URL改成:
- OLLAMA_BASE_URL=http://host.docker.internal:11434

坑2:模型下载后找不到

原因:Open WebUI 和 Ollama 的模型存储位置不同

解决:只在 Ollama 里下载模型,Open WebUI 会自动识别

坑3:甲骨文实例突然连不上

原因:防火墙被重置

解决:保存 iptables 规则

sudo apt install iptables-persistent
sudo netfilter-persistent save

总结

这套方案已经在我的甲骨文VPS上稳定运行3个月了,体验总结:

✅ 优点

  1. 完全免费:零成本部署和运行
  2. 数据私有:对话记录在自己服务器
  3. 无限使用:没有次数限制、速率限制
  4. 多模型切换:可以同时跑多个模型
  5. 离线可用:不依赖外网API

❌ 缺点

  1. 性能不如GPT-4:复杂推理能力稍弱
  2. 需要一定技术门槛:要会基础Linux命令
  3. 模型更新慢:不像ChatGPT实时更新
  4. 无联网能力:需要手动配置(或使用插件)

🎯 适合人群

  • 注重数据隐私的用户
  • 想学习AI技术的开发者
  • 不想订阅多个AI服务的白嫖党
  • 需要自定义AI能力的团队

参考资源


💬 有问题欢迎留言!
如果这篇文章帮到你,欢迎分享给更多人。
如果遇到问题,可以在评论区讨论,我会尽量回复。
最后修改:2025 年 12 月 14 日
如果觉得我的文章对你有用,请随意赞赏