内容提要
分享使用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' 来保存项目配置,以便在服务器重启后自动启动项目。