前言
之前使用WordPress来搭建个人博客。最近看到许多博客使用hexo并配合Next主题,效果还挺好的。而且Next主题几乎将我需要使用到的功能点包含进去了。
还有一个关键性因素是:hexo是使用Markdown来撰写文章的。
所以最近几天研究了一下hexo+next主题,便将博客从WordPress迁移了。
Hexo简介
Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。
由于Hexo最终生成静态网页,所以云服务器端只需要有web服务器(小编使用的是Centos7+Apache)就可以了,另加git,用于将网页从本地发布到云服务器上。
关于Hexo的操作都放在本地。
设备
- Mac pro
- 阿里云服务器(Centos7+Apache)
Mac Hexo安装
安装前提
- Node.js
- Git
Git
本机上自带有git,就不啰嗦了,推荐可用:Homebrew :brew install git
。
安装 Homebrew 将以下命令粘贴至终端1
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
安装完成后 我们可以用 brew install 命令来安装我们需要安装的软件(Git)1
➜ ~ brew install git
可以用 git --version
来检测是否安装了Git1
2➜ ~ git --version
git version 2.14.3 (Apple Git-98)
哈哈,结果还是啰嗦了!!
Node.js
NVM
安装 nvm
终端输入:1
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
1 | export NVM_DIR="$HOME/.nvm" |
判断nvm是否安装1
2➜ ~ command -v nvm
nvm
或者1
2
3➜ ~ nvm --version
0.33.2
nvm
command -v
命令适用于判断所有应用是否安装,若未安装,则会输出空。
安装Node
1 | nvm install stable |
判断node是否安装1
2➜ ~ node -v
v9.2.0
node 安装完成后 npm 自然也就有了
安装 Hexo
所有必备的应用程序安装完成后,即可使用 npm 安装 Hexo。1
➜ ~ npm install -g hexo-cli
由于通过npm安装的资源在国外,用npm 安装就非常费时。
好在伟大的淘宝团队推出了 “淘宝 NPM 镜像”,解决了这个问题。
使用淘宝团队定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm:1
➜ ~ npm install -g cnpm --registry=https://registry.npm.taobao.org
支持 npm 除了 publish 之外的所有命令。
所以安装Hexo可以替换为:1
➜ ~ cnpm install -g hexo-cli
-g 或 –global 表示全局安装模块,如果没有这个参数,会安装在当前目录的node_modules子目录下。
建站
安装 Hexo 完成后,请执行下列命令,Hexo 将会在指定文件夹中新建所需要的文件。
1 | $ hexo init <folder> |
若未指定<folder>
,则将在当前目录下建站(设为博客文件的根目录)。
新建完成后,指定文件夹的目录如下:1
2
3
4
5
6
7
8.
├── _config.yml
├── package.json
├── scaffolds
├── source
| ├── _drafts
| └── _posts
└── themes
其中_config.yml
为站点配置文件,_posts
为文章目录。
其他目录介绍可查看官方文档建站
修改_config.yml
配置文件1
2
3
4
5
6
7
8
9
10
11
12
13# Site 站点信息配置
title: 海的那边
subtitle: 小小码农
description: Android开发过程中的经验积累
keywords: Android,app开发
author: haitao
language: zh-Hans
timezone:
# URL
## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/'
url: http://www.nhtzj.com
root: /
运行 Hexo
现在,一个 Hexo 本地博客已经搭建起来了,你可以在本地运行
生成文件
使用 Hexo 生成静态文件1
➜ ~ hexo generate
hexo generate
可简写为hexo g
下述中提到有hexo generate
的都可简写为hexo g
。
监视文件变动
Hexo 能够监视文件变动并立即重新生成静态文件,在生成时会比对文件的 SHA1 checksum,只有变动的文件才会写入。1
➜ ~ hexo generate --watch
本地运行
1 | ➜ hexo server |
最后一行可知道:
- 本地服务器地址:http://localhost:4000/
- 关闭:Ctrl+C
hexo server
可简写为hexo s
WordPress迁移
首先,安装 hexo-migrator-wordpress 插件。1
➜ ~ cnpm install hexo-migrator-wordpress --save
在 WordPress 仪表盘中导出数据(“Tools” → “Export” → “WordPress”)(详情参考WP支持页面)。
插件安装完成后,执行下列命令来迁移所有文章。source
可以是 WordPress 导出的文件路径或网址。1
➜ ~ hexo migrate wordpress <source>
注意
这个插件并不能完美地实现WordPress->Hexo的数据转换,尤其是在处理WordPress的分类方面存在问题(见Front-matter中的分类与标签)。因此,建议您在迁移完成后,手工审阅所有生成的markdown文件,检查其中是否有错误。对于文章数量较大的WordPress站点,这项工作可能要花很长的时间。
其他博客平台的迁移情参考官方文档
迁移
部署
Hexo 提供了快速方便的一键部署功能,让您只需一条命令就能将网站部署到服务器上。1
➜ ~ hexo deploy
hexo deploy
可简写为hexo d
在开始之前,您必须先在 _config.yml 中修改参数,一个正确的部署配置中至少要有 type 参数,例如:1
2deploy:
type: git
您可同时使用多个 deployer,Hexo 会依照顺序执行每个 deployer。1
2
3
4
5deploy:
- type: git
repo:
- type: heroku
repo:
在部署之前尽量先运行hexo clean
,将本地清空,再hexo generate
和hexo deploy
。
这三条命令可用&&
符号连接,结果如下:1
➜ ~ hexo clean && hexo generate && hexo deploy
简写后为1
➜ ~ hexo cl && hexo g && hexo d
hexo g && hexo d
还可简写为hexo g -d
Hexo 插件hexo-deployer-git
由于我使用的是git管理,所以Hexo需要安装hexo-deployer-git1
➜ ~ cnpm install hexo-deployer-git --save
修改配置1
2
3
4deploy:
type: git
repository: <git 仓库地址>
branch: master
其中<git 仓库地址>
在下一章节创建git仓库目录中产生。
其他方式的部署,请参考官方文档部署
云服务器端配置Git
安装Git
一般云服务器是装有Git的,也可用yum install git
命令安装git。
也可参考CentOS下搭建Git服务器(基于SSH协议)手动下载最新版git,再进行配置安装。
创建一个 GIT 用户,用来运行 GIT 服务
* 创建用户:`adduser git`
* 设置密码:`passwd git`
添加证书
* 切换到git用户:`su git`
* 进入git用户主目录:`cd`或`cd ~`
* 创建.ssh目录:`mkdir .ssh && chmod 700 .ssh`
* 创建authorized_keys公钥保存文件:`touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys`
接着,我们需要为系统用户 git 的 authorized_keys 文件添加一些开发者 SSH 公钥。 假设我们已经获得了若干受信任的公钥,并将它们保存在临时文件中。 与前文类似,这些公钥看起来是这样的:1
2
3
4
5
6
7$ cat /tmp/id_rsa.john.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4L
ojG6rs6hPB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4k
Yjh6541NYsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9Ez
Sdfd8AcCIicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myiv
O7TCUSBdLQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPq
dAv8JggJICUvax2T9va5 gsg-keypair
将这些公钥加入系统用户 git 的 .ssh 目录下 authorized_keys 文件的末尾:1
$ cat /tmp/id_rsa.john.pub >> ~/.ssh/authorized_keys
或者直接用echo
命令将公钥文件内容追加到authorized_keys文件中(由于公钥文件内容中是没有换行符存在,所以可以用echo
追加),如下:
1 | $ echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4L |
创建git仓库目录
创建一个名为blog的git仓库1
2
3mkdir /var/repo
cd /var/repo
git init --bare blog.git
配置 GIT HOOKS
1 | vim /var/repo/blog.git/hooks/post-receive |
添加1
2#!/bin/sh
git --work-tree=/var/www/hexo --git-dir=/var/repo/blog.git checkout -f
然后保存退出,并设置权限1
chmod +x /var/repo/blog.git/hooks/post-receive
改变 BLOG.GIT 目录的拥有者为 GIT 用户
1 | chown -R git:git blog.git |
创建静态文件目录并将创建git仓库目录步骤生成的git仓库链接到静态文件目录下
* 创建静态文件目录(文章网页):mkdir /var/www/hexo
* 链接git仓库:chown -R git:git /var/www/hexo
* 配置权限:chmod -R 755 /var/www/hexo
这样git仓库更新便会自动同步到hexo目录下
到此步,服务器端的git配件基本完成,此git仓库的地址为git@本服务器ip:/var/repo/blog.git
,现在可以回到Hexo 插件hexo-deployer-git,将此地址填入repository:
内。
注:git仓库的地址格式为git账户@服务器地址:git仓库文件全路径
。
为了安全考虑,禁用GIT用户的SHELL 登录权限配置(下面两个步骤非常重要,否则客户端总是提示密码错误!!!)
首先你必须确保 git-shell 已存在于 /etc/shells 文件中
- 使用命令
which git-shell
判断系统是否安装了git-shell。如果已经安装,则返回git-shell的安装目录,如:/usr/bin/git-shell;
如果未安装则需要安装git-shell命令,安装命令:yum install git
- 判断shells文件是否存在,判断命令:
cat /etc/shells
如果文件不存在或没有
/usr/bin/git-shell
,则需要使用vim增加这个路径:sudo vim /etc/shells
,在最后一行添加git-shell路径1
2
3
4
5
6
7
8/etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/usr/bin/tmux
/usr/bin/screen
/usr/bin/git-shell/usr/bin/git-shell
为git-shell路径,故添加进去。
- 使用命令
- 现在你可以使用 chsh 命令修改任一系统用户的shell权限了
现在我们修改第一步中创建的git用户的登录权限,禁止git用户使用shell权限:
终端中输入sudo chsh git
然后在Login Shell [/bin/bash]:
后输入git-shell路径/usr/bin/git-shell
修改完成后验证: vim /etc/passwd
找到类似git:x:1000:1000:,,,:/home/git:/usr/bin/git-shell
,看看git用户是否是以git-shell结尾
- 这样,git用户就只能使用SSH连接对Git仓库进行推送和拉取操作,而不能登录机器并取得普通shell命令
添加Apache虚拟站点
添加Apache虚拟站点,将/var/www/hexo
设为该站点根目录。
重启apache1
systemctl restart httpd