为什么每位开发者至少应该在 VPS 上部署一次

发布: (2025年12月25日 GMT+8 18:46)
12 分钟阅读
原文: Dev.to

Source: Dev.to

为什么每位开发者都应该至少在 VPS 上部署一次

在当今的云原生时代,很多人直接把应用部署到 Heroku、Vercel、Netlify 或者 AWS Lambda 之类的“无服务器”平台上。虽然这些平台极大地简化了部署流程,但它们也把很多底层细节隐藏了起来。本文将阐述为什么每位开发者至少应该亲自把项目部署到一台 VPS(Virtual Private Server) 上一次,以此获得更深层次的理解和实战经验。

1. 深入了解 Linux 与系统管理

  • 命令行操作:在 VPS 上,你必须使用 SSH 登录,熟悉 bashvimtmux 等工具。
  • 软件包管理:学习使用 apt, yum, pacman 等包管理器来安装、更新和删除软件。
  • 用户与权限:创建普通用户、配置 sudo、设置文件权限(chmodchown),防止以 root 身份运行服务。

这些技能在日常开发中并不常用,却是排查生产环境问题的基石。

2. 掌握网络基础

  • 端口与防火墙:配置 ufwfirewalldiptables,打开必要端口(如 80、443、3000),关闭不需要的端口。
  • 域名解析:在 DNS 提供商处添加 A 记录或 CNAME,将域名指向 VPS 的公网 IP。
  • SSL/TLS:使用 Let’s Encryptcertbot 自动获取并续期证书,了解 HTTPS 的工作原理。

通过这些操作,你会对 TCP/IPTLS 握手 等概念有更直观的认识。

3. 学会部署真实的生产环境

  • 进程管理:使用 systemdpm2(Node.js)或 supervisord 来守护进程,确保服务崩溃后自动重启。
  • 反向代理:配置 NginxCaddy 进行负载均衡、静态文件缓存以及 SSL 终端。
  • 日志与监控:收集 journalctlnginxapp 日志,或部署 Prometheus + Grafana 进行实时监控。

这些都是在托管平台上往往被“一键完成”的步骤,但亲手搭建能帮助你理解每个环节的作用。

4. 成本与资源的真实感受

  • 按需付费:大多数 VPS(如 DigitalOcean、Linode、Vultr)提供 $5–$10/月 的入门套餐,配有 1 CPU、1 GB RAM、25 GB SSD。
  • 资源限制:你会直接感受到 CPU、内存、磁盘 I/O 的瓶颈,从而学会进行性能调优(如缓存、压缩、连接池)。
  • 预算控制:相比于“无限制”的平台套餐,VPS 让你对每一分钱的花费都有清晰的认知。

这种成本意识在后期迁移到更大规模的云服务时尤为重要。

5. 避免供应商锁定

  • 可移植性:在 VPS 上使用 Docker、docker‑compose 或者直接的二进制文件部署,意味着你可以把同样的镜像搬到其他服务器或云提供商。
  • 配置即代码:将所有部署步骤写进 Ansible、TerraformGitHub Actions 工作流,形成可重复、可审计的部署管道。

当你需要切换供应商或自行托管时,这些经验会让迁移过程顺畅许多。

6. 实战案例:把一个 Node.js + PostgreSQL 项目部署到 VPS

