在 VPS 上利用 Git Hooks 自动发布 Hexo 博客

January 7, 2017   VPS Hexo Git 博客相关

本文探讨的是,本地运行 hexo generate 后,通过 hexo deploy 将生成的网页文件提交到 VPS 上,从而触发 Git Hooks 自动将网页文件移到 nginx 网站目录,实现博客在网络的发布。

关于 Git 和 Nodejs、Hexo 的安装和配置在以前的文章写过了,在这里不重复说明。
《GitHub Pages + Hexo 搭建博客从入门到进阶》
《在 GitHub 和 Coding 上同步托管 Hexo 博客》

(测试环境为 Ubuntu 16.04.1 LTS x64。)

安装依赖

首先,在 VPS 上安装 Git 和 nginx。

sudo apt-get update
sudo apt-get install git-core nginx

配置用户

然后新增一个名为 git 的用户,过程中需要设置登录密码,先输入两次密码,然后按几次回车就可。

adduser git

给用户 git 赋予无需密码操作的权限(否则到后面 Hexo 部署的时候会提示无权限)

chmod 740 /etc/sudoers
vi /etc/sudoers

在图示位置添加git ALL=(ALL:ALL) ALL,然后保存。(vim 操作小贴士:打开文件之后要按i进入编辑模式,编辑完以后按Esc,再输入:wq回车才能保存;如果想不保存直接退出请输入:q!。)

然后更改读写权限。

chmod 440 /etc/sudoers

连接 ssh

接下来要把本地的 ssh 公钥上传到 VPS 。执行:

su git
cd ~
mkdir .ssh && cd .ssh
touch authorized_keys
vi authorized_keys

现在要打开本地Git Bash,输入vi ~/.ssh/id_rsa.pub,把里面的内容复制下来粘贴到上面打开的文件里。

然后建立放部署的网页的 Git 库。

cd ~
mkdir hexo.git && cd hexo.git
git init --bare

测试一下,如果在 Git Bash 中输入 ssh git@VPS的IP地址 能够远程登录的话,则表示设置成功了。

如果不成功,并且你的 VPS 的 ssh 端口不是 22 的话,请在Git Bash执行vi ~/.ssh/config,输入以下内容并保存:(成功就跳过这一步)

Host #VPS 的 IP
HostName #VPS 的 IP
User git
Port #SSH 端口
IdentityFile ~/.ssh/id_rsa

用户授权

接下来要给用户 git 授予操作 nginx 放网页的地方的权限:

cd /var/www
sudo mkdir hexo
sudo chown git:git -R /var/www/hexo

配置钩子

现在就要向 Git Hooks 操作,配置好钩子:

cd ~/hexo.git/hooks
vi post-receive

输入内容并保存:(里面的路径看着换吧,上面的命令没改的话也不用换)

#!/bin/bash
GIT_REPO=/home/git/hexo.git
TMP_GIT_CLONE=/tmp/hexo
PUBLIC_WWW=/var/www/hexo
rm -rf ${TMP_GIT_CLONE}
git clone $GIT_REPO $TMP_GIT_CLONE
rm -rf ${PUBLIC_WWW}/*
cp -rf ${TMP_GIT_CLONE}/* ${PUBLIC_WWW}

赋予可执行权限:

chmod +x post-receive

配置 nginx

然后是配置 nginx。执行sudo vi /etc/nginx/conf.d/hexo.conf,输入以下内容:

server {
  listen  80 ;
  listen [::]:80;
  root /var/www/hexo;
  server_name example.com;
  access_log  /var/log/nginx/hexo_access.log;
  error_log   /var/log/nginx/hexo_error.log;
  error_page 404 =  /404.html;
  location ~* ^.+\.(ico|gif|jpg|jpeg|png)$ {
    root /var/www/hexo;
    access_log   off;
    expires      1d;
  }
  location ~* ^.+\.(css|js|txt|xml|swf|wav)$ {
    root /var/www/hexo;
    access_log   off;
    expires      10m;
  }
  location / {
    root /var/www/hexo;
    if (-f $request_filename) {
    rewrite ^/(.*)$  /$1 break;
    }
  }
  location /nginx_status {
    stub_status on;
    access_log off;
 }
}

因为放中文进去会乱码所以就不在里面注释了。代码里面配置了默认的根目录,绑定了域名,并且自定义了 404 页面的路径。

最后就重启 nginx 服务器:

sudo /etc/init.d/nginx restart

配置 Hexo

VPS 的环境就做好了,现在要对本地的 Hexo 做一些微小的工作:

修改_config.yml,找到 deploy 的地方,把原来的配置修改成这样:

deploy:
- type: git
  repo: git@VPS的IP:hexo.git

现在,像往常一样,在本地执行 hexo deploy,见证奇迹吧。

参考资料

打赏支持

你可以点击 此处,扫描二维码给我打赏两块钱。简单几步,你就能让我在买煎饼时奢侈地多加一个鸡蛋:)