跳转到主要内容

WRITING

一个人的全栈基础设施

2026年4月8日3 分钟阅读曾田力
独立开发DevOpsVPS自动化
一个人的全栈基础设施

为什么不用 PaaS

Vercel、Railway、Render 这些平台确实方便,但有几个问题:

  1. 成本不可控:流量突增时账单会吓人
  2. 厂商锁定:迁移成本随时间指数增长
  3. 灵活性不足:想跑个 cron job 或 websocket 都有限制
  4. 学习深度不够:对底层一无所知,出问题时无从排查

一台 VPS($30/月)就能跑所有服务,完全自主可控。

架构全景

架构全景:Cloudflare 边缘经 8443 端口回源到 Nginx 单一入口,再按子域名分发到 systemd、Docker 与静态文件三类后端
全部流量先过 Cloudflare 边缘(DNS/CDN/Access),经 8443 回源进 Nginx 单一入口,再按子域名分发给 24 个 systemd 服务、4 个 Docker 容器和静态文件——一台 $30/月 的 VPS 撑起整个生产环境。

网络层

  • Cloudflare:DNS 解析 + CDN 缓存 + DDoS 防护
  • CF Access:Zero Trust 认证(邮箱验证码),替代自建认证
  • Origin Rule:所有流量通过 CF 代理,回源到 VPS 的 8443 端口

Nginx

单一入口,按子域名路由到不同后端:

server {
    server_name tianli.cyou;
    location / { proxy_pass http://127.0.0.1:3000; }
}
server {
    server_name dashboard.tianli.cyou;
    location / { proxy_pass http://127.0.0.1:3001; }
}
# ... 更多子域名

服务管理

所有服务用 systemd 管理:

# 查看所有服务状态
systemctl list-units --type=service --state=running | grep -E "website|dashboard|hydro"

# 部署新版本
cd /var/www/website && bash deploy.sh
# deploy.sh 自动: git pull → build → restart

自动化

自动化流水线:deploy.sh 四步部署,加上 health_check、公开状态页、briefing 晨报邮件组成的监控闭环
部署是每个项目结构一致的 deploy.sh 四步;上线后的服务由 health_check 定期探测、状态页对外公开、briefing 每天早上邮件摘要——从发布到监控,一个人也能全程无人值守。

部署

每个项目标配 deploy.sh

git pull origin main
pnpm install --frozen-lockfile
pnpm build
sudo systemctl restart website

监控

  • health_check.py:定期检查所有服务的 HTTP 响应
  • status.tianli.cyou:公开状态页
  • briefing 系统:每天早上邮件推送系统状态摘要

DNS 管理

# 列出所有 DNS 记录
python3 ~/Dev/tools/dev/lib/tools/cloud/cf_api.py dns list

# 添加新子域名
python3 ~/Dev/tools/dev/lib/tools/cloud/cf_api.py dns add hydro-new A 104.218.100.67

成本

项目月费
VPS (PureVoltage 4C/8G)$30
域名 (tianli.cyou)~$1
Cloudflare$0 (Free plan)
合计~$31/月
月成本对比:自建 VPS 每个服务月均约 1.3 美元,PaaS 平台单服务入门定价是它的 4 到 15 倍
$31/月(VPS $30 + 域名 $1 + Cloudflare $0)摊到 24 个服务,每个服务月均只要 $1.3;同样一个服务放到 PaaS 上,入门档定价就是它的 415 倍。

$31/月跑 24 个服务,每个服务月均 $1.3。任何 PaaS 平台都做不到这个成本。

经验

  1. systemd 是最好的进程管理器——不需要 PM2、supervisor 等额外工具
  2. Cloudflare Free 够用——CDN、DDoS 防护、SSL、Access 全免费
  3. 标准化部署脚本——每个项目的 deploy.sh 结构一致,降低心智负担
  4. 不要过度容器化——简单的 Node.js/Python 应用直接 systemd 就行,Docker 留给真正需要隔离的场景

订阅

新文章都先发在这里。用 RSS 订阅: /feed.xml

作者

曾田力

水利工程师。在这里写 AI 方法论、投资日复盘和工程实践。

这篇写错了、写漏了,或者你有别的想法?