为什么每位开发者至少应该在 VPS 上部署一次
Source: Dev.to
为什么每位开发者都应该至少在 VPS 上部署一次
在当今的云原生时代,很多人直接把应用部署到 Heroku、Vercel、Netlify 或者 AWS Lambda 之类的“无服务器”平台上。虽然这些平台极大地简化了部署流程,但它们也把很多底层细节隐藏了起来。本文将阐述为什么每位开发者至少应该亲自把项目部署到一台 VPS(Virtual Private Server) 上一次,以此获得更深层次的理解和实战经验。
1. 深入了解 Linux 与系统管理
- 命令行操作:在 VPS 上,你必须使用 SSH 登录,熟悉
bash、vim、tmux等工具。 - 软件包管理:学习使用
apt,yum,pacman等包管理器来安装、更新和删除软件。 - 用户与权限:创建普通用户、配置
sudo、设置文件权限(chmod、chown),防止以 root 身份运行服务。
这些技能在日常开发中并不常用,却是排查生产环境问题的基石。
2. 掌握网络基础
- 端口与防火墙:配置
ufw、firewalld或iptables,打开必要端口(如 80、443、3000),关闭不需要的端口。 - 域名解析:在 DNS 提供商处添加 A 记录或 CNAME,将域名指向 VPS 的公网 IP。
- SSL/TLS:使用 Let’s Encrypt 的
certbot自动获取并续期证书,了解 HTTPS 的工作原理。
通过这些操作,你会对 TCP/IP、TLS 握手 等概念有更直观的认识。
3. 学会部署真实的生产环境
- 进程管理:使用
systemd、pm2(Node.js)或supervisord来守护进程,确保服务崩溃后自动重启。 - 反向代理:配置 Nginx 或 Caddy 进行负载均衡、静态文件缓存以及 SSL 终端。
- 日志与监控:收集
journalctl、nginx、app日志,或部署 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、Terraform 或 GitHub Actions 工作流,形成可重复、可审计的部署管道。
当你需要切换供应商或自行托管时,这些经验会让迁移过程顺畅许多。
6. 实战案例:把一个 Node.js + PostgreSQL 项目部署到 VPS
下面给出一个简化的步骤概览(不包括完整代码):
-
准备服务器
ssh root@your-vps-ip adduser devuser usermod -aG sudo devuser -
安装依赖
sudo apt update && sudo apt install -y nginx postgresql nodejs npm -
设置数据库
sudo -u postgres createuser -s devuser sudo -u postgres createdb myapp -
克隆代码并安装
sudo -u devuser git clone https://github.com/your/repo.git /home/devuser/app cd /home/devuser/app npm install --production -
创建 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.targetsudo systemctl daemon-reload sudo systemctl enable --now myapp -
配置 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 -
获取 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.comapp.mydomain.comportfolio.mydomain.com
理解 TTL 值及解析传播时间是网络基础知识。
5. SSH 与文件传输
必备的 DevOps 技能:
- 使用 SSH 连接服务器
- 使用 SSH 密钥代替密码
- 使用
scp、rsync或sftp复制文件 - 加固登录配置
这些技能在真实生产环境中每天都会用到。
6. VPS 安全加固
在部署任何东西之前,你通常会:
- 更新并修补系统软件包
- 安装防火墙(
UFW或iptables) - 安装并配置
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 工具审阅语法和清晰度。所有想法和内容均基于我的个人经验。