在公司加班到晚上九点,产品经理突然发来消息:新功能得明天上线。你坐在工位上,咖啡凉了半杯,心里知道本地测试没问题不代表线上就能跑起来。这时候,远程服务器部署就成了绕不开的一环。
为什么非得远程部署?
很多人一开始都在自己电脑上开发,页面一刷新就看到效果。可真要让别人访问,就得把程序放到公网能访问的机器上。这台机器通常不在办公室,而在机房甚至国外,只能通过网络连接操作——这就是远程服务器。
比如你做个企业官网,客户不可能跑到你电脑前看效果。把代码传到阿里云或腾讯云的服务器上,别人输入网址就能打开,这才是真正的“上线”。
最常用的工具:SSH 和 SCP
连远程服务器,最基础的方式是 SSH。它像一把钥匙,让你安全地登录到另一台电脑。假设你的服务器 IP 是 49.234.100.88,用户名是 ubuntu,命令就是:
ssh ubuntu@49.234.100.88
第一次连接会提示确认指纹,输入 yes 再输密码就行。为了省去每次输密码的麻烦,可以配置公钥免密登录。
传文件用 SCP,比如要把本地的 index.html 传到服务器的 /var/www/html 目录:
scp index.html ubuntu@49.234.100.88:/var/www/html/
文件一放进去,网页内容立马更新,比重新打包上传快多了。
自动化部署小技巧
每次都手动传文件太累,尤其是前后端分离项目。前端 build 出一堆静态文件,后端还要重启服务。写个简单的脚本就能解决:
#!/bin/bash
npm run build
scp -r dist/* ubuntu@49.234.100.88:/var/www/myapp/
ssh ubuntu@49.234.100.88 "systemctl restart nginx"
这个脚本先打包,再同步文件,最后远程重启 Nginx。一行命令完成部署,省下十分钟喝杯茶都不迟。
别忘了权限和路径问题
新手常遇到的问题是文件传上去了,但网页打不开。多半是权限不对。Linux 系统对 /var/www 这类目录有严格限制。如果看到 403 错误,检查一下:
chmod -R 755 /var/www/myapp
chown -R www-data:www-data /var/www/myapp
前者放开读写执行权限,后者把归属改成 Web 服务常用用户。改完基本就能正常访问了。
用 PM2 管理 Node.js 应用
如果你跑的是 Node.js 服务,直接 node app.js 有个大问题:窗口一关,服务就停了。PM2 能让它在后台持续运行。
先在服务器安装:
npm install -g pm2
然后启动你的应用:
pm2 start app.js --name "my-api"
以后可以用 pm2 logs 查日志,pm2 restart 重启,完全不用盯着终端。
部署不是一次性的活
上线只是开始。过两天发现 bug 得热更新,加需求得迭代版本。把部署流程理顺,比写新功能还重要。一个按错键就崩的系统,用户体验再好也白搭。
有些团队用 GitHub Actions 或 Jenkins 做自动部署,代码一合并,服务器自动拉取最新版。这种流程刚开始搭有点费劲,但长期来看,少掉的头发都值了。