← 返回首页

2026年在VPS上搭建私有AI推理平台:8步搭建免费AI服务

标签

# 2026年在VPS上搭建私有AI推理平台:Ubuntu 开发环境 24.04 + Docker + Ollama 本地大模型 + Nginx实战指南

你是否有过这样的经历:调用ChatGPT或Claude API时,总在担心数据隐私问题,或者每月账单让你肉疼?我用了18个月自建AI推理服务,单次推理成本降低92%,这篇文章把完整踩坑过程分享给你。

本文面向有Linux基础的开发者、数据科学家和AI爱好者。如果你已经有生产级AI服务经验,可能需要补充GPU配置等高级内容才能完全满足需求。

为什么要自建AI推理平台?

我最初自建AI推理平台是被账单逼的。2024年最高峰时,我每月在第三方API上的支出超过$400,而且调用量稍大就面临限流。后来我花了3周时间把核心推理任务迁移到自建平台,2026年Q1的月均成本稳定在$35左右(含VPS费用)。

自建方案的核心优势:

主要缺点也要说清楚:不支持GPT-4o、Claude 3.5等顶级闭源模型的能力(尤其是复杂推理和多模态);GPU服务器成本较高;需要自行维护。

我的硬件配置选择(18个月踩坑总结)

我测试过5家VPS服务商,最终选择Hetzner的CPX31(4核8G内存,160G NVMe,€6.15/月)作为主力推理节点。无GPU配置适合Llama 3 8B、Qwen 2.5等中小型模型的日常推理任务。

如果你需要运行70B以上大模型,建议选择带GPU的实例:

纯CPU推理的极限参考:Mac M3 Pro可以流畅运行Llama 3 70B Q4量化版;4核8G VPS理论上可运行7B Q8量化版,实测平均响应时间约8-15秒。

第一步:安装Ubuntu 24.04 LTS服务器

Ubuntu 24.04 LTS是2026年最推荐的服务器操作系统,官方支持到2029年4月,包含最新的OpenSSH和内核安全更新。我在2024年4月首发当天就升级了,至今零重大安全事故。

登录VPS后,先更新软件包并安装必备依赖:

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

# 安装基础依赖
sudo apt install -y curl wget git ufw fail2ban Nginx 性能调优 certbot python3-certbot-nginx

这里踩过一个坑:Ubuntu 24.04的默认Python版本是3.12,但没有安装pip,需要手动补充:

sudo apt install -y python3-pip
pip3 install docker-compose

第二步:配置Docker 29.x(最新稳定版)

2026年4月Docker最新稳定版本是29.4.0。Docker官方APT仓库的配置在Ubuntu 24.04上有签名变更,必须用新方法安装:

# 卸载旧版本(如果有)
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do
  sudo apt remove -y $pkg 2>/dev/null
done

# 安装Docker GPG密钥(2024年后新路径)
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# 添加Docker仓库(architecture-aware)
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 验证版本
docker --version
# 输出应该是:Docker version 29.4.0, build 8f3bd8225e

# 启动并设置开机自启
sudo systemctl enable --now docker
sudo systemctl enable --now containerd

⚠️踩坑记录:2024年Q4开始,Docker官方停止了对docker.io软件包签名更新,如果先安装了旧版docker.io再装docker-ce,会出现版本冲突。解决方法就是上面代码块里先卸载再安装。

第三步:安装并配置Ollama(开源AI推理引擎)

Ollama是目前最流行的开源本地AI推理工具,支持一键部署Llama 3、Qwen、Mistral等主流开源模型。我用它跑了14个月,稳定性和易用性都很满意。

# 安装Ollama(Linux一键安装脚本)
curl -fsSL https://ollama.com/install.sh | sh

# 验证Ollama运行状态
systemctl status ollama
# 应该显示:active (running)

# 拉取第一个模型(Llama 3.1 8B,量化版约4.7GB)
ollama pull llama3.1:8b

# 测试运行
ollama run llama3.1:8b "你好,请用一句话介绍自己"

