Hexo 新手向教程 4 自动化部署

为什么需要自动部署?

在之前的教程里,每一次写了新文章都需要手动把 md 文件拷贝至为 Zeronet 配置的 Hexo 文件夹里,然后再生成页面 -> 拷贝文件 -> 手动签名 -> 发布

这一点都不优雅!!

所以,我制作了一个自动化部署脚本,可以一键部署你的 Hexo 到 Zeronet 和一般平台

因为这个脚本使用来 rsync 和 bash 所以似乎没法在 Windows 中运行

运行之前请务必先阅读代码,至少要知道这个脚本在干什么,因为它所带来的一些更改可能不是你希望的

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
26
27
28
29
30
31
32
33
#! /bin/bash
zerobundle_dir=""
# ZeroBundle 所在目录
site_address=""
# 你的站点地址
blog_dir=""
# 一般的 hexo/blog 路径
blog_for_zeronet_dir=""
# 为 Zeronet 所创建副本的 hexo/blog 路径
key=""
#站点私钥
# 修改以上内容 注意使用绝对路径
rsync -av $blog_dir/source/ $blog_for_zeronet_dir/source
# 同步原目录的 source 目录
cd $blog_for_zeronet_dir
hexo g
# 生成静态页面
rm -r $zerobundle_dir/ZeroNet/data/$site_address/*
# 清空原有文件
rsync -av $blog_for_zeronet_dir/public/* $zerobundle_dir/ZeroNet/data/$site_address/
# 拷贝新生成的静态页面
cd $zerobundle_dir/ZeroNet
$zerobundle_dir/Python/python $zerobundle_dir/ZeroNet/zeronet.py siteSign $site_address $key
$zerobundle_dir/Python/python $zerobundle_dir/ZeroNet/zeronet.py sitePublish $site_address
# 签名并发布
cd $blog_dir
hexo g
hexo d
# 部署至一般平台

把上面的内容保存为一个 .sh 文件,然后 chmod +x xxx.sh 赋予执行权限
再使用 ./xxx.sh 运行

Hexo 新手向教程 3 部署至 Zeronet

Zeronet 目前不支持 URL 中包含中文,因此,你需要确保你的博客中没有中文 URL

Zeronet 是什么?

ZeroNet 是一个以 P2P 用户为基础而构成的类互联网的分布式网络,有抗审查的特性


下载并安装 Zeronet

前往 Zeronet 官方网站 下载符合你操作系统的安装包

我使用的是 Debian x64 所以我需要下载的文件为 ZeroBundle-linux64.tar.gz

解压 & 运行

1
2
3
4
$ wget https://github.com/HelloZeroNet/ZeroBundle/raw/master/dist/ZeroBundle-linux64.tar.gz
$ tar xvpfz ZeroBundle-linux64.tar.gz
$ cd ZeroBundle
$ ./Zeronet.sh

接下来 Zeronet 会自动启动并打开 http://127.0.0.1:43110

当你看到 ZeroHello 的时候就表示 Zeronet 已经成功安装并可以使用了


注册一个 ID

在 Zeronet 中 ID 是通用的,你可以使用一个 ID 登录所有站点

前往 ZeroID 主页 并注册一个 ID

稍等几秒后就会提示 Authorized for web/xxx@zeroid.bit 这就代表你注册成功了

请不要忘记备份你的 ZeroBundle/ZeroNet/data/users.json 这个文件用于证明你对这个 ID 的所有权,在你下次重装 Zeronet 时,只需要把这个文件放到相同位置就可以直接使用这个 ID 登录


建立站点

进入 Zeronet 的安装目录

执行

1
$ zeronet.py siteCreate

来创建一个站点

接下来你会看到类似于这样的输出

1
2
3
4
5
...
- Site private key: 23DKQpzxhbVBrAtvLEc2uvk7DZweh4qL3fn3jpM3LgHDczMK2TtYUq
- Site address: 13DNDkMUExRf9Xa9ogwPKqp7zyHFEqbhC2
...
- Site created!

其中 Site private key 是这个站点的私钥,请将它保存在一个安全的地方,之后对于站点的任何更改都会用到

Site address 是站点的地址,在前面加上 http://127.0.0.1:43110/ 就可以访问

现在打开 http://127.0.0.1:43110/你的站点地址 就可以看到建立好的站点了


配置 Hexo

如果直接将 Hexo 的 public 目录拷贝至站点会出现问题,需要进行一些额外的配置

首先 为你的 Hexo 创建一个副本

1
2
$ cp -r hexo/ zexo/ # 将 hexo 复制到 zexo
$ cd zexo/blog # 进入 blog 目录

接下来使用你喜欢的文本编辑器打开副本中的 _config.yml

做一些更改

1
2
url: http://127.0.0.1:43110
root: /你的站点地址/

比如我的是

1
2
url: http://127.0.0.1:43110
root: /1eJpnj6gYswKH5dXH7N54XVL6A9oX7eMr/

保存配置


部署

运行

这里假设 zexo 和 ZeroBundle 都在当前用户的家目录下,如果你的系统里不是这样,请自行修改

1
2
3
4
$ hexo g
$ rm -r ~/ZeroBundle/ZeroNet/data/[你的站点地址]/
$ cp -r ./zexo/blog/public/* ~/ZeroBundle/ZeroNet/data/[你的站点地址]

这个时候打开你的 Zeronet 站点, 向左拖动右上角的 0 图标打开菜单,向下滚动,在 CONTENT PUBLISHING 条目下,点击 Sign 来签名(需要输入站点密钥)再点击 Publish 发布


Hexo 新手向教程 2 部署至 Github Pages

为什么需要部署至 Github Pages ?

目前你的 Hexo 博客已经基本可用了,但接下来还需要让他可以被他人访问,那么为什么选择 Github 而不是其他托管服务?

Github 有以下优势:

  • 足够的储存空间(似乎是 700 MB? 对于一个个人博客完全够用了)
  • 足够可靠
  • 不错的访问速度(Github 在很多国家都部署有 CDN,可以加速访问)
  • 注册方便,自带二级域名和 https(只要有邮箱就可以注册,之后可以获得一个 用户名.github.io 的域名)

注册帐号

如果你还没有 Github 帐号,那么你需要前往 这里 注册一个

打开注册页面,填写用户名,邮箱地址,密码,然后点击 Create an account

这里的用户名将会被用于你的域名 比如我的 Github 用户名是 rainlime 那么我的域名就会是 rainlime.github.io

选择账户类型 这里选择 Free 即免费账户,免费和收费的区别在于免费版只能创建公开的仓库,而收费版可以控制谁可以看到你的仓库

注册后需要验证你的邮箱,Github 会发送一封带有激活链接的邮件到你注册时所填写的邮箱,打开它,点击邮件来完成激活。


创建仓库用于存放网站

登录后打开 Github ,点击 Start a project 来创建一个仓库,仓库名填写 你的用户名.github.io 比如我的 Github 用户名是 rainlime 这里则填写 rainlime.github.io

其他保持默认就好,接着点击 Create repository 来创建这个仓库


添加 SSH 密钥来授权计算机链接至你的仓库

生成 SSH 密钥

首先,你需要在自己的系统上生成一对 SSH 密钥

1
$ ssh-keygen -t rsa -b 4096 -C "xxx@yourdomain.xxx"

把 xxx@yourdomain.xxx 改成你自己的邮箱

当提示

1
Enter a file in which to save the key (/home/user_name/.ssh/id_rsa):

时,按 Enter 键来使用默认的储存路径。

之后 SSH 会要求你为私钥设置一个密码,按 Enter 来跳过,但建议设一个。

1
2
Enter passphrase (empty for no passphrase): [输入密码]
Enter same passphrase again: [再输入一遍]

之后系统就会在 /home/user_name/.ssh/id_rsa 生成一对包含有 id_rsaid_rsa.pub 的 SSH 密钥对,其中 id_rsa 为私钥 id_rsa.pub 为公钥。


添加 SSH 密钥至 Github

1
2
3
$ cat /home/$(whoami)/.ssh/id_rsa.pub
# 获取你的公钥

把这段命令以 ssh-rsa 开头,你的邮箱地址结尾的输出全部复制到剪贴板备用

然后登录后打开 Github 的 配置 SSH 和 GPG 密钥 页面,点击右上角的 New SSH Key

输入一个标题,然后把之前的输出粘贴进去,点击 Add SSH Key 来完成添加


配置 Git

1
2
3
# 告诉 Git 你的用户名和邮箱
$ git config --global user.name "你的 Github 用户名"
$ git config --global user.email "你注册 Github 的邮箱地址"

配置 Hexo

使用你喜欢的编辑器打开 hexo/bolg 目录中的 _config.xml

找到文件末尾的 deploy 字段,做如下修改

1
2
3
4
deploy:
type: git
repo: git@github.com:你的 Github 用户名/你的 Github 用户名.github.io.git
branch: master

比如我的就是

1
2
3
4
deploy:
type: git
repo: git@github.com:rainlime/rainlime.github.io.git
branch: master

完成部署

1
2
$ hexo g # 生成静态页面
$ hexo d # 部署至 Github

接下来打开 [Github用户名].github.io 就可以看到你的博客了

Hexo 新手向教程 1 安装并美化

这些教程目前只能保证在 Debian 8.x 下可用,对于其他 GNU/Linux 发行版或 Windows / BSD 用户,请酌情修改

准备工作


安装依赖


1
2
3
$ sudo apt-get install git curl # 确保系统正确安装了 git 和 curl,之后会用到
$ curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
$ sudo apt-get install -y nodejs # 安装 nodejs

如果你的系统里还没有正确安装或配置 sudo,那么你需要手动安装并配置它:

1
2
3
4
$ su # 切换为 root
# apt-get update && apt-get install sudo -y # 安装 sudo
# echo $(ls /home)' ALL=(ALL:ALL) ALL' >> /etc/sudoers # 把当前用户加入 sudo
# exit # 返回之前的用户

第三行只适用于仅有一个用户的环境,如果你的系统中有多个用户,需要将 $(ls /home) 替换为你打算使用的用户名


正式安装


1
2
3
4
5
6
$ mkdir ~/Hexo # 新建一个目录来安装 Hexo,建议放在家目录下
$ cd ~/Hexo
$ sudo npm install hexo-cli -g # 使用 npm 来安装 Hexo
$ hexo init blog # 初始化
$ cd blog
$ sudo npm install # 安装

Hexo 已经安装完毕了,你可以输入 hexo g 来生成页面,然后使用 hexo s 来开启 Hexo 内置的服务器,现在,打开 http://localhost:4000/ 你应该就可以看到 Hexo 的欢迎页面了


美化


前往 Hexo 的官方主题页面 并选择一个你喜欢的主题,点击图片可以看到使用相应主题搭建的站点,点击主题名字可以进入对应的下载页面,跟随下载页面上的安装指导来安装它。

比如我选择了 CyanStyle

安装

1
$ git clone https://github.com/wizardforcel/hexo-theme-cyanstyle.git themes/cyanstyle

应用

编辑 Hexo 的配置文件 _config.yml ,将 theme 的值修改为你想应用的主题

比如我的是 theme: cyanstyle

刷新

如果你没有退出之前运行的服务器,那么你需要按下 Ctrl+C 来将其退出

1
2
$ hexo g
$ hexo s

现在再打开 http://localhost:4000/ 就可以看到你的新主题了~