将GitHub项目部署到宝塔面板,主要有两种自动化程度较高的方法:一种是利用GitHub Actions在代码推送后自动构建并部署到服务器;另一种是使用宝塔的WebHook插件,当GitHub仓库更新时,通知服务器自动拉取最新代码。这两种方案的流程对比如下:
flowchart TD
A[GitHub代码仓库] --> B{选择部署方式}
B --> C[GitHub Actions自动部署]
B --> D[宝塔WebHook自动同步]
subgraph C [方案一:GitHub Actions]
C1[推送代码到GitHub] --> C2[GitHub Actions<br>自动构建项目]
C2 --> C3[通过SSH/SCP<br>传输文件至宝塔]
C3 --> C4[部署成功]
end
subgraph D [方案二:宝塔WebHook]
D1[推送代码到GitHub] --> D2[GitHub触发WebHook]
D2 --> D3[宝塔服务器<br>自动拉取并更新代码]
D3 --> D4[部署成功]
end
C4 --> E[在宝塔面板配置网站]
D4 --> E
下面为您详细说明这两种方案的配置步骤。
🔧 方案一:通过GitHub Actions自动部署
这种方法适合需要在部署前进行构建(例如Vue、React项目)的场景。它的核心是当您向GitHub推送代码后,由GitHub Actions自动完成构建,并将产物传输到您的宝塔服务器。
- 生成SSH密钥对:在您的服务器上执行 ssh-keygen -t rsa -b 4096 -C "your_email@example.com" 生成密钥对。这将创建一对文件:私钥(如 github_actions_rsa)和公钥(如 github_actions_rsa.pub)。
- 配置服务器与宝塔
◦ 添加公钥:将生成的公钥内容添加到服务器的 ~/.ssh/authorized_keys 文件中,并设置正确的权限(chmod 700 ~/.ssh 和 chmod 600 ~/.ssh/authorized_keys)。
◦ 创建网站:在宝塔面板的“网站”模块中创建一个新站点,并记下其根目录(如 /www/wwwroot/your_site)。
- 配置GitHub仓库
◦ 进入仓库的 Settings > Secrets and variables > Actions 页面。
◦ 添加以下机密变量(Secrets):
▪ SSH_HOST: 你的服务器IP地址。
▪ SSH_USERNAME: SSH登录用户名(如 root)。
▪ SSH_PRIVATE_KEY: 第一步生成的私钥的完整内容。
▪ DEPLOY_DIR: 宝塔网站的根目录路径。
- 创建GitHub Actions工作流文件
◦ 在您的项目根目录下创建 .github/workflows/deploy.yml 文件。
◦ 文件内容主要步骤包括:检出代码、设置Node.js环境、安装依赖、构建项目、通过SCP将构建产物(如 dist 目录)传输到服务器,以及通过SSH在服务器上执行解压和重启Nginx等命令。
⚓ 方案二:通过宝塔WebHook自动同步
这种方法更为轻量,适合无需构建过程的静态站点(如Hexo博客)或直接在服务器上构建的项目。它的原理是当代码推送后,GitHub通知宝塔服务器,服务器自动拉取最新代码。
- 在宝塔面板安装WebHook插件:在宝塔的“软件商店”中搜索并安装 WebHook 插件。
- 配置服务器SSH密钥并添加到GitHub
◦ 在宝塔面板的终端中生成SSH密钥对(命令同方案一)。
◦ 将生成的公钥内容添加到您的GitHub账户的 SSH and GPG keys 设置中。
- 拉取项目代码:在宝塔面板的终端中,进入目标网站根目录,使用 git clone 命令克隆您的项目。
- 添加WebHook脚本
◦ 打开宝塔的WebHook插件,点击“添加Hook”。
◦ 在“执行脚本”中,填入一个脚本,其核心是进入网站目录并执行 git pull 命令拉取最新代码。根据需要,您还可以在脚本中加入安装依赖(npm install)和构建(npm run build)等指令。
◦ 保存后,会生成一个WebHook URL,请复制它。
- 在GitHub仓库中设置WebHook
◦ 进入GitHub仓库的 Settings > Webhooks 页面。
◦ 点击“Add webhook”,将上一步复制的URL粘贴到 “Payload URL” 中。
◦ “Content type” 选择 application/json。
💡 关键注意事项与建议
• 权限问题:确保宝塔面板的网站目录所有者是 www 用户,并且具有正确的读写权限,否则可能导致部署失败。可以通过宝塔面板的文件管理器修改目录权限。
• Nginx配置:对于Vue或React等使用History模式路由的单页应用,需要在宝塔的网站设置中配置伪静态规则,添加 try_files $uri $uri/ /index.html; 以确保路由正常。
• 选择建议:如果您的项目需要复杂的构建过程(如Vue/React项目),方案一(GitHub Actions) 更强大和灵活。如果您的项目是静态文件或直接在服务器上构建更简单(如Hexo博客),方案二(宝塔WebHook) 更轻便快捷。
• 安全提醒:妥善保管SSH私钥等敏感信息,切勿泄露或直接提交到代码仓库。
希望这份详细的指南能帮助您顺利完成部署!如果您在具体操作中遇到问题,例如构建失败或文件权限错误,可以告诉我您遇到的具体提示,我会尽力帮您分析。