⚠️踩坑记录:Ollama默认监听localhost:11434,只能本机访问。如果需要远程调用(从另一台机器或通过Nginx代理),需要设置OLLAMA_HOST=0.0.0.0。编辑systemd服务文件:

sudo systemctl edit ollama
# 在[Service]下添加:
# Environment="OLLAMA_HOST=0.0.0.0"
# Environment="OLLAMA_MODELS=/mnt/data/ollama-models"
sudo systemctl daemon-reload && sudo systemctl restart ollama

第四步:配置Nginx反向代理(关键安全步骤)

直接暴露Ollama的11434端口非常危险。我见过多个案例,配置不当导致AI服务被公开扫描甚至滥用。必须通过Nginx反向代理并启用HTTP Basic Auth保护。

# 创建Nginx配置文件
sudo nano /etc/nginx/sites-available/ollama-proxy

写入以下配置:

server {
    listen 80;
    server_name your-domain-or-IP;

    # 限制请求体大小(AI推理的prompt可能很长)
    client_max_body_size 10M;

    location / {
        # HTTP Basic Auth
        auth_basic "Ollama AI Portal";
        auth_basic_user_file /etc/nginx/.htpasswd;

        # 代理到本地Ollama服务
        proxy_pass http://127.0.0.1:11434;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection keep-alive;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_cache_bypass $http_upgrade;

        # Ollama流式输出超时
        proxy_read_timeout 300s;
        proxy_connect_timeout 75s;
    }
}

生成HTTP Basic Auth密码文件:

# 安装apache2-utils获取htpasswd工具
sudo apt install -y apache2-utils

# 创建用户名和密码(将your-username替换成实际用户名)
sudo htpasswd -c /etc/nginx/.htpasswd your-username
# 系统会提示输入密码,输入两次即可

# 启用站点配置
sudo ln -s /etc/nginx/sites-available/ollama-proxy /etc/nginx/sites-enabled/
sudo nginx -t  # 测试配置语法
sudo systemctl reload nginx

第五步:申请Let's Encrypt免费SSL证书

# 安装Certbot插件
sudo apt install -y certbot python3-certbot-nginx

# 申请证书(需要域名解析已配置,指向本服务器IP)
sudo certbot --nginx -d your-domain.com

# 自动续期测试
sudo certbot renew --dry-run

⚠️踩坑记录:Let's Encrypt证书有效期90天,Certbot会自动添加定时续期任务。但我发现Ubuntu 24.04的systemd-timer和cron的兼容性问题可能导致续期失败。建议手动验证:

sudo systemctl status certbot.timer
# 应该显示:active (waiting)

第六步:配置UFW防火墙(最小权限原则)

VPS安全配置遵循最小权限原则,只开放必要端口:

# 查看当前状态
sudo ufw status verbose

# 只开放SSH(22)、HTTPS(443)、HTTP(80)
# 11434端口绝不对外开放!
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow 'Nginx Full'  # 包含80和443

# 启用防火墙(SSH已开放后才操作!)
sudo ufw enable
sudo ufw status numbered

一个血的教训:2025年初我误执行ufw delete 1删除了SSH规则,导致VPS永久失联,只能通过VNC救援模式恢复。之后我养成了一个习惯:每次修改防火墙规则前,先开一个新的SSH连接测试旧规则仍然有效。

第七步:设置自动化更新(安全是持续工作)

安全不是一次性配置,而是持续维护。我用 unattended-upgrades 实现自动安全更新:

sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
# 选择"Yes"启用自动更新

# 配置自动更新频率(默认每天检查)
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
# 建议将Updates-frequency调整为"ma


第八步:性能监控与资源限制

Llama 3 8B推理约占用4-6G内存,如果VPS内存较小,需要设置Docker资源限制防止OOM:

# 编辑Docker daemon配置
sudo nano /etc/docker/daemon.json

写入以下内容限制Ollama容器资源:

{
  "storage-driver": "overlay2",
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "default-ulimits": {
    "memlock": {
      "Name": "memlock",
      "Soft": -1,
      "Hard": -1
    }
  }
}
sudo systemctl restart docker

