像专业人士一样部署您的 Next.js 应用:使用 Nginx、PM2、Certbot 和 Git 在 Linux 服务器上的分步指南
你已经用 Next.js 开发了一个很棒的应用,现在想把它部署到 Linux 服务器上。没问题!我会一步步指导你完成部署。
首先,你需要确保你的服务器上安装了 Nginx。
如果未安装,您可以使用几个简单的命令进行安装。安装完成后,您需要为您的应用程序设置一个域名。您可以从域名注册商处购买域名,也可以使用像 Freenom 这样的免费域名提供商。在您的服务器上,您可以通过运行以下命令来安装 nginx:
sudo apt-get update
sudo apt-get install nginx
接下来,使用 Git 将你的 Next.js 应用仓库克隆到服务器。
你可以运行以下命令来完成此操作:
git clone <your_app_repository_url>
在部署应用之前,您需要安装应用所需的所有依赖项并构建应用。
为此,请导航至您的应用程序目录,并通过运行以下命令安装其依赖项:
npm install
安装完依赖项后,运行以下命令构建应用程序:
npm run build
应用程序准备就绪后,您需要设置 PM2。
PM2 是一款进程管理器,可以帮助您的应用在后台持续运行,并在崩溃时自动重启。PM2 安装和使用都很简单,是确保您的应用始终可供用户使用的绝佳方式。要安装 PM2,请运行以下命令:
npm install -g pm2
接下来,运行以下命令,使用 PM2 启动您的应用程序:
pm2 start npm --name "your-app-name" -- start
这将启动您的应用并将其命名为“your-app-name”。如果您的应用崩溃,PM2 将自动重启它。
接下来,您需要设置 Nginx 来代理对您的应用程序的请求。
这听起来可能很复杂,但实际上很简单。你只需要创建一个新的 Nginx 配置文件,粘贴一些代码,然后重启 Nginx 服务。
运行以下命令即可创建一个新的 Nginx 配置文件。
sudo nano /etc/nginx/sites-available/your-app-name.com
将“your-app-name.com”替换为您的域名。在新配置文件中,粘贴以下代码:
server {
listen 80;
server_name your-domain-name.com www.your-domain-name.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
将“your-domain-name.com”替换为您的实际域名。保存配置文件并退出文本编辑器。
接下来,运行以下命令,在 sites-enabled 目录中创建指向配置文件的符号链接:
sudo ln -s /etc/nginx/sites-available/your-app-name.com /etc/nginx/sites-enabled/
最后,运行以下命令重启 Nginx:
sudo systemctl restart nginx
设置好 Nginx 并且你的应用程序准备就绪后,你需要确保你的域名正确指向你的服务器。
以下是如何更新DNS记录的方法:
- 登录到您购买域名的域名注册商网站。
- 查找您域名的 DNS 管理部分。
- 添加一条指向服务器 IP 地址的“A”记录。如果您不确定如何查找服务器的 IP 地址,请参阅服务器提供商的文档。
- 如果您想在域名中使用“www”,您还可以添加一条指向您域名的 CNAME 记录。
- 保存更改,并等待最多 24 小时,让 DNS 更改在互联网上传播。
DNS 更改生效后,您需要设置 Certbot。
这是一个可以帮助您为域名设置 SSL 加密的工具。SSL 加密非常重要,因为它有助于保护用户数据免受窥探。要安装 Certbot,请运行以下命令:
sudo apt-get update
sudo apt-get install certbot python3-certbot-nginx
接下来,运行以下命令生成 SSL 证书:
sudo certbot --nginx -d your-domain-name.com -d www.your-domain-name.com
请将“your-domain-name.com”替换为您的实际域名。按照提示生成您的SSL证书。
更新您的 Nginx 配置文件
SSL证书生成后,您需要更新Nginx配置文件,将HTTP替换为HTTPS。运行以下命令打开Nginx配置文件:
sudo nano /etc/nginx/sites-available/your-app-name.com
将文件内容替换为以下代码:
server {
listen 80;
server_name your-domain-name.com www.your-domain-name.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name your-domain-name.com www.your-domain-name.com;
ssl_certificate /etc/letsencrypt/live/your-domain-name.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain-name.com/privkey.pem;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
将“your-domain-name.com”替换为您的实际域名。保存配置文件并退出文本编辑器。
最后,运行以下命令重启 Nginx:
sudo systemctl restart nginx
最后,您需要测试您的应用,以确保一切运行正常。
现在应该可以通过HTTPS在您的域名上访问您的应用了。请在浏览器中访问您的域名进行测试。
做出改变
每当你对应用进行更改时,请将更改推送到 Git 上的应用仓库。然后,在服务器上,导航到应用目录并运行以下命令来拉取更改:
git pull
接下来,运行以下命令重新构建您的应用程序:
npm run build
最后,使用 PM2 重启您的应用程序,运行以下命令:
pm2 restart your-app-name
您的更改现在应该已在服务器上生效,用户可以在浏览器中使用。
但是等等,使用 CI/CD 自动化可以让这个过程更加顺畅!
与其每次都手动拉取、构建和重启,不如设置一个简单的CI/CD 流水线,在每次推送更新时自动处理这些操作。GitHub Actions、GitLab CI/CD 或 Jenkins等工具可以帮你在服务器上运行构建和部署命令。虽然需要一些设置,但一旦完成,你的应用更新就会在每次提交后立即生效。
就这样!
您现在已在自己的 Linux 服务器上部署了一个完整的 Next.js 应用程序,它具备PM2 进程管理、Nginx 代理、SSL,甚至还可以选择自动部署。
像专业人士一样,不断构建、不断学习、不断部署。
快乐编程🧑🏽💻
文章来源:https://dev.to/j3rry320/deploy-your-nextjs-app-like-a-pro-a-step-by-step-guide-using-nginx-pm2-certbot-and-git-on-your-linux-server-3286

