怎么用 Github Actions 部署 Next.js 项目到服务器

怎么用 Github Actions 部署 Next.js 项目到服务器

💡 原文中文,约2800字,阅读约需7分钟。
📝

内容提要

分享使用Github Actions部署Next.js项目到Linux服务器的方法,配置服务器环境,安装Node.js、PM2和Nginx,配置Nginx反向代理到3000端口,生成SSL证书并配置Nginx使用证书,生成SSH密钥并配置Github Actions连接服务器拉取代码,配置Github Actions触发条件和部署脚本,自动部署项目到服务器上。

🔎

延伸解读

为何选择自建服务器部署

文章提到,作者因 Vercel 在国内访问速度和稳定性不佳,转而将 Next.js 项目部署到自己的 Linux 服务器。这反映出对国内访问体验有要求的场景下,自建服务器可能更可控。但需注意,自建部署也意味着需要自行维护服务器环境、SSL 证书和进程管理,适合有一定运维基础的开发者。

关键组件与配置要点

部署流程涉及多个组件:用 fnm 安装 Node.js 18,用 PM2 管理进程并实现开机自启,用 Nginx 反向代理到 3000 端口,再用 certbot 生成 SSL 证书并自动修改 Nginx 配置。这些步骤环环相扣,任一环节配置错误都可能导致部署失败,建议按顺序逐一验证。

SSH 密钥的双重用途与安全实践

文章使用了两对 SSH 密钥:一对用于 GitHub Actions 连接服务器拉取代码,另一对用于服务器从 GitHub 拉取代码。私钥和服务器信息均通过 GitHub Secrets 管理,避免暴露在配置文件中。这种分离设计提升了安全性,但需注意密钥权限和存储位置,防止泄露。

自动化部署的触发与执行逻辑

GitHub Actions 配置为在 push 到 main 分支时触发,通过 appleboy/ssh-action 连接服务器,执行 git clone、npm install 和 pm2 start 等命令。但脚本中每次都是全新 clone,若目录已存在会报错,实际使用时可能需要调整为先拉取或清理目录。此外,pm2 save 确保重启后项目自动运行。

❓

Q&A

如何在服务器上安装 Node.js 和 PM2?

可以使用 fnm 安装 Node.js,命令为 'fnm install 18',然后用 npm 安装 PM2,命令为 'npm install pm2 -g'。

如何配置 Nginx 反向代理到 Next.js 项目?

在 Nginx 配置文件中设置 'proxy_pass http://localhost:3000;',并创建软链接到 sites-enabled 文件夹。

如何生成 SSL 证书并配置 Nginx 使用?

使用 certbot 生成证书,命令为 'sudo certbot --nginx',并按照提示输入邮箱和选择域名。

如何配置 Github Actions 以自动部署项目?

在仓库中创建 .github/workflows 文件夹,并添加 .yml 文件,设置触发条件为 push 到 main 分支,使用 appleboy/ssh-action 连接服务器。

如何生成 SSH 密钥并配置 Github 连接?

生成 SSH 密钥后,将公钥添加到 Github 仓库的 Deploy keys 中,私钥放在服务器的 ~/.ssh/id_rsa 路径。

使用 PM2 启动项目后如何保存配置?

使用命令 'pm2 save' 来保存项目配置,以便在服务器重启后自动启动项目。

🏷️

标签

➡️

继续阅读