超详细版:从 0 到 1 把 Hexo 静态博客部署到阿里云服务器
(含所有错误排查、保存退出、钩子脚本细节)
0 前提
- 阿里云 ECS 或轻量服务器(系统以 Ubuntu 为例,CentOS 同理)
- 本地电脑已安装 Hexo、Git、Node.js
- 服务器已开放 22、80、443 端口(安全组+系统防火墙)
1 服务器端操作(全程 root 身份)
1.1 安装基础环境
1 2 3 4 5
| sudo apt update && sudo apt upgrade -y
sudo apt install -y git nginx nodejs npm
|
1.2 创建裸仓库(只存 Git 历史)
1 2 3 4 5 6
| sudo mkdir -p /var/repo/blog.git cd /var/repo/blog.git
sudo git init --bare
|
1.3 创建网站目录
1
| sudo mkdir -p /var/www/hexo
|
1.4 创建 Git Hook(自动部署脚本)
1 2
| sudo vim /var/repo/blog.git/hooks/post-receive
|
在 vim 里,按 i
进入插入模式,完整粘贴以下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #!/bin/bash
GIT_REPO=/var/repo/blog.git TMP_CLONE=/tmp/hexo-$(date +%s) PUBLIC_WWW=/var/www/hexo
git clone $GIT_REPO $TMP_CLONE
rm -rf $PUBLIC_WWW/* cp -rf $TMP_CLONE/* $PUBLIC_WWW/
rm -rf $TMP_CLONE
|
保存并退出 vim
- 按
Esc
回到命令模式
- 输入
:wq!
回车(w
=写入,q
=退出,!
=强制)
给脚本可执行权限:
1
| sudo chmod +x /var/repo/blog.git/hooks/post-receive
|
2 配置 Nginx 指向网站根目录
2.1 备份默认配置
1
| sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak
|
2.2 修改 Nginx 配置
1
| sudo vim /etc/nginx/sites-available/default
|
找到:
改成:
整段最小可用配置如下(可替换整段):
1 2 3 4 5 6 7 8 9 10 11
| server { listen 80; listen [::]:80; server_name 120.26.144.211; root /var/www/hexo; index index.html index.htm;
location / { try_files $uri $uri/ =404; } }
|
保存退出 vim:Esc
→ :wq!
→ 回车
2.3 测试并重载
1 2
| sudo nginx -t sudo systemctl reload nginx
|
3 本地 Hexo 配置一键推送
3.1 安装 hexo-deployer-git
1
| npm install hexo-deployer-git --save
|
3.2 _config.yml 尾部追加
1 2 3 4
| deploy: type: git repo: root@120.26.144.211:/var/repo/blog.git branch: main
|
3.3 首次推送并测试
看到:
即成功。
4 常见错误一览 & 解决
现象 |
原因 |
解决命令 |
Permission denied |
目录/文件权限不足 |
sudo chown -R www-data:www-data /var/www/hexo
sudo chmod -R 755 /var/www/hexo |
nginx: [emerg] bind() to 0.0.0.0:80 failed |
80 端口被占用 |
sudo lsof -i:80
sudo systemctl stop apache2 或其他进程 |
上传后目录为空 |
钩子默认分支是 master,推送的是 main |
在裸仓库执行:git symbolic-ref HEAD refs/heads/main |
样式错乱/空白 |
图片/Css 404、路径错误 |
把 _config.yml 的 url 改为 http://120.26.144.211 再重新部署 |
vim 提示 E45: readonly |
没权限 |
用 sudo vim 或 :wq! 强制保存 |
每次输入密码 |
未配置 SSH 密钥 |
ssh-copy-id root@120.26.144.211 |
5 一键速查表
任务 |
命令 |
本地预览 |
hexo s -o |
正式发布 |
hexo clean && hexo g -d |
重启 nginx |
sudo systemctl restart nginx |
查看 nginx 错误日志 |
sudo tail -f /var/log/nginx/error.log |
6 下一步:域名 + HTTPS
- 阿里云购买域名 → 域名控制台 → 解析 → A 记录指向
120.26.144.211
- 备案 → 免费申请 SSL → 改 Nginx
server_name
→ 启用 443 端口 → 全站 HTTPS
至此,完全自主、无第三方平台 的 Hexo 部署流程结束。祝你顺利!