hexo 博客的安装部署和主题配置

这篇文章记录了 hexo 博客从本地安装到部署到服务器的过程。

一、本地安装 hexo

安装

听说 hexo 是一个静态博客系统的时候,就想着没有数据库怎么评论?怎么保存和内容相关的数据?结果一天熟悉下来,发现很适合我。wordpress 越来越好资源,而且对 markdown 支持的不是很好,typora 比较轻量,但可玩性一般。hugo 据说速度很快,但 hexo 能直接用 typora 编辑后发布,我走完 hexo 的整个流程后发现很方便,配置方便,功能丰富,文档和代码都很简洁,完全够用了。没有完美的工具,写博客最主要的是内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 安装 hexo 的前提是安装好 nodejs 和 git 这两个软件,这里不再多说,从官网找到下载安装就行,不复杂
npm install -g hexo-cli
# 使用 git bash 或者 cmd 初始化博客根目录,命令中的 blog 不是关键字,可以是任何你喜欢的目录名称
hexo init blog
# 安装依赖
cd blog && npm install
# 安装 next 主题。next 不仅仅是一个主题,还自带了很多插件,可以通过配置文件,简单地开关一个插件
npm i hexo-theme-next
# 编辑配置文件,将 theme 的值改为 next。后面发布时,还要编辑这个文件
vim _config.yml
# 主要是修改博客默认语言和 url,url 如果不配置,没有办法使用统计插件
language: zh-CN
theme: next
url: https://<your_website>.com
new_post_name: :year-:month-:day-:title.md

# 启动服务器,可以缩写为 hexo s。类似地,hexo deploy 可以写成 hexo d
hexo server

# 如果启动有问题,安装以下类库
npm install hexo-renderer-pug hexo-renderer-stylus

配置主题

1
2
# 复制主题默认配置文件到博客目录下,配置文件不多,快速浏览一遍,看名字都能知道是干嘛的
cp node_modules/hexo-theme-next/_config.yml _config.next.yml

二、发布到 服务器

服务器端设置

服务器可以使用 nginx,也可以使用宝塔面板。宝塔比较方便。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 先添加一个 git 用户,并设置密码
useradd git && passwd git
# 创建一个目录,并将修改所有权限为 git
mkdir /var/www/hexo
chown -R git:git /var/www/hexo
# 创建一个空的 git 仓库,用来让 hexo 推送
su git && cd
git init --bare blog.git
# 编辑 git 钩子,使得 hexo 每次在本地提交后,就更新文件
vim blog.git/hooks/post-receive
#!/bin/sh
git --work-tree=/var/www/hexo --git-dir=/var/repo/blog.git checkout -f

# 添加执行权限
chmod +x blog.git/hooks/post-receive

本地配置

1
2
3
4
5
6
7
8
9
10
11
12
13
# 首先安装 deployer
cd blog
npm install hexo-deployer-git -g
# 编辑 _config.yml,在最后配置 deployer
deploy:
type: git
repo: git@x.x.x.x:blog.git

# 为了避免每次部署都要输入密码,将本机公钥复制到服务器上
ssh-copy-id git@x.x.x.x

# 部署
hexo deploy --generate

顺利的话,到这里就完成了。

遇到的问题

1
2
3
4
5
6
7
8
9
10
问题:更换默认主题后,执行 `hexo server` 时报错  err: Error [ERR_STREAM_DESTROYED]: Cannot call write after a stream was destroyed
解决:npm install hexo-renderer-pug hexo-renderer-stylus

问题:Authentication refused: bad ownership or modes for file
解决:删除 authorized_keys,重新 ssh-copy-id

问题:服务器的端口不是 22
解决:vim ~/.ssh/config,在这个文件中配置端口
Host x.x.x.x
Port yyyy