Github自动部署hexo至云服务器
前言
作为一个技术博主,我一直在寻找更高效的博客发布流程。最近我成功配置了GitHub Actions自动部署Hexo博客到云服务器的工作流,彻底解放了我的双手!只需要将博客内容推送到GitHub仓库,剩下的部署工作全部自动完成。在本文中,我将分享详细的配置过程、遇到的问题以及解决方案,希望能帮助到有同样需求的朋友。
一、基本原理
整个自动部署流程基于GitHub Actions和ssh-deploy插件实现。当我们将新的博客内容推送到GitHub仓库后,GitHub Actions会自动执行预设的工作流:
- 检出代码仓库
- 设置Node.js环境
- 安装Hexo依赖
- 生成静态博客文件
- 通过SSH将生成的文件推送到云服务器
整个过程完全自动化,无需任何人工干预。
二、环境准备
2.1 需要的组件
- GitHub账号和存放Hexo博客的仓库
- 云服务器(本文以腾讯云为例)
- 已安装Hexo博客框架的项目
2.2 生成SSH密钥对
首先,我们需要生成一对SSH密钥用于GitHub Actions与云服务器之间的安全通信:
# 在本地计算机上执行 |
这个命令会生成两个文件:
~/.ssh/github_deploy_key
(私钥)~/.ssh/github_deploy_key.pub
(公钥)
💡 注意:不要为私钥设置密码,因为在自动部署过程中无法输入密码。
三、配置GitHub仓库
3.1 添加Secrets
在GitHub仓库中添加必要的密钥信息:
- 进入GitHub仓库页面,点击”Settings” > “Secrets and variables” > “Actions”
- 点击”New repository secret”,添加以下几个secret:
名称 | 说明 | 示例 |
---|---|---|
SSH_PRIVATE_KEY | SSH私钥内容 | 复制~/.ssh/github_deploy_key 文件的全部内容 |
REMOTE_HOST | 服务器地址 | 123.123.123.123 |
REMOTE_USER | 服务器用户名 | root 或创建的专用部署用户名 |
REMOTE_TARGET | 博客部署目录 | /var/www/html/blog |
3.2 创建GitHub Actions工作流
在项目根目录下创建.github/workflows/deploy.yml
文件:
name: Deploy Hexo Blog |
四、配置云服务器
4.1 添加SSH公钥到服务器
将之前生成的公钥添加到服务器的authorized_keys文件中:
# 在服务器上执行 |
4.2 确保目标目录存在并设置权限
# 在服务器上执行 |
五、解决常见问题
5.1 SSH连接权限问题
如果遇到Permission denied (publickey,password)
错误,可能是以下原因:
- SSH密钥格式不正确:确保使用
-m PEM
参数生成密钥 - authorized_keys权限问题:检查权限
chmod 600 ~/.ssh/authorized_keys
- SSH目录权限问题:检查权限
chmod 700 ~/.ssh
- 公钥内容错误:确认公钥正确添加到服务器
5.2 解决腾讯云频繁告警问题
每次GitHub Actions执行部署时,腾讯云可能会发出异常登录告警。为解决这个问题,我们可以创建一个专用的部署用户,并将其添加到腾讯云的可信用户列表中。
六、创建专用部署用户(推荐)
创建专用部署用户不仅可以解决告警问题,还能提高安全性。以下是详细步骤:
6.1 创建部署用户
# 登录服务器后执行 |
6.2 配置SSH密钥认证
# 创建authorized_keys文件 |
6.3 配置部署目录权限
# 配置博客部署目录的权限 |
6.4 增强安全性(可选)
限制部署用户的权限,提高安全性:
# 修改SSH配置 |
6.5 更新GitHub Actions配置
在GitHub仓库设置中更新REMOTE_USER
密钥为deploy-hexo
,确保GitHub Actions使用新创建的部署用户。
6.6 在腾讯云设置中添加可信用户
- 登录腾讯云控制台
- 进入「安全中心」或相关安全管理页面
- 找到「异常登录告警」设置
- 将
deploy-hexo
添加到可信用户列表中
七、部署记录和监控
为了更好地追踪部署过程,可以添加部署日志记录:
# 在GitHub Actions工作流中添加 |
八、安全性建议和最佳实践
- 定期轮换SSH密钥:每3-6个月更新一次部署密钥
- 限制部署用户权限:仅授予必要的目录访问权限
- 使用特定分支触发部署:避免测试分支意外触发部署
- 监控部署日志:定期检查部署日志,确保没有异常
- 备份重要文件:在部署前添加备份脚本
# 添加备份脚本示例 |
九、故障排查指南
如果自动部署失败,可以按照以下步骤进行排查:
- 检查GitHub Actions运行日志,查找具体错误信息
- 测试SSH连接是否正常:
ssh -i ~/.ssh/github_deploy_key deploy-hexo@your_server_ip "echo Test successful"
- 确认目标目录权限是否正确
- 验证GitHub Secrets是否正确设置
- 检查工作流文件语法是否有误
十、总结
通过GitHub Actions和ssh-deploy插件,我们成功实现了Hexo博客的自动部署。这种方式不仅提高了效率,还确保了部署过程的一致性。创建专用部署用户进一步增强了安全性,同时解决了云服务器频繁告警的问题。
现在,我只需专注于创作内容,将更新推送到GitHub,剩下的部署工作都会自动完成。希望这篇教程对你也有所帮助!
如果你在配置过程中遇到任何问题,欢迎在评论区留言讨论。
参考资料:
Happy coding! 🚀