Hexo文章发布环境的自动部署02-Hexo配置

引言

  本文承接自 这篇文章 ,在配置完 Git 及完成其自动配置脚本后,接下来就准备对 Hexo 本身动手啦!

正文

配置 Hexo 发布环境

创建新 Repository

  打开浏览器并登陆到 GitHub 网站,在个人首页上切换到”Repositories”标签页并点击右侧的”New”按钮进入新建 Repository 界面:

新建 Repository

  其中”Repository name”可自行填写,因为 Hexo 发布环境中可能会涉及密码或 client_secret 等不宜公开的内容,所以发布模式选择”Private”更为安全。填写完毕后,点击下方的”Create repository”完成创建。

修改并上传 Hexo 文件

拷贝 Hexo 文件

  在终端中运行 git clone https://github.com/joe136685182/HexoBlog.git 将新建的 repository 克隆到本地(请将命令中的 GitHub 链接替换为你个人的 repo 地址),然后将本地的 Hexo 文件复制到生成的文件夹中,如下图:

文件结构

配置 .gitignore 文件

  因为我们只需要最基本的 Hexo 文章发布环境,所以可以随时自动安装的 Hexo 程序、相关的Node.js 模块以及自动生成的 public 文件夹都是不需要上传的。按照这个原则,我们可以通过配置 .gitignore 文件来屏蔽这些内容。

  在终端中进入刚刚克隆出来的 HexoBlog 文件夹,然后执行以下命令:

1
2
3
$ cd HexoBlog
$ touch .gitignore
$ vi .gitignore

  在打开的编辑界面中输入以下内容,并保存退出:

1
2
3
4
5
6
7
8
9
node_modules/
public/
.DS_Store
Thumbs.db
*.log
.deploy_git
yarn.lock
*.swap
*.iml

  上述配置分别屏蔽了 Node.js 模块安装目录、自动生成的文章目录、 macOS 自动生成的 .DS_Store 文件、图片缩略图 Thumbs.db 文件、日志文件、Hexo 发布文章到 GitHub 前自动生成的缓存目录以及 Hexo 生成文章时自动产生的各个临时文件。

  除这些文件/文件夹以外,如果有其它屏蔽/添加文件的需要,可以自行访问 这里(英语)这里(中文) 学习 .gitignore 的配置语法。

配置主题文件(可选)

  如果你的 Hexo 通过 git clone 的方式配置了第三方主题(比如本站就使用了 NexT主题 )的话,在 themes/ 目录下会有相应的文件夹,如果此时直接通过 git add 命令添加主题文件夹,会有如下错误提示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ git add themes
warning: adding embedded git repository: themes/next
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint:
hint: git submodule add <url> themes/next
hint:
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint:
hint: git rm --cached themes/next
hint:
hint: See "git help submodule" for more information.

  这是因为 Git 检测到了,要添加的 themes/next 目录是来自另一个 Git 项目,不能直接作为本项目的文件进行上传。遇到这种情况有两种解决方法:

将主题配置为子模块

  这也是上文错误提示中建议的一种处理方式。这样做的好处是操作简单,且能保证每次克隆本项目时,作为子模块的主题能跟随作者的更新保持同步;但这会导致每次克隆之后,我们对主题配置文件 _config.yml 及其它文件的修改都会丢失,需要重新配置。

  如果选择这种解决方法,只需在 HexoBlog/ 目录下执行 git submodule add git-url themes/next 即可,其中 git-url 需要替换为主题的 GitHub 地址。要使用带了子模块的项目有一些 注意事项 需要注意,请务必了解。

清除主题中的 Git 相关信息

  这种处理方式可以保留对主题配置文件及其它文件的修改,但如果主题作者对主题进行了更新,则在同步更新主题时会比较麻烦。因为本站使用了 Gitment 以实现文章评论,对主题配置文件进行了修改,而这种处理方式可以保留修改,且在克隆时更简单快捷,所以选择使用这种处理方法。

  如果选择这种解决方法,可以通过以下命令清除主题的 Git 信息:

1
2
$ cd themes/next
$ rm -rf .git*

  这样就完成了 Git 信息的清除,此时再通过 git add 命令添加 themes/ 目录就不会再有错误提示了。而当主题作者进行了更新要进行同步的话,就只能删除当前的主题目录,重新克隆最新的主题,然后重新进行配置,这也是这种解决方法的不足之处。

