本文记录了我在Windows上用hexo搭建博客,并部署到我的云服务器上的步骤。

1. hexo搭建博客的工作原理

hexo是一个基于node.js的轻量级博客框架,用于在自己的工作机里生成一个完整的网站,并提供了本地预览和部署到云服务器的工具。

大多数操作都在自己的电脑上进行,只有最后几步发布到云服务器。

1.1. 在自己的电脑上建站

  • 安装hexo。
  • 用hexo生成一个hexo工作目录
  • 用markdown写文章,将md文件保存到hexo工作目录下的source子目录中。
  • 用hexo根据hexo工作目录生成一个完整的博客网站(包括html、css、js等),保存到hexo工作目录下的public子目录中。

1.2. 部署到云服务器上

  • 将上一步生成的public子目录里的所有文件(包括html、css、js等)拷贝到云服务器的某个目录里。
  • 启动nginx,将网页请求重定向到上一步的目录里,从而实现公网访问。

2. 准备工作

全部工作都在自己的PC机进行。

2.1. 安装node.js

node.js官网下载页面下载node.js并安装。会一并安装npm。

用下面的指令检查安装是否成功。

1
2
3
4
5
C:\Users\jyh>node -v
v12.16.1

C:\Users\jyh>npm -v
6.14.1

2.2. 安装hexo

将npm的源设置为淘宝镜像,并下载安装hexo。

下面的命令可以在任何目录下进行。

1
2
npm config set registry https://registry.npm.taobao.org
npm install -g hexo-cli

用下面的指令检查安装是否成功。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
C:\Users\jyh>hexo -v
hexo-cli: 3.1.0
os: Windows_NT 10.0.15063 win32 x64
node: 12.16.1
v8: 7.8.279.23-node.31
uv: 1.34.0
zlib: 1.2.11
brotli: 1.0.7
ares: 1.15.0
modules: 72
nghttp2: 1.40.0
napi: 5
llhttp: 2.0.4
http_parser: 2.9.3
openssl: 1.1.1d
cldr: 35.1
icu: 64.2
tz: 2019c
unicode: 12.1

3. 本地生成博客页面

随便找个hexo的工作目录,比如D:\abc\myblog>。用命令行进入该目录,用hexo初始化该目录。

1
2
3
4
5
6
7
D:\abc>cd myblog
D:\abc\myblog>dir
:: 初始化hexo工作目录
D:\abc\myblog>hexo init
D:\abc\myblog>npm install
:: 生成网页
D:\abc\myblog>hexo g

4. 将博客部署到云服务器

虽然可以将public目录里的所有内容都打包拷贝到云服务器再解包,但hexo提供了更方便的方法,可以在本地用一条命令就将网站文件推送到云服务器。

4.1. 准备git仓库

云服务器需要安装git。

1
[root@VM_0_9_centos ~]# sudo apt-get install git 

在云服务器建立一个名叫git的用户,并切换到git用户下。

1
2
[root@VM_0_9_centos ~]# useradd git
[root@VM_0_9_centos ~]# su - git

在git用户根目录下建立一个裸仓库。

1
[git@VM_0_9_centos ~]# git init --bare myblog.git

进入该裸仓库,创建一个钩子,让这个仓库收到新提交时,将文件checkout到网站根目录里。 创建钩子的方法就是在裸仓库hooks目录里加一个脚本文件。

1
[git@VM_0_9_centos ~]# vim ~/blog.git/hooks/post-receive

写入以下内容并保存。其中/path/to/www是云服务器上的网站目录。

1
2
#!/bin/sh
git --work-tree=/path/to/www --git-dir=~/myblog.git checkout -f

这样,每当该仓库接到提交,就会将提交的仓库内容checkout到目录/path/to/www

4.2. 用ssh密钥实现免密登录

在云服务器上用ssh-keygen生成公钥-私钥对。

将公钥保存到/home/git/.ssh/authorized_keys这个文本文件中。

将私钥保存到本地工作机。

4.3. 配置hexo工作目录,实现一条指令完成发布

修改hexo工作目录下的_config.yml

找到deploy项,默认是这样的:

1
2
deploy:
    type: ''

修改成这样:

1
2
3
4
deploy:
    type: git
    repo: git@your-host.com/home/git/your-bare-git-repo.git
    branch: master

然后再度生成本地网页并部署。

1
D:\abc\myblog>hexo clean && hexo g --deploy

5. 让云服务器上的博客能被网页浏览器访问

配置nginx,将网页请求重定向到第4步的/path/to/www目录中即可。

6. 参考资料

【腾讯云的1001种玩法】Hello Hexo之静态博客搭建+自动部署