通过hexo发布静态网页到nginx

环境

把hexo的静态文件部署到nginx,环境是ubuntu。

nginx

参考默认的站点,改成blog目录:

1
2
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-enabled/blog
sudo rm /etc/nginx/sites-enabled/default

修改其中的root为$HOME/blog。然后重启服务:

1
sudo service nginx restart

创建站点目录,使用www-data组。

1
sudo usermod -a -G www-data $myuser

此时重新登陆下用户,便于这个用户可以chgrp到www-data。

1
2
3
4
sudo mkdir /var/www/blog
sudo chown $myuser /var/www/blog
chgrp www-data /var/www/blog/
chmod g+rwxs blog

注意,不能放到$HOME下面,因为ubuntu的$HOME对其他用户是隐藏的。

创建仓库

用这个git仓库的post-hook来实现自动checkout,这样就能做到push到这个仓库即静态发布。

创建裸仓库目录:

1
2
3
mkdir $HOME/repos
cd $HOME/repos
git init --bare blog.git

设置post-hook:

1
2
3
cd $HOME/repos/blog.git/hooks
mv post-update.sample post-update
echo "git --work-tree=/www/var/blog --git-dir=$HOME/repos/blog.git checkout -f" >> post-update

注意,这个仓库是发布仓库,用于存放发布后的网页,而不是本blog的源码仓库。

安装hexo

在本地安装node.js,然后安装hexo,如果全局安装:

1
2
3
npm install hexo-cli -g
npm install hexo -g
npm install hexo-deployer-git -g

我使用局部安装。

对目录进行init。因为不是全局安装,所以用npx来调用当前目录的module。

1
2
3
4
5
mkdir $HOME/blog && cd $HOME/blog
npm install hexo-cli
npm install hexo
npm install hexo-deployer-git
npx hexo init

本地预览:
m

1
2
npx hexo s
# 可访问 http://localhost:4000/

blog目录用仓库管理:

1
2
3
git init
git add .
git commit -am "init"

默认 ignore了 本地json module:

1
2
3
4
5
6
7
8
✗ cat .gitignore 
.DS_Store
Thumbs.db
db.json
*.log
node_modules/
public/
.deploy*/%

从hexo默认页面也可以看到几个关键的操作(都有缩写):

1
2
3
4
$ hexo new "My New Post"
$ hexo server
$ hexo generate
$ hexo deploy

为deploy配置好部署到远程git的操作。

修改_config.yml当中的deploy配置:

1
2
3
4
deploy:
type: git
repo: $user@$server_ip:~/repos/blog.git
branch: master

部署:

1
2
✗ npx hexo d
INFO Deploy done: git

观察远程文件没生效,后来发现post-hook需要去掉exec:

1
#exec git update-server-info

成功。

关于git的权限配置

git仓库的权限就是ssh的权限,为了直接用key访问,把本地的pub key放到远程的 ~/.ssh/authorized_keys 里面即可。

关于备案号

方法一

因为theme是在module代码里面的,所以最好找一个已经支持的,比如Fluid,然后配置_config.yml里面的beian即可。

安装参考:

1
https://github.com/fluid-dev/hexo-theme-fluid

1
npm install --save hexo-theme-fluid

然后到主_config.yml里面指定:

1
2
theme: fluid
language: zh-CN

到主题的_config.yml里面设定:

1
2
3
4
5
6
7
8
9
10
11
12
# 国内大陆服务器的备案信息
# For Chinese mainland website policy, other areas keep disable
beian:
enable: true
# ICP证号
icp_text: 京ICP证123456号
# 公安备案号,不填则只显示ICP
police_text: 京公网安备12345678号
# 公安备案的编号,用于URL跳转查询
police_code: 12345678
# 公安备案的图片. 为空时不显示备案图片
police_icon: /img/police_beian.png

方法二

直接修改

1
./node_modules/hexo-theme-landscape/layout/_partial/footer.ejs

在里面加代码即可。