将处理后的 Hexo 目录同步到 GitHub

  到这里,对 Hexo 目录的处理就基本完成了,在终端中进入 HexoBlog 目录,执行 git status 命令,可以查看到待同步文件信息。接下来执行 git add * 将所有变更添加到待同步列表中,此时 Git 会根据 上文 配置的 .gitignore 文件,过滤掉相应的文件和文件夹。

  此时再次执行 git status 命令,可以看到除了 .gitignore 文件以外,所有变更都已经进入待提交队列了,所以还需要执行 git add .gitignore 命令将 .gitignore 文件也添加进去。一切准备就绪后,执行 git commit -am "first commit of hexo" 进行提交,并执行 git push 推送到 GitHub 上。

编写 Hexo 自动初始化脚本

将 Hexo 克隆到本地并初始化

  上文已经将 Hexo 目录同步到 GitHub 了,接下来说一下如何将 Hexo 目录部署到本地并进行初始化。

  首先在终端中进入要部署 Hexo 环境的目录下,执行 git clone git-url 将之前处理过并上传的 Hexo 目录拉取到本地(假设没有添加第三方主题,或主题已经 照此 处理),其中 git-url 需要替换为本项目的 GitHub 地址(如 https://github.com/joe136685182/HexoBlog.git ),然后执行以下命令完成初始化:

1
2
3
4
$ cd HexoBlog
$ npm install --save hexo
$ npm install
$ npm install --save hexo-deployer-git

  如果在上传 Hexo 目录时,使用了 这种方法 处理第三方主题,则需要额外处理子模块的同步问题,具体操作方式请参考 这篇文章

  在完成初始化之后,就可以直接通过 Hexo new title 命令进行新建文章操作、通过 Hexo clean && Hexo g -d 命令发布文章了。请注意,在每次新建、修改、发布文章后,或者调整了 Hexo 及主题的设置后,都建议执行以下命令,将变更及时同步到 GitHub 上,避免变更丢失:

1
2
3
4
$ Hexo clean
$ git add *
$ git commit -am "add/modifiy articles or change config files"
$ git push

将初始化命令编写为脚本

  每次更换环境都要手动完成初始化,其实可以将初始化命令编写成自动化脚本。进入 HexoBlog 目录,执行以下命令:

1
2
3
$ touch init_hexo.sh
$ chmod +x init_hexo.sh
$ vi init_hexo.sh

  在打开的编辑界面中输入以下内容,并保存退出:

1
2
3
4
#!/bin/bash
npm install --save hexo
npm install
npm install --save hexo-deployer-git

  然后接着执行以下命令,将该脚本同步到 GitHub 上:

1
2
3
$ git add init_hexo.sh
$ git commit -am "add auto-deploy script"
$ git push

  到这里,脚本的编写和同步就完成了。

新环境下快速部署 Hexo 目录

  假设现在换了一台新电脑(系统为 macOS 或某个 Linux 发行版),结合 这篇文章 中的内容,只要安装好Node.js 环境以及 Git 工具,即可实现 Hexo 目录的快速部署。

  首先检查 Node.js 环境及 Git 工具已经安装完毕,然后将 之前 准备好的 SSH Key 部署文件夹拷贝到新电脑上(假设为 ~/GithubKey 目录),在终端中执行以下命令完成 Git 工具的配置:

1
2
$ cd ~/GithubKey
$ ./init_github.sh

  部署完 SSH Key 之后,在终端中执行以下命令,完成 Hexo 环境的部署和初始化:

1
2
3
4
$ cd ~
$ git clone https://github.com/joe136685182/HexoBlog.git
$ cd HexoBlog
$ ./init_hexo.sh

  其中执行 git clone 命令时要记得将 GitHub 地址替换为自己的项目地址。到这里就完成了 Hexo 文章发布环境的部署和初始化,一共只需要执行6个命令,而且还能实现文章的备份,一举两得。如果你比我还懒的话,后4个命令还可以集成到 GithubKey/init_github.sh 中,真正实现一键部署,这个就留给有缘人你自己去折腾吧~

后记

  到这里终于记录完了这个小任务的全过程,真的我保证,上手试一下就能发现这真的是个小任务,不知道为什么写下来会这么长😂

  搞 Hexo 还是蛮有意思的,就是部署不太容易,文章也容易丢。考虑到以后经常要用 rMBP 以外的电脑,换电脑是个麻烦事,所以还是查了一些资料,把这个脚本搞了出来。这两天的小折腾也让我学习了蛮多 Git 相关的知识,果然懒和好奇是第一驱动力丫。好了我要去洗菜了,白白~

显示 Gitment 评论