下面给出一个简化的步骤概览(不包括完整代码):

  1. 准备服务器

    ssh root@your-vps-ip
    adduser devuser
    usermod -aG sudo devuser
  2. 安装依赖

    sudo apt update && sudo apt install -y nginx postgresql nodejs npm
  3. 设置数据库

    sudo -u postgres createuser -s devuser
    sudo -u postgres createdb myapp
  4. 克隆代码并安装

    sudo -u devuser git clone https://github.com/your/repo.git /home/devuser/app
    cd /home/devuser/app
    npm install --production
  5. 创建 systemd 服务

    # /etc/systemd/system/myapp.service
    [Unit]
    Description=My Node.js App
    After=network.target
    
    [Service]
    User=devuser
    WorkingDirectory=/home/devuser/app
    ExecStart=/usr/bin/node index.js
    Restart=on-failure
    Environment=NODE_ENV=production
    
    [Install]
    WantedBy=multi-user.target
    sudo systemctl daemon-reload
    sudo systemctl enable --now myapp
  6. 配置 Nginx 反向代理

    # /etc/nginx/sites-available/myapp
    server {
        listen 80;
        server_name example.com;
    
        location / {
            proxy_pass http://127.0.0.1:3000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
    sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
    sudo nginx -t && sudo systemctl reload nginx
  7. 获取 SSL 证书

    sudo apt install -y certbot python3-certbot-nginx
    sudo certbot --nginx -d example.com

完成后,你的应用已经在真实的服务器上对外提供服务,所有的网络、进程、日志、监控都在你的掌控之中。

7. 小结

  • VPS 是学习底层系统、网络和部署流程的最佳练手平台。
  • 通过亲手配置 Linux、Nginx、systemd、SSL,你会对云原生工具的抽象层有更深的理解。
  • 这段经历不仅提升个人技术栈,还能在面试、团队内部分享或项目迁移时提供有力的实战案例。

行动建议:挑选一家提供 1 GB RAM、1 CPU 的低价 VPS(如 DigitalOcean 的 $5/月),挑一个你最近完成的项目,按照上面的步骤全程部署一次。完成后,你会发现自己对“部署”这件事有了全新的认识。祝你玩得开心!

Context

几个月前,我构建了一个全栈 Web 应用(Wealthwise),并想将其部署,让其他人可以使用。我熟悉 Vercel 和 GitHub Pages 等平台,它们可以非常轻松地部署静态网站。

但部署全栈应用(frontend + backend + database)则是另一回事。

由于我在工作中接触过 VPS 部署,我决定租用一台 VPS 并尝试自行部署所有内容。回想起来,这是我做过的最佳决定之一。它帮助我了解了许多仅在本地编码无法学到的软件开发方面的内容,例如:

  • 基础设施
  • 网络
  • 安全基础
  • 反向代理
  • SSL 证书
  • 系统管理

这段经历让我意识到:每位开发者至少应该在 VPS 上部署一次。

通过在 VPS 上部署你将学到的内容

1. 调研与选择 VPS 提供商

你将学会如何比较:

  • 价格与性价比
  • CPU、内存和存储配置
  • 带宽限制与流量政策
  • 数据中心位置及其对延迟的影响
  • 供应商声誉与技术支持

这些经验可以直接转化为以后(为创业公司或雇主)做出专业决策的能力。

2. 选取合适的规格

你将学会:

  • 估算流量和负载需求
  • 根据使用场景选择 CPU/内存/存储
  • 从最小规格起步并进行垂直扩展
  • 理解共享 CPU 与独占 CPU 等取舍

这有助于培养成本意识和生产环境思维。

3. 购买与管理域名

你将掌握的技能:

  • 找到可靠的域名注册商
  • 在不同顶级域(.dev、.tech、.com、.in、.xyz 等)之间做决定
  • 在品牌形象与价格之间取得平衡(例如 .gg 看起来很酷,但价格较高)

4. DNS 配置

通过配置域名,你将学习:

  • DNS 记录(A、CNAME 等)
  • 将域名指向 VPS IP

设置子域名,例如:

  • api.mydomain.com
  • app.mydomain.com
  • portfolio.mydomain.com

理解 TTL 值及解析传播时间是网络基础知识。

5. SSH 与文件传输

必备的 DevOps 技能:

  • 使用 SSH 连接服务器
  • 使用 SSH 密钥代替密码
  • 使用 scprsyncsftp 复制文件
  • 加固登录配置

这些技能在真实生产环境中每天都会用到。

6. VPS 安全加固

在部署任何东西之前,你通常会:

  • 更新并修补系统软件包
  • 安装防火墙(UFWiptables
  • 安装并配置 fail2ban
  • 避免以 root 身份运行应用
  • 设置基本的备份流程

7. 搭建反向代理与 HTTPS

真实的部署流程包括:

  • 安装 Nginx 作为反向代理
  • 将请求路由到不同的服务

通过以下方式启用 HTTPS:

  • Certbot
  • Let’s Encrypt SSL 证书

8. 安装数据库与应用依赖

根据你的应用,你可能会:

  • 安装并配置 PostgreSQL、MySQL、MongoDB 或 Redis
  • 使用 Docker 或 Docker Compose 运行服务
  • 管理环境变量

9. 日志、监控与故障排除

你最终会遇到故障——这其实是好事。你将学会:

  • 阅读 Nginx 与应用日志
  • 使用 systemctl 检查系统状态
  • top / htop 查看资源使用情况
  • journalctl 调试问题

你将培养的额外技能

  • CI/CD 流水线基础
  • 处理机密信息和环境变量
  • 性能优化
  • 可扩展性规划
  • 成本管理
  • 像工程师一样思考,而不仅仅是程序员

结论

在 VPS 上部署不仅仅是托管你的项目,更是一次学习的机会:

  • DevOps 基础
  • 部署架构
  • 实际调试
  • 安全基础
  • 生产责任

即使只做一次,这段学习曲线也会显著提升你的工程成熟度。因此,无论你是初学者还是有经验的开发者,我强烈建议在 VPS 上部署至少一个个人项目。通过这次经历,你会变得更有信心、更有技能,并更好地应对真实世界的工程挑战。

注意

您也可以使用诸如 AWS、Google Cloud、Azure 或 Oracle Cloud 等云服务提供商,它们中的许多都提供用于运行虚拟机的免费额度。本文中的大多数想法同样适用于这些平台。

  • 仅在预算允许的情况下购买 VPS。
  • 在某些情况下,托管式托管提供商(Vercel、Netlify、GitHub Pages 等)仍然更好:
    • 部署一个简单的静态站点
    • 当您已经了解部署并希望通过托管服务节省时间时

然而,如果您在学习,至少手动操作一次是值得的。

已使用 AI 工具审阅语法和清晰度。所有想法和内容均基于我的个人经验。

Back to Blog

相关文章

阅读更多 »