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

1、将docsify文档博客迁移到小主机上

a. 小主机上创建虚拟机

b. 虚拟机安装git

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
1、进入git在GitHub上发布版本页面https://github.com/git/git/releases,这个页面我们可以找到所有git已发布的版本。这里我们选择最新版的tar.gz包。
2、下载最新版本的tar.gz的Git到本地电脑上,利用WinSCP工具将压缩包上传至Linux服务器的/usr目录下
3、解压压缩包
tar -zxvf git-2.22.0.tar.gz
4、进入到解压后的文件夹
cd git-2.22.0
5、拿到解压后的源码以后我们需要编译源码了,不过在此之前需要安装编译所需要的依赖。
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
耐心等待安装完成,中途出现提示的时候输入y并按回车。
6、提示,安装编译源码所需依赖的时候,yum自动帮你安装了git,这时候你需要先卸载这个旧版的git。
yum -y remove git
7、编译git源码
make prefix=/usr/local/git all
8、安装git至/usr/local/git路径
make prefix=/usr/local/git install
9、配置环境变量
vi /etc/profile
在底部加上
export PATH=$PATH:/usr/local/git/bin
( 输入 :wq! 保存修改)
10、刷新环境变量
source /etc/profile
11、查看Git是否安装完成
git --version

c. 虚拟机安装node

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
nodejs官方:http://nodejs.cn/
cd /usr/local/src #进入目录
wget https://nodejs.org/dist/v16.13.0/node-v16.13.0-linux-x64.tar.xz #下载软件
tar -xvf node-v16.13.0-linux-x64.tar.xz #解压
mv node-v16.13.0-linux-x64 nodejs #重命名
#添加软链接
ln -s /usr/local/src/nodejs/bin/node /usr/local/bin/node
ln -s /usr/local/src/nodejs/bin/npm /usr/local/bin/npm
#设置命令环境变量
cd ~ #进入家目录
vi .bash_profile
PATH后面追加参数保存:/usr/local/src/nodejs/bin
例如:PATH=$PATH:$HOME/bin:/usr/local/src/nodejs/bin
source .bash_profile #生效文件
node -v #查看版本
npm -v #查看版本
#设置全局模块环境变量
npm prefix -g #查看nodejs模块目录
vi /etc/profile
#添加环境变量
export NODE_PATH=/usr/local/src/nodejs/lib/node_modules
source /etc/profile #生效文件
退出当前用户,再次登录,环境变量生效
npm config get registry # 查看npm源
npm config set registry https://registry.npm.taobao.org # 替换为淘宝源

d. 虚拟机安装docsify

1
2
3
4
5
npm i docsify-cli -g
ln -s /usr/local/node/bin/docsify /usr/local/bin

npm config set strict-ssl false # 此处可能会报错,使用改行命令取消ssl验证

image-20240219225026281

image-20240219225622649

image-20240219225703815

e. 虚拟机安装启动脚本

image-20240219230806439

2、将hexo博客部署到阿里云服务器

在本地计算机搭建Hexo环境,Hexo通过generate命令将*.md文件渲染成静态的html页面,然后Hexo通过deploy命令触发git用户通过公钥免密登陆服务器,进而将静态页面推送到服务器的git仓库(repository)中。然后,服务器再通过钩子(git-hooks) 将静态页面checkout到网站的根目录下,进而实现博客的自动部署

a. 本地电脑准备工作

本地需要准备 3 样东西:gitnodehexo 环境 + 部署插件。

1. 安装基础工具

1
2
3
# Windows / macOS / Linux 通用
brew install git node # macOS(Homebrew)
# 或手动从 https://git-scm.com 和 https://nodejs.org 下载安装包

2. 安装 hexo-cli 并初始化项目

1
2
3
4
npm install -g hexo-cli          # 全局安装 hexo 脚手架
hexo init blog-hexo # 生成项目骨架(生成后会自动 npm install)
cd blog-hexo
hexo server # 本地预览,默认 http://localhost:4000

注意

  1. macOS / Linux 一般无需管理员权限;Windows 用户请以管理员身份启动命令提示符
  2. 如遇 SSL 报错:npm config set strict-ssl false(仅在确实遇到证书问题时使用)
  3. Windows 命令行下切换盘符:cd /d D:\workspace\blog-hexo
  4. 验证:hexo -v 应能输出 hexo / nodejs / etc 三行版本号

image-20240220110216206
image-20240221101646693

3. 安装部署插件

hexo 默认只有 generate / server 命令,部署能力由插件提供:

1
2
3
npm install hexo-deployer-git --save   # Git 推送部署
# 可选:本地热更新
npm install hexo-server --save

4. 生成本地 SSH 公钥,用于免密推送到阿里云

1
2
ssh-keygen -t ed25519 -C "your_email@example.com"   # 一直回车即可
cat ~/.ssh/id_ed25519.pub # 拿到公钥字符串

