利用GitHook持续部署Hexo博客

Author Avatar
陈高勋 3月 01, 2017
  • 在其它设备中阅读本文章

Hexo博客是一款基于Node.js的静态博客框架。

安装Hexo

首先确保本地已经安装Node.js

安装并创建hexo博客

cd ~
npm install hexo-cli -g
hexo init blog
cd blog
npm install

安装发布插件

npm install hexo-deployer-git --save

服务器创建静态博客存储Git仓库

示例服务器环境:

  • Centos 6.8
  • Git 1.7.1

创建git用户

sudo useradd git

创建仓库并附权限

sudo git init --bare /home/git/hexo-server.git
sudo chown -R git:git /home/git/hexo-server.git

给git用户附sudo权限

visudo

在文件最后一行加上

git ALL=(ALL) NOPASSWD: ALL

给root用户创建ssh-key

sudo mkdir ~/.ssh
sudo ssh-keygen

给git用户创建ssh-key

sudo mkdir /home/git/.ssh
su git
cd ~
ssh-keygen

多用户免密使用Git

将多用户的ssh-key添加到服务器git用户的authorized_keys

本地:

cat ~/.ssh/id_rsa.pub | ssh root@your_host "cat - >> /home/git/.ssh/authorized_keys"

服务器:

cat ~/.ssh/id_rsa.pub >> /home/git/.ssh/authorized_keys
cat /home/git/.ssh/id_rsa.pub >> /home/git/.ssh/authorized_keys

创建GitHook

cd /home/git/hexo-server.git/hooks
vim post-receive

创建 post-receive

#!/bin/sh
cd /var/www/hexo-server
unset GIT_DIR
sudo git pull origin master

附权限:

chmod +x post-receive

服务器克隆部署仓库

cd /var/www
su git
sudo git clone git@localhost:/home/git/hexo-server.git

nginx配置(https协议):

server {
    listen               443 ssl http2;

    server_name          your_host;
    server_tokens        off;

    ssl_certificate      /var/www/ssl/chained.pem;
    ssl_dhparam          /var/www/ssl/dhparams.pem;

    location / {
        root             /var/www/hexo-server/;
        index            index.html index.htm;
    }
}

server {
    listen       80;
    server_name  your_host;

    return 301 https://$host$request_uri;
}

本地Hexo配置远程部署仓库

cd ~/blog
vim _config.yml

修改 _config.yml :

deploy:
  type: git
  repository: git@your_host:/home/git/hexo-server.git
  branch: master

发布博客

hexo generate && hexo deploy

至此可以在实现本地一键发布Hexo博客在私有的服务器了。