项目部署前的准备工作
在把项目推到服务器之前,先把本地环境理清楚。比如你写了个基于 Node.js 的博客系统,开发时用 localhost:3000 跑得好好的,但线上能不能访问,取决于配置是否到位。先确认项目依赖都写进了 package.json,避免上线后因为少装一个包直接报错。
还有就是环境变量的问题。开发时数据库地址可能是本地的 127.0.0.1,但生产环境得换成远程数据库或 Docker 容器地址。把这些配置抽出来放在 .env 文件里,别硬编码在代码中,方便切换。
打包与构建
前端项目尤其需要注意这一步。React、Vue 这类框架开发时用的是热重载服务器,但上线必须走构建流程。执行 npm run build 后会生成一个 dist 或 build 目录,里面是压缩后的静态文件。
npm run build
# 输出结果一般类似:
# Compiled successfully!
# File sizes after gzip:
# 45.2 KB build/static/js/main.1a2b3c.js
后端项目如果是 Go 或 Java,可能需要编译成可执行文件。Go 可以直接打包成二进制:
GOOS=linux GOARCH=amd64 go build -o server main.go
这样生成的 server 文件才能在 Linux 服务器上运行。
选择部署方式
小项目可以直接扔到 Nginx 静态目录下。比如你做的个人简历页,扔进 /var/www/html,重启 Nginx 就能访问。配置文件长这样:
server {
listen 80;
server_name example.com;
root /var/www/html/dist;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
如果是前后端分离,前端仍由 Nginx 托管,后端 API 则用 PM2 或 systemd 管着。PM2 适合 Node.js 项目,启动后能自动监听崩溃并重启。
pm2 start app.js --name "my-api"
Java 项目常用 jar 包部署,配合 nohup 后台运行:
nohup java -jar myapp.jar --spring.profiles.active=prod > app.log 2>&1 &
域名与反向代理
买好域名后,在 DNS 服务商那把 A 记录指向你的服务器 IP。然后在服务器上配 Nginx 反向代理,把请求转发给后端服务。
比如你的 API 跑在 3001 端口,但不想让用户访问 example.com:3001,就可以用 Nginx 拦下来:
location /api {
proxy_pass http://localhost:3001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
这样用户访问 example.com/api/login,实际请求会打到本地 3001 端口的服务上。
HTTPS 加密不能少
现在浏览器对非 HTTPS 站点标“不安全”,影响体验。可以用 Let's Encrypt 免费申请证书,配合 Certbot 自动配置。
sudo certbot --nginx -d example.com
运行完之后,Nginx 会自动加上 SSL 配置,HTTP 请求也会被重定向到 HTTPS。证书每 90 天要续一次,可以加个定时任务自动处理:
0 0 */5 * * /usr/bin/certbot renew --quiet
日志与监控
项目跑起来不代表万事大吉。某天突然打不开,得知道哪里出问题。Nginx 的访问日志和错误日志默认在 /var/log/nginx/ 下,查 502 错误基本靠它。
后端服务如果用了 PM2,可以通过命令查看实时输出:
pm2 logs my-api
也可以把日志接入 ELK 或简单点用 tee 写入文件,方便排查。
偶尔跑个健康检查脚本,比如用 curl 请求关键接口,状态码不对就发邮件提醒,比等用户反馈快得多。