🚀 用宝塔面板把 Hexo 部署到服务器

🚀 用宝塔面板把 Hexo 部署到服务器
xiaoming[!WARNING]
本教程属于较早期方案,部分细节可能已经落后。如果你想用更现代、更稳定的自动化流程,建议优先阅读站内新教程:/posts/2cd5d824.html
📝 前言
如果你已经把 Hexo 博客写起来了,但觉得 GitHub Pages 访问速度不理想,或者你希望把网站真正部署到自己的服务器上,那么“宝塔面板 + Nginx + Git 自动部署”是一条很经典的路线。
这篇文章会带你完成一套传统但实用的服务器部署方案:本地写文章,执行部署命令后,服务器自动更新站点内容。
🎯 一、部署思路与流程
整个流程可以理解为下面这条链路:
- 服务器安装宝塔面板与 Nginx
- 服务器创建专门用于接收代码的 Git 仓库
- 本地 Hexo 将生成后的内容推送到服务器仓库
- 服务器通过 Git Hooks 自动把内容发布到网站目录
- 由 Nginx 对外提供访问
[!TIP]
这类方案的核心重点不在“装软件”,而在“权限、路径、仓库、钩子”四件事是否都配置正确。
🔧 二、前置准备
在开始之前,建议你先准备好:
- 一台可远程连接的 Linux 服务器
- 已解析到服务器的域名(可选,但强烈推荐)
- 本地已经安装好 Hexo、Node.js、Git
- 能正常使用 SSH 连接服务器
如果你的 Hexo 还没搭好,可以先看站内基础教程:/posts/70db7d7c.html
🏗️ 三、安装宝塔与 Nginx
1. 安装宝塔面板
前往宝塔官网下载对应系统的安装脚本:
连接服务器后,以 root 身份执行对应命令,安装完成后根据提示登录面板后台。
2. 安装 Nginx
进入宝塔面板后:
- 打开“软件商店”
- 安装
Nginx - 暂时不需要先装 PHP、MySQL
3. 创建站点
在宝塔中创建你的网站:
- 打开“网站”
- 点击“添加站点”
- 填入你的域名
- 记住站点目录名称,例如:
xmdblog.com
[!NOTE]
后续自动部署时,生成的站点文件就会发布到这个目录。
🔐 四、服务器端 Git 仓库配置
1. 创建 git 用户
先在服务器中创建专门用于部署的用户:
adduser git |
如果你需要给这个用户更高权限,可以临时调整 sudoers:
chmod 740 /etc/sudoers |
[!WARNING]
修改sudoers要格外小心,写错会影响系统 sudo 功能。不会改的话建议先备份。
2. 配置 SSH 公钥登录
在本地电脑生成 SSH 密钥:
ssh-keygen -t rsa -C "网站目录名" |
如果你已经有密钥,可以直接复用。
然后在服务器中切换到 git 用户并创建 .ssh 目录:
su git |
接着把你本地的 id_rsa.pub 内容复制到服务器的:
/home/git/.ssh/authorized_keys |
保存后,在本地测试:
ssh git@服务器IP |
如果能正常连接,就说明密钥配置成功。
📦 五、创建裸仓库并配置自动部署
1. 创建 Git 仓库目录
在服务器上执行:
sudo mkdir /home/git/repos |
这一步创建的是一个“裸仓库”,它专门用来接收推送,不直接作为工作目录编辑。
2. 配置 Git Hooks 自动发布
找到:
/home/git/repos/xmdblog.git/hooks/post-update.sample |
把它改名为:
post-update |
并将内容改成:
|
它的作用是:每次你把内容推送到仓库后,自动把内容签出到网站目录。
3. 赋予权限
cd /home/git/repos/xmdblog.git/hooks |
[!TIP]
如果你在宝塔里看到.user.ini导致无法操作网站目录,可以先临时删除它再继续。
⚙️ 六、本地 Hexo 配置
接下来回到你自己的 Hexo 项目,修改根目录下的 _config.yml。
1. 安装 Git 部署插件
npm install hexo-deployer-git --save |
2. 修改部署配置
deploy: |
如果你的域名已经解析到服务器,也可以把 服务器IP 换成域名。
🚀 七、执行部署
全部配置完成后,本地执行:
hexo clean |
如果一切正常,推送完成后服务器端会自动把内容同步到网站目录。
此时再访问你的域名,就应该能看到已经上线的博客了。
[!NOTE]
原文里写成了hexo delopy,这里要注意正确命令是hexo deploy。
🌐 八、配置 HTTPS 与访问优化
博客能访问后,建议你继续做两件事:
1. 配置 SSL 证书
在宝塔站点设置里申请 Let’s Encrypt 证书,开启 HTTPS。
2. 配置重定向
建议把访问统一到你最终使用的域名版本,例如:
- 强制跳转到
https - 统一跳转到
www或非www
这样对 SEO 和访问体验都更友好。
🛠️ 九、常见问题排查
1. 推送成功但网站没更新
优先检查:
post-update是否有执行权限- 仓库路径和站点路径是否写对
- 网站目录权限是否属于
git用户
2. SSH 连接失败
优先检查:
- 本地公钥是否正确添加到
authorized_keys .ssh目录权限是否正确- 服务器防火墙是否放行 SSH 端口
3. 页面能打开但样式丢失
优先检查:
- Hexo 的
url和root配置 - 静态资源是否完整上传
- Nginx 站点根目录是否正确
4. 网站目录无法写入
优先检查:
- 网站目录归属用户
- 是否存在
.user.ini限制 - 宝塔是否开启了额外防护策略
📚 总结
这套“宝塔面板 + Git Hooks + Nginx”的方案虽然不如 CI/CD 现代,但对于很多个人站长来说依然足够实用。它的优点是:
- 思路直观
- 部署链路清晰
- 适合自己掌控服务器环境
- 能帮助理解静态站点部署原理
如果你更看重自动化、可维护性和安全性,下一步建议升级到 GitHub Actions 或 GitLab CI 的方案。
💬 讨论
欢迎在评论区交流:
- 你更喜欢传统 Git Hooks 部署,还是 CI/CD 自动部署?
- 你在服务器部署过程中,最容易卡在哪一步?
- 如果你愿意,我也可以继续帮你把这套方案改造成更现代的部署流程。