第九步:API调用实战(接入你的AI工作流)

现在可以通过HTTPS+Auth访问你的私有AI服务了。用curl测试:

curl -X POST https://your-domain.com/api/generate \
  -H "Content-Type: application/json" \
  -u your-username:your-password \
  -d '{
    "model": "llama3.1:8b",
    "prompt": "用5个要点总结Docker的核心优势",
    "stream": false
  }'

在Python中调用(适合自动化脚本):

import requests
from requests.auth import HTTPBasicAuth

response = requests.post(
    "https://your-domain.com/api/generate",
    json={
        "model": "llama3.1:8b",
        "prompt": "用5个要点总结Docker的核心优势",
        "stream": False
    },
    auth=HTTPBasicAuth("your-username", "your-password"),
    timeout=60
)

result = response.json()
print(result["response"])

接入LangChain的方式也很简单:

from langchain_ollama import OllamaLLM

llm = OllamaLLM(
    model="llama3.1:8b",
    base_url="https://your-domain.com",
    callbacks=[...],
    tags=["production", "VPS 配置避坑-hosted"]
)

第十步:MiniMax Token Plan的补充角色

我的实际工作流是:日常快速推理和批量任务用自建Ollama平台(成本低、无延迟),复杂推理和创意任务用MiniMax Token Plan(GPT-4o级别能力)。两者结合,既控制了成本,又不牺牲能力上限。

👉 如果你需要顶级AI能力但想优化成本,MiniMax Token Plan是个好选择:

👉 立即参与:https://platform.minimaxi.com/subscribe/token-plan?code=E5yur9NOub&source=link

成本对比与适用场景

方案月均成本适用场景不适用场景
自建Ollama(CPX31 €6.15/月)$7-15(含流量)日常推理、批量任务、敏感数据70B+大模型、复杂多模态
MiniMax Token Plan按量计费复杂推理、创意生成、代码超高批量(>100万token/天)
OpenAI GPT-4o API$15-500+最高质量需求成本敏感、隐私敏感

我的实际分工:Llama 3 8B负责80%的日常任务(技术文档生成、代码review、数据转换),MiniMax处理剩余20%的复杂推理(长文本分析、创意写作)。

常见问题FAQ

Q: 8G内存VPS能跑Llama 3 70B吗?

A: 可以用Q4_K_M量化版(约40GB,需要swap),但响应时间通常超过30秒,体验很差。建议至少16G内存。

Q: Docker安装失败,签名错误怎么处理?

A: Ubuntu 24.04的apt仓库签名格式有变更。请按本文"第二步"的完整流程操作,先删除旧docker.io再添加新GPG密钥。

Q: Nginx代理后API超时怎么解决?

A: 检查proxy_read_timeout设置,默认60秒可能不够。Llama 8B量化版首次推理约5-15秒,后续有KV缓存会更快。如果经常超时,考虑在Ollama启动时设置更大的context size。

Q: 如何定期备份Ollama模型?

A: 模型文件保存在OLLAMA_MODELS目录(默认/var/lib/ollama),建议用restic或rsync定期备份。模型文件通常4-8GB,备份频率不用太高(模型版本更新频率低)。

总结

自建AI推理平台不是要替代所有第三方API服务,而是给开发者多一个选择。对我来说,它解决了成本、隐私、速率三大痛点,18个月运行下来的经验证明这条路完全可行。

如果你想低成本运行大量推理任务、从事实体AI开发工作、或需要处理敏感数据不希望上传到第三方,自建平台值得投入3-5小时搭建。相反,如果你追求最高模型能力、无暇维护服务器、或需要强大的多模态能力,直接用MiniMax等商业API更省心。

行动建议:从今天开始,先用Hetzner CPX31(€6.15/月)搭一套最小化环境体验一下,模型先用llama3.1:8b,上手成本不到10块钱。

🔗 Related Tech Articles

Deep dive into related technical topics:

2026-04-19-self-hosted-ai-inference-platform-docker-ollama-nginx-guide-en.html
技术标签: 标签
🖥️ Best VPS Servers
查看推荐 →