摆脱Vecel,在Debian服务器上部署Next.js项目
RackNerd是一家提供vps和独立服务器的商家。在双十一时候,其实也是国外的黑五时节,会推出一些低价VPS,我眼馋了购买了一台,正好有个代码需要部署,写一下。

安装软件包
更新软件包列表:
sudo apt update
安装Nginx、npm、以及其他SSH相关包:
sudo apt install nginx npm certbot python3-certbot-nginx
创建或拉取一个Next.js应用
如果有Next.js应用,克隆即可。如果没有,可创建一个示例来完成下述操作:
npx create-next-app@latest my-app
之后构建项目:cd my-app && npm run build 成功后,用pm2运行程序:
pm2 start npm --name "my-app" -- start
大致你会得到:

这样Next.js项目就已经借助pm2来运行起来了。
配置Nginx
新建文件/etc/nginx/sites-available/my-app(my-app可以更换为自己的项目名称),然后新增:
server {
server_name my-app.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
然后,链接一下配置文件:
sudo ln -s /etc/nginx/sites-available/my-app /etc/nginx/sites-enabled/
然后重新启动Nginx以使其生效:
sudo systemctl restart nginx
测试
通过外部浏览器访问<ip>,看看能不能访问成功。有问题的话看看是不是防火墙端口没有放开。
为域名配置SSL
域名购买后,在域名管理页面把域名与服务器IP绑定,然后进行下方操作:
sudo certbot --nginx -d my-app.com -d www.my-app.com
把上方的my-app.com 和www.my-app.com替换成你自己的域名。certbot会自动给你修改nginx的配置文件,添加SSL配置。
更新nginx:
sudo nginx -t
sudo systemctl reload nginx
后续
代码更新怎么办?
git pull
npm run build
pm2 restart <app_name>