← Leo Labs

AI 开发者的 VPS 全栈指南

从网络环境到 24/7 策略运行 — 不是翻墙教程,是 AI builder 的实战工作流

1为什么 AI 开发者需要 VPS

如果你只是写代码、用 ChatGPT,大概率不需要 VPS。但一旦涉及这些场景,VPS 就是刚需:

我目前的架构是两台 VPS + 本地 Mac:一台跑数据采集(东京节点,离 Polygon RPC 近),一台跑策略执行。这篇分享从零搭建的完整路径。

2选 VPS:Vultr 实战体验

试过几家,最后稳定在 Vultr。原因很实际:

我的配置参考

数据机(jp-vps):东京,$12/月,2 vCPU + 2GB,跑数据采集 + Cron 流水线
策略机(trader-vps):$6/月,1 vCPU + 1GB,跑 6 个策略进程 + auto-redeem

上面的链接是推荐链接,注册后你我各获赠金。不影响你的价格。

3首次登录:SSH 安全加固

新机器开好,第一件事不是装环境,是加固 SSH。我第一台 VPS 裸跑了两周,查日志发现每天几千次暴力破解尝试。

3.1 密钥登录 + 禁止密码

# 本地生成密钥(如果没有的话)
ssh-keygen -t ed25519

# 把公钥传到 VPS
ssh-copy-id root@你的IP

# 登录 VPS,改 SSH 配置
sudo vim /etc/ssh/sshd_config

改这三行:

PermitRootLogin prohibit-password
PasswordAuthentication no
PubkeyAuthentication yes
sudo systemctl restart sshd
改完 sshd 后不要关当前终端!先开一个新终端测试能不能用密钥登录。锁在外面就麻烦了。

3.2 fail2ban 防暴力破解

sudo apt install fail2ban -y
sudo systemctl enable fail2ban

默认配置就够用:SSH 失败 5 次自动封 IP 10 分钟。装上后暴力破解日志直接清零。

3.3 UFW 防火墙

sudo ufw allow ssh
sudo ufw enable

如果你跑了 Web 服务(如 API server),再按需开端口:sudo ufw allow 3002。默认拒绝一切入站。

踩坑:Surge/Clash 劫持 SSH

如果你本地用 Surge 或 Clash 做代理,SSH 连接可能被代理拦截(报 Connection closed by 198.18.x.x)。解法:在代理规则里把 VPS IP 设为直连,或者在 ~/.ssh/config 里用 ProxyCommand 绕过。

4环境搭建:Node.js + PM2

4.1 装 Node.js

推荐用 nvm,版本切换方便:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash
source ~/.bashrc
nvm install 22
node -v  # v22.x.x

4.2 PM2 进程管理

PM2 是 Node.js 进程的标配。策略跑在 PM2 里,崩溃自动重启,日志自动管理。

npm install -g pm2

# 启动一个策略
pm2 start dist/strategies/h22b/index.js --name h22b-live

# 常用命令
pm2 list          # 查看所有进程
pm2 logs h22b-live  # 看日志
pm2 restart h22b-live
pm2 stop h22b-live

# 开机自启
pm2 startup
pm2 save

我的实际 PM2 配置

策略机上同时跑着 6 个策略进程 + 1 个 API server + 1 个自动赎回脚本。每个策略一个独立进程,互不影响。用 ecosystem.config.cjs 统一管理:

module.exports = {
  apps: [
    { name: 'h22b-live', script: 'dist/strategies/h22b/index.js' },
    { name: 'h36-momentum', script: 'dist/strategies/h36/index.js' },
    { name: 'h12-weather', script: 'dist/strategies/h12/index.js' },
    // ...
  ]
}

4.3 Cron 定时任务

数据采集靠 Cron。我的数据机上跑着十几个定时任务:

# 编辑 crontab
crontab -e

# 示例:每6小时跑一次数据采集
0 */6 * * * cd /root/projects/polymarket-data && python3 scripts/fetch_markets.py >> logs/fetch.log 2>&1

5代码部署:Git 单向流

这是我踩过最痛的坑之一:永远不要在 VPS 上直接改代码。

铁律:本地改 → 本地 commit → push → VPS pull。
在 VPS 上 git commit/cherry-pick/直接编辑 .ts 文件 = 分支分歧 → pull 冲突 → 花 10 倍时间收拾。没有例外。

运行时配置(.envstate.json)除外,这些只在 VPS 上改。

# 部署流程
# 本地
git push origin main

# VPS
cd /root/prediction-trader
git pull --ff-only
npm run build
pm2 restart all

6多机同步:数据流设计

数据机采集,策略机消费。中间靠 rsync 同步:

# 数据机 cron:每小时推送衍生数据到策略机
0 * * * * rsync -avz /root/projects/polymarket-data/data/derived/ \
  root@策略机IP:/root/prediction-trader/data/derived/

为什么分开?

7监控:别让策略默默挂掉

策略跑在 VPS 上最怕的不是亏钱,是挂了你不知道。我搭了几层监控:

全部用 Bash + Cron + Telegram Bot 实现,零 LLM token 消耗。异常才发消息,正常运行时安静。

8实战踩坑集锦

IP 被封

国内直连海外 VPS,IP 随时可能被 GFW 封。解法:Vultr Snapshot → 开新机器换 IP → 30 分钟全部恢复。关键是提前配好 Snapshot 流程,别等封了再手忙脚乱。

PM2 重启风暴

策略进程如果启动就报错,PM2 会疯狂重启(我见过 800+ 次重启)。用 --max-restarts 10 限制,超过就停下来等人工排查。

时区问题

VPS 默认 UTC,你的 Cron 可能不在预期时间跑。要么 timedatectl set-timezone Asia/Shanghai,要么 Cron 里写 UTC 时间(我选后者,避免歧义)。

磁盘满了

数据采集日积月累,$6 的 VPS 只有 25GB。定期清理 + 只保留最近 N 天的原始数据 + 大文件归档到本地。我写了个 vps_cleanup_raw.sh 每天自动清理已同步的旧数据。

总结

整套系统跑下来,月成本 $18(两台 VPS),换来的是:

不需要 Kubernetes,不需要 Docker(虽然可以加),PM2 + Cron + rsync 就够了。简单的东西跑得最稳。