Hexo博客同时部署到GitHub Page和个人服务器

前言

之前是把博客部署到了GitHub Page上的,但是使用一段时间后发现内网访问太慢,于是打算将该博客同时部署到GitHub Page和个人服务器上,将个人博客部署到GitHub Page教程可以参考本人之前的博客:Hexo搭建博客并部署到github上,本博客记录了个人服务器的部署流程;

服务器环境

  1. ubuntu 18.04

  2. git 2.17.1

  3. nginx 1.14.0

步骤

安装git

1
root@localhost:~# apt install git

安装Nginx

1
root@localhost:~# apt install nginx

输入如下命令启动nginx,在浏览器中输入服务器公网地址即可查看nginx默认界面;

1
root@localhost:~# service start nginx

配置nginx

进入nginx的配置文件目录,打开default文件

1
2
root@localhost:~# cd /etc/nginx/sites-available
root@localhost:/etc/nginx/sites-available# vim default

root /var/www/html修改为root /var/www/html/blog,即设置本博客网站的根目录;

创建git用户

1
root@localhost:~# adduser git

赋予git用户权限,打开/etc/sudoers文件

1
2
root@localhost:~# chmod 740 /etc/sudoers
root@localhost:~# vim /etc/sudoers

找到如下内容

1
2
## Allow root to run any commands anywhere
root ALL=(ALL) ALL

在下面添加一行内容

1
git     ALL=(ALL)    ALL

保存退出并改回权限

1
root@localhost:~# chmod 400 /etc/sudoers

设置SSH

切换为git用户,创建 ~/.ssh文件夹和~/.ssh/authorized_keys文件

1
2
3
root@localhost:~# su git
git@localhost:/root$ mkdir ~/.ssh
git@localhost:/root$ vim ~/.ssh/authorized_keys

将本地用户目录下的.ssh文件夹下的id_rsa.pub文件里的内容复制到authorized_keys中并赋予相应的权限

1
2
git@localhost:~$ chmod 600 ~/.ssh/authorzied_keys
git@localhost:~$ chmod 700 ~/.ssh

此时,在本地客户端输入ssh -v git@服务器ip地址即可进行ssh登录;

git仓库设置

创建git仓库目录

1
root@localhost:~# mkdir /var/repo

将repo目录及其子目录用户组设置为git

1
root@localhost:~# chown -R git:git /var/repo/

同时将网站根目录的用户组设置为git

1
root@localhost:~# chown -R git:git /var/www/html/blog

git-hooks自动化部署博客

服务器建立裸库,使用git用户登录,确保git用户拥有仓库所有权

1
2
3
root@localhost:~# su git
git@localhost:/root$ cd /var/repo/
git@localhost:/var/repo$ git init --bare blog.git

使用git-hooks同步网站根目录,编辑/var/repo/blog.git/hooks文件夹下的post-update文件内容如下

1
2
#!/bin/sh
git --work-tree=/var/www/html/blog --git-dir=/var/repo/blog.git checkout -f

保存后,赋予该文件可执行权限

1
git@localhost:/var/repo/blog.git/hooks$ chmod +x post-update

配置hexo根目录下的_config.yml文件

1
2
3
4
5
deploy:
type: git
repo:
github: git@github.com:Leeyuxun/Leeyuxun.github.io.git,master
hexo: git@服务器IP:/var/repo/blog.git,master//添加内容

测试

在本地客户端输入如下内容,进行测试部署

1
hexo clean && hexo g -d