从零开始:安全自动部署 Hexo 博客到阿里云服务器
🚀 从零开始:安全自动部署 Hexo 博客到阿里云服务器(最小权限实践)
目标:每次
git push到 GitHub,自动将 Hexo 博客部署到你的阿里云 Ubuntu 服务器,无需人工干预、无需 root 权限、符合安全最佳实践。
✅ 为什么选择自建服务器?
- 完全掌控环境
- 国内访问速度快
- 可扩展性强(未来可加 API、数据库等)
- 成本可控(已有 ECS)
💡 本文采用 最小权限原则:部署用户无
sudo权限,即使密钥泄露也无法提权。
🔧 第一步:初始化服务器(一次性操作)
1. 登录服务器(用默认用户,如 ubuntu)
1 | ssh -i ~/.ssh/your-key.pem ubuntu@<your-public-ip> |
2. 安装 Nginx
1 | sudo apt update && sudo apt install nginx -y |
3. 创建专用部署用户(无 sudo 权限!)
1 | # 创建用户 blog,禁用密码登录 |
4. 创建博客目录并设置权限
1 | # 创建目录 |
5. 配置 Nginx 站点
1 | sudo vi /etc/nginx/sites-available/hexo-blog |
粘贴:
1 | server { |
启用配置:
1 | sudo ln -s /etc/nginx/sites-available/hexo-blog /etc/nginx/sites-enabled/ |
🔑 第二步:配置 SSH 密钥(用于自动部署)
1. 在本地生成专用部署密钥
1 | ssh-keygen -t rsa -b 4096 -f ~/.ssh/hexo_deploy -N "" |
- 私钥:
~/.ssh/hexo_deploy - 公钥:
~/.ssh/hexo_deploy.pub
2. 将公钥添加到服务器的 blog 用户
1 | # 复制公钥内容 |
✅ 现在 GitHub 可以用私钥自动登录 blog 用户。
🤖 第三步:配置 GitHub Actions 自动部署
1. 在 GitHub 仓库添加 Secrets
进入 Settings → Secrets and variables → Actions
添加以下密钥:
| Name | Value |
|---|---|
DEPLOY_HOST |
<your-public-ip> |
DEPLOY_USER |
blog |
SSH_PRIVATE_KEY |
cat ~/.ssh/hexo_deploy 的全部内容 |
2. 创建部署工作流
在本地 Hexo 项目根目录创建:
1 | .github/workflows/deploy.yml |
内容如下:
1 | name: Deploy Hexo Blog |
🔍 关键参数说明:
--chmod=755:确保新上传的文件有正确权限--delete:同步删除已移除的文件
🧪 第四步:测试部署
提交并推送代码:
1
2
3git add .
git commit -m "feat: enable auto deploy"
git push查看 GitHub Actions 日志(Actions 标签页)
浏览器访问:
1
http://<your-public-ip>
✅ 应看到你的最新博客!
🔒 安全与维护
✅ 最小权限保障
blog用户无法执行sudo- 无法访问其他用户数据
- 即使 GitHub 私钥泄露,攻击面极小
🛠️ 日常维护
- 更新系统:用另一个管理账号(如
admin)执行sudo apt upgrade - 查看日志:
1
2sudo tail -f /var/log/nginx/access.log
sudo journalctl -u nginx
🌐 后续优化(可选)
- 绑定域名 + Let’s Encrypt HTTPS
- 配置 Fail2ban 防暴力破解
- 添加博客访问统计(如 GoatCounter)
📊 架构图
1 | graph LR |
✅ 总结
你现在已经拥有:
- ✅ 全自动部署:推代码即上线
- ✅ 高安全性:部署用户无提权能力
- ✅ 高性能:Nginx 直接提供静态文件
- ✅ 低成本:仅使用已有 ECS 资源
🎉 从此告别手动 scp/rsync,专注写作!
附:常见问题排查
| 问题 | 解决方法 |
|---|---|
| 403 Forbidden | 检查 /var/www/hexo-blog 权限(755/644) |
| 部署失败 | 查看 GitHub Actions 日志 + 服务器 ~/.ssh/authorized_keys |
| Nginx 未生效 | 运行 sudo nginx -t 检查配置 |
本文所有操作均基于 Ubuntu 22.04 + 阿里云 ECS,适用于绝大多数 Linux 服务器。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 From Zero to Hero!