由于之前使用dosify搭建的文档博客,但是样式和主题比较单一,在发现hexo+stellar之后,觉得这款博客主题很美观很简洁,本文主要记录了将就博客迁移到本地主机的过程、在阿里云搭建hexo博客的操作步骤
1、将docsify文档博客迁移到小主机上
a. 小主机上创建虚拟机

b. 虚拟机安装git
1 | 1、进入git在GitHub上发布版本页面https://github.com/git/git/releases,这个页面我们可以找到所有git已发布的版本。这里我们选择最新版的tar.gz包。 |
c. 虚拟机安装node
1 | nodejs官方:http://nodejs.cn/ |
d. 虚拟机安装docsify
1 | npm i docsify-cli -g |



e. 虚拟机安装启动脚本

2、将hexo博客部署到阿里云服务器
在本地计算机搭建Hexo环境,Hexo通过generate命令将*.md文件渲染成静态的html页面,然后Hexo通过deploy命令触发git用户通过公钥免密登陆服务器,进而将静态页面推送到服务器的git仓库(repository)中。然后,服务器再通过钩子(git-hooks) 将静态页面checkout到网站的根目录下,进而实现博客的自动部署
a. 本地电脑准备工作
本地需要准备 3 样东西:git、node、hexo 环境 + 部署插件。
1. 安装基础工具
1 | # Windows / macOS / Linux 通用 |
2. 安装 hexo-cli 并初始化项目
1 | npm install -g hexo-cli # 全局安装 hexo 脚手架 |
注意
- macOS / Linux 一般无需管理员权限;Windows 用户请以管理员身份启动命令提示符
- 如遇 SSL 报错:
npm config set strict-ssl false(仅在确实遇到证书问题时使用)- Windows 命令行下切换盘符:
cd /d D:\workspace\blog-hexo- 验证:
hexo -v应能输出 hexo / nodejs / etc 三行版本号


3. 安装部署插件
hexo 默认只有 generate / server 命令,部署能力由插件提供:
1 | npm install hexo-deployer-git --save # Git 推送部署 |
4. 生成本地 SSH 公钥,用于免密推送到阿里云
1 | ssh-keygen -t ed25519 -C "your_email@example.com" # 一直回车即可 |
将公钥内容整段追加到阿里云 git 用户的 ~/.ssh/authorized_keys(详见 b.5)。后续 git push 不会再问密码。
b. 阿里云服务器准备工作
服务器要准备 3 样东西:服务目录 /home/www/hexo、git 裸仓库 /home/git/hexo.git、对接二者的 post-receive hook。
1. 安装 nginx + 创建部署目录(以 root 执行)
1 | yum install -y nginx # 推荐用 yum(推荐除非您需要特定版本) |
修改 nginx 配置 /etc/nginx/nginx.conf,让 server 指向部署目录:
1 | server { |
启动:systemctl enable nginx && systemctl start nginx
如果坚持源码编译安装,原文档 b.1 的步骤仍然有效,但 yum / apt 装 nginx 已经足够。
部署目录是
git用户所有,部署后不需要 root 介入,post-receive hook 就能写入。
2. 创建 git 用户并开启免密登录(以 root 执行)
1 | adduser git # 仅作为 hexo 部署账号 |
公钥登录准备:
1 | mkdir -p /home/git/.ssh |
本地侧验证:
1 | ssh -T git@<云主机公网IP> # 不输入密码能进即成功 |
3. 创建裸仓库 + post-receive hook(以 git 用户执行)
1 | cd ~ |
写入 hook:
1 | cat > ~/hexo.git/hooks/post-receive <<'EOF' |
4.验证服务器侧部署
在本机:
1 | ssh git@<IP> 'git --git-dir=/home/git/hexo.git log -1' |
如果能看到提交记录,说明仓库已经就位。
c. 一键部署脚本(可选但强烈推荐)
每次部署都手动 clean → build → deploy 几个动作,免不了乏味。使用 deploy.sh 脚本可以一键完成:
1 |
|
项目根目录创建 deploy.sh、给执行权限:
1 | chmod +x deploy.sh |
推荐在 package.json 中提供如下脚本(Hexo 默认项目已经包含这几个):
1 | { |
d. hexo博客配置
在项目根目录的 _config.yml 中,找到 deploy 字段并修改为:
1 | deploy: |
补充几点重要设置:
1 | # 1. 配置本地 Git 信息(hexo-deployer-git 在提交时需要) |
部署流程全貌:
1 | 本地 (clean → build) |
为什么是 npm run deploy 而不是 hexo deploy?两者实质一样。仅是 hexo 项目默认 package.json 会将 hexo CLI 包装为 npm 脚本,与项目依赖同步。
3、日常使用与排查
a. 日常部署流程
1 | # 写新文章 |
b. 从末端往首排查
遇到“部署后页面不变化”,从末端往首检查:
| 检查点 | 命令 | 预期 |
|---|---|---|
| 用户访问 | curl -I https://shuaifeihao.top |
200/CDN 缓存 |
| nginx 服务目录 | ssh git@<IP> 'ls -lt /home/www/hexo/index.html' |
mtime 是刚才 |
| 裸仓库是否收到提交 | ssh git@<IP> 'git --git-dir=/home/git/hexo.git log -1' |
看到 hexo 提交 |
| 本地推送是否成功 | 查看 deploy.sh 输出中 Site updated: 以后是否报 [SUCCESS] |
推送成功 |
c. 常见失败模式
| 现象 | 原因 / 解决 |
|---|---|
hexo: command not found |
环境变量丢失。重新 source /etc/profile 或重新登录 |
git push 需输入密码 |
公钥没追加到服务器 git 用户的 authorized_keys;重走 b.5 |
| 推送成功但页面不刷新 | post-receive hook 没执行权限,或部署目录被 chmod 锁住。ssh 到服务器手动跑 hook 里的命令验证 |
| 页面能上但样式丢失 | nginx 配置 root 路径错,或页面中是 绝对路径却被 CDN 拦截 |
Cannot find module 'hexo' |
node_modules 被刪除(git rm、force push 后)。重跑 npm install |
| 推送超时但能连上 | 服务器 git 只接受原 ECDSA 了,看 git ≥2.36 需手动允许 RSA |
d. 备份与多环境
hexo-deployer-git 推送的是 “生成产物”,源码本身需要另外备份。可以在项目里加一个 gitea remote,用 git push --mirror gitea 同步完整 main 分支:
1 | git remote add gitea git@<其它地址>:<仓库>.git |
这样踩了一些坑不会丢源码。