将公钥内容整段追加到阿里云 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
2
3
yum install -y nginx                                   # 推荐用 yum(推荐除非您需要特定版本)
mkdir -p /home/www/hexo # 部署根目录
chown -R git:git /home/www/hexo # 让 git 用户可写

修改 nginx 配置 /etc/nginx/nginx.conf,让 server 指向部署目录:

1
2
3
4
5
6
7
8
9
server {
listen 80 default_server;
server_name shuaifeihao.top; # 改为您的域名
root /home/www/hexo; # 关键一句
index index.html;
location / {
try_files $uri $uri/ =404;
}
}

启动:systemctl enable nginx && systemctl start nginx

如果坚持源码编译安装,原文档 b.1 的步骤仍然有效,但 yum / apt 装 nginx 已经足够。

部署目录是 git 用户所有,部署后不需要 root 介入,post-receive hook 就能写入。

2. 创建 git 用户并开启免密登录(以 root 执行)

1
2
adduser git                                             # 仅作为 hexo 部署账号
sudo passwd git # 设定密码

公钥登录准备:

1
2
3
4
5
mkdir -p /home/git/.ssh
vi /home/git/.ssh/authorized_keys # 复粘贴本地 ~/.ssh/id_ed25519.pub
chmod 700 /home/git/.ssh
chmod 600 /home/git/.ssh/authorized_keys
restorecon -Rv /home/git/.ssh 2>/dev/null || true # 调整 SELinux(CentOS)

本地侧验证:

1
ssh -T git@<云主机公网IP>                               # 不输入密码能进即成功

3. 创建裸仓库 + post-receive hook(以 git 用户执行)

1
2
cd ~
git init --bare hexo.git # 裸仓库在 /home/git/hexo.git

写入 hook:

1
2
3
4
5
6
7
cat > ~/hexo.git/hooks/post-receive <<'EOF'
#!/bin/bash
# deploy.sh-equivalent: 从 hexo.git 强制 checkout 到 /home/www/hexo
unset GIT_DIR
git --git-dir=/home/git/hexo.git --work-tree=/home/www/hexo checkout -f
EOF
chmod +x ~/hexo.git/hooks/post-receive

4.验证服务器侧部署

在本机:

1
ssh git@<IP> 'git --git-dir=/home/git/hexo.git log -1'

如果能看到提交记录,说明仓库已经就位。

c. 一键部署脚本(可选但强烈推荐)

每次部署都手动 clean → build → deploy 几个动作,免不了乏味。使用 deploy.sh 脚本可以一键完成:

1
2
3
4
5
6
#!/bin/bash
set -e

npm run clean # 清理上次构建
npm run build # 重新生成 public/
npm run deploy # 触发 hexo-deployer-git 推送

项目根目录创建 deploy.sh、给执行权限:

1
2
chmod +x deploy.sh
./deploy.sh # 输出会逐步打印构建进度

推荐在 package.json 中提供如下脚本(Hexo 默认项目已经包含这几个):

1
2
3
4
5
6
7
8
{
"scripts": {
"clean": "hexo clean",
"build": "hexo generate",
"server": "hexo server",
"deploy": "hexo deploy"
}
}

d. hexo博客配置

在项目根目录的 _config.yml 中,找到 deploy 字段并修改为:

1
2
3
4
5
deploy:
type: git
repo: git@<阿里云公网IP>:/home/git/hexo.git
branch: master
message: 'Site updated: {{ now("yyyy-MM-dd HH:mm:ss") }}'

补充几点重要设置:

1
2
3
4
5
6
7
8
9
# 1. 配置本地 Git 信息(hexo-deployer-git 在提交时需要)
git config --global user.email "your_email@example.com"
git config --global user.name "your-name"

# 2. 首次推送会验证服务器指纹,输入 yes 后后续免密
hexo clean && hexo generate && hexo deploy

# 3. 部署成功后验证:访问您的域名(或 http://<云主机IP>)
curl -I https://shuaifeihao.top # 应该返回 200

部署流程全貌

1
2
3
4
5
本地 (clean → build)
↓ hexo-deployer-git
阿里云 hexo.git (裸仓库) master 分支
↓ post-receive hook
/home/www/hexo/ (nginx 服务目录) ← 用户访问 shuaifeihao.top

为什么是 npm run deploy 而不是 hexo deploy两者实质一样。仅是 hexo 项目默认 package.json 会将 hexo CLI 包装为 npm 脚本,与项目依赖同步。

3、日常使用与排查

a. 日常部署流程

1
2
3
4
5
# 写新文章
hexo new post 我的新文章 # 生成 source/_posts/我的新文章.md
# ✍️ 编辑文件 ...
hexo server # 本地预览(port: 4000)确认效果
./deploy.sh # 一键部署后公共可访问

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
2
git remote add gitea git@<其它地址>:<仓库>.git
git push --mirror gitea # 首次完整镜像

这样踩了一些坑不会丢源码。


本站由 卡卡龙 使用 Stellar 1.33.1主题创建

本站访问量 次. 本文阅读量 次.