从网络环境到 24/7 策略运行 — 不是翻墙教程,是 AI builder 的实战工作流
如果你只是写代码、用 ChatGPT,大概率不需要 VPS。但一旦涉及这些场景,VPS 就是刚需:
我目前的架构是两台 VPS + 本地 Mac:一台跑数据采集(东京节点,离 Polygon RPC 近),一台跑策略执行。这篇分享从零搭建的完整路径。
试过几家,最后稳定在 Vultr。原因很实际:
我的配置参考
数据机(jp-vps):东京,$12/月,2 vCPU + 2GB,跑数据采集 + Cron 流水线
策略机(trader-vps):$6/月,1 vCPU + 1GB,跑 6 个策略进程 + auto-redeem
上面的链接是推荐链接,注册后你我各获赠金。不影响你的价格。
新机器开好,第一件事不是装环境,是加固 SSH。我第一台 VPS 裸跑了两周,查日志发现每天几千次暴力破解尝试。
# 本地生成密钥(如果没有的话) 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
sudo apt install fail2ban -y sudo systemctl enable fail2ban
默认配置就够用:SSH 失败 5 次自动封 IP 10 分钟。装上后暴力破解日志直接清零。
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 绕过。
推荐用 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
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' },
// ...
]
}
数据采集靠 Cron。我的数据机上跑着十几个定时任务:
# 编辑 crontab crontab -e # 示例:每6小时跑一次数据采集 0 */6 * * * cd /root/projects/polymarket-data && python3 scripts/fetch_markets.py >> logs/fetch.log 2>&1
这是我踩过最痛的坑之一:永远不要在 VPS 上直接改代码。
运行时配置(.env、state.json)除外,这些只在 VPS 上改。
# 部署流程 # 本地 git push origin main # VPS cd /root/prediction-trader git pull --ff-only npm run build pm2 restart all
数据机采集,策略机消费。中间靠 rsync 同步:
# 数据机 cron:每小时推送衍生数据到策略机 0 * * * * rsync -avz /root/projects/polymarket-data/data/derived/ \ root@策略机IP:/root/prediction-trader/data/derived/
为什么分开?
策略跑在 VPS 上最怕的不是亏钱,是挂了你不知道。我搭了几层监控:
全部用 Bash + Cron + Telegram Bot 实现,零 LLM token 消耗。异常才发消息,正常运行时安静。
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 就够了。简单的东西跑得最稳。