准备工作
- 安装 Node.js:到 Node.js 的官网下载最新版本并安装
- 安装 Git:到 Git 官网下载最新版本安装,然后配置本地 Github 的账户密码并生成密钥
- 安装 Hexo:在命令行使用
npm install -g hexo
命令安装 Hexo,然后运行hexo -v
,如果输出版本号即为安装成功 - 在 Github 上创建用于托管博客的仓库:
JasonLian.github.io
初始化并生成静态页面
- 初始化:在本地新建一个项目文件夹(比如 Blog),进入 Blog 目录,运行
hexo init
进行初始化 - 生成静态页面:运行
hexo generate
将文章编译为静态页面 - 本地启动:运行
hexo server
,然后在浏览器中输入 http://localhost:4000/ 查看生成的页面效果
部署到 Github
部署之前先修改配置文件
1234deploy:type: gitrepository:git@github.com:JasonLian/JasonLian.github.io.gitbranch: master然后,通过
npm install hexo-deployer-git --save
安装部署插件,并进行部署hexo deploy
- 部署成功之后,稍等片刻就能通过 jasonlian.github.io 查看博客了,效果和本地预览相同
多终端同步管理
- 在一台新终端上建立 Blog 文件夹并初始化 Hexo (init & generate)
在 Blog 下新建
.deploy_git
文件夹,进入并运行1234git initgit remote add origin git@github.com:JasonLian/JasonLian.github.io.gitgit fetch --allgit reset --hard origin/master一种更简单的方式是:直接使用 Resilio Sync 等同步工具将整个 Blog 文件夹在不同终端之间备份即可
发表文章并添加分类和标签
- 新建一篇文章:运行
hexo new "title"
,然后就可以在 source/_post 文件夹下看到新建的 markdown 文件 - 发布一篇文章:编辑新建的 md 文件后,generate + deploy 即可
- 添加标签页面:
hexo new page tags
新建标签页面,在标签 md 文件中添加type: "tags"
,然后在主题配置文件的 menu 下添加tags: /tags
- 添加分类页面:
hexo new page categories
新建标签页面,在标签 md 文件中添加type: "categories"
,然后在主题配置文件的 menu 下添加categories: /categories
- 为文章添加分类和标签:在文章的 front-matter 中添加如下代码,注意 Hexo 中每篇文章可以指定多个标签,但是只能指定一个分类,如果需要关闭评论功能,可以将
comments
设置为 false1234categories: Diarytags:- PS3- Games
将 Hexo 同时托管到 Github 和 Coding
- Github 在国内的访问速度有时会很慢,甚至出现打不开的情况,而且受 Github 屏蔽百度爬虫所限,托管在 Github Page 的博客在百度上是搜索不到的,除非想百度手动推送你的链接,很是麻烦
- 因此,可以考虑将 Hexo 托管到 Coding Page 上,步骤和 Github 大致相同,在 Coding 上部署公钥,然后在 Git Bash 中输入命令
ssh -T git@git.coding.net
即可 - 更进一步,如果想同时托管到 Github Page 和 Coding Page,只需要在万网买一个域名,同时绑定两个网址,并设置国内 ip 指向 Coding,国际 ip 指向 Github 即可,详细步骤参见 Reference
实现简单的文章加密访问
如果使用 next 主题,则找到
themes->next->layout->_partials->head.swig
文件,在文件末尾加入以下代码:12345678910<script>(function(){if('{{ page.password }}'){if (prompt('请输入文章密码','') !== '{{ page.password }}'){alert('密码错误!');history.back();}}})();</script>加入上述代码后,只需在需要加密的文章头部添加 password 变量即可,变量值设置为自己设定的密码
123456789title: Hexo文章简单加密访问date: 2016-12-01 10:45:29tags: hexocategories: 博客keywords:- Hexo- 加密description: 阅读本文,请输入密码password: youpassword如果你开启了 RSS 订阅功能,或者本地搜索功能,那么在执行
Hexo generate
之后,加密文章的内容也会自动写入 public 文件夹下的 search.xml 文件和 atom.xml 文件中- 为了去除这些文件中的敏感内容,在博客根目录新建一个 rm_secret.py 文件,添加如下代码,在每次 generate 和 deploy 之间,将加密文章名添加到 delete_article_names 数组中,然后执行即可123456789101112131415161718192021222324# coding:utf8import re# 设置需要去除的文章名delete_article_names = ["article1", "article2"]delete_files = ['./public/atom.xml', './public/search.xml']for delete_file in delete_files:fr = open(delete_file)content = fr.read()# print contentfr.close()checks = re.findall(r'<entry>(.*?)</entry>', content, re.S)for check in checks:delete = 0for delete_article_name in delete_article_names:if delete_article_name in check:delete = 1if delete==1:content = content.replace('<entry>' + check + '</entry>', '')fw = open(delete_file, 'w')fw.write(content)fw.close()
常见错误及解决方案
hexo deploy 部署失败
- 部署时提示如下错误,解决方法为删除 .deploy_git 文件夹后重新部署123456789101112error: bad signaturefatal: index file corruptFATAL Something's wrong. Maybe you can find the solution here: http://hexo.io/docs/troubleshooting.htmlError: error: bad signaturefatal: index file corruptat ChildProcess.<anonymous> (C:\Users\Lian\Blog\node_modules\hexo-util\lib\spawn.js:37:17)at emitTwo (events.js:106:13)at ChildProcess.emit (events.js:191:7)at ChildProcess.cp.emit (C:\Users\Lian\Blog\node_modules\cross-spawn\lib\enoent.js:40:29)at maybeClose (internal/child_process.js:877:16)at Process.ChildProcess._handle.onexit (internal/child_process.js:226:5)
Reference