0%

部署Hexo博客到VPS

记得刚刚搭建博客的时候是基于 Hexo 框架部署到 GitHub Page上,可是久而久之发现问题了,我朋友移动用户访问我的网站,根本进不去,一直卡在一个空白页面。但我自己访问却很快速度,最后才知道是自己缓存问题,清除缓存,第一次访问也很慢。于是我就折腾起VPS,写了如下文章。


快速开始

  • 首先你得购买一台 VPS,我的 VPS 是 Vultr 的厂商的,访问速度还可以。
  • 我的博客基于 Hexo 的,以下以 Hexo搭建为例。

在VPS上操作

我的 VPS 系统为 CentOS,以下操作以 CentOS 为例,我已经使用 LNMP 安装好了 ngnix 环境。

安装 lnmp 请参考官方链接: https://lnmp.org/install.html
添加虚拟主机请参考官方链接:https://lnmp.org/faq/lnmp-vhost-add-howto.html

接下来安装 git。

1
2
3
[root@vultrguest ~]# yum install git
[root@vultrguest ~]# git --version
git version 2.18.2

新建 git 用户并授权。

1
2
3
[root@vultrguest ~]# adduser git
[root@vultrguest ~]# chmod 740 /etc/sudoers
[root@vultrguest ~]# vim /etc/sudoers

在编辑器找到以下内容并添加一行。

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

保存退出后执行。

1
[root@vultrguest ~]# chmod 440 /etc/sudoers

切换 git 用户并配置 SSH。
Git 是下载和上传代码的用户,因此每次都要输入密码才能使用,所以我们可以使用 SSH 证书在本地生成公钥并复制到服务器。这样,每次登陆时,服务器都会自动检查公钥是否匹配。

这里如果不是很理解SSH协议,建议参考阮一峰这篇关于SSH原理与运用(一):远程登录文章,讲解很详细。

1
2
3
[root@vultrguest ~]# su git
[git@vultrguest ~]$ mkdir ~/.ssh && cd ./ssh
[git@vultrguest .ssh]$ touch authorized_keys

从本地将公钥复制到 VPS 上 git 用户的 ~/.ssh/authorized_keys 文件,执行如下命令:

1
$ ssh-copy-id user@host

然后修改公钥文件的相应权限。

1
2
[git@vultrguest ~]$ chmod 600 ~/.ssh/authorized_keys
[git@vultrguest ~]$ chmod 700 ~/.ssh

测试从本地是否无需密码登陆即可登陆 VPS。

1
$ ssh git@<你的vps的ip地址/ip指向的域名>

如果成功,即可免密登陆 VPS。

创建 git 仓库。

1
2
3
[git@vultrguest ~]$ mkdir blog && cd ./blog
[git@vultrguest blog]$ mkdir blog.git && cd ./blog.git
[git@vultrguest blog.git]$ git init --bare

为网站目录授权

使用chattr 解锁文件,只有LNMP自动安装的才需要此步骤,因为LNMP默认开启了防跨目录功能,所以每个独立的vhost根目录下都有一个上了锁的.user.ini,需要root权限来解锁。

1
[root@vultrguest ~]# chattr -i /home/wwwroot/www.azjhong.com/.user.ini

赋予git用户网站目录所有权,使用以下命令授权:

1
chown git:git -R /home/wwwroot/www.azjhong.com

记得给文件再上🔒,要不然访问同ip其他站点的时候会产生跨站非法访问。

1
chattr +i /home/wwwroot/www.azjhong.com/.user.ini

配置 git hooks

新建 post-receive。

1
2
3
[git@vultrguest ~]$ cd /home/git/blog/blog.git/hooks
[git@vultrguest hooks]$ touch post-receive
[git@vultrguest hooks]$ vim post-receive

在 post-receive 内输入以下内容并保存退出。

1
2
3
4
5
6
7
8
9
10
#!/bin/bash
#git仓库
GIT_REPO=/home/git/blog/blog.git
TMP_GIT_CLONE=/tmp/hexo
#你的网站目录
PUBLIC_WWW=/home/wwwroot/www.azjhong.com
rm -rf ${TMP_GIT_CLONE}
git clone $GIT_REPO $TMP_GIT_CLONE
rm -rf ${PUBLIC_WWW}/*
cp -rf ${TMP_GIT_CLONE}/* ${PUBLIC_WWW}

授予脚本可执行权限。

1
[git@vultrguest hooks]$ chmod +x post-receive

在本机上操作

打开 hexo 文件夹,修改站点配置文件 _config.yml,修改如下内容:

1
2
3
4
deploy:
type: git
repo: git@<你的vps的ip/ip指向的域名>:/home/git/blog/blog.git
branch: master

在 hexo 目录下使用 bash 执行如下命令:

1
$ hexo clean && hexo g && hexo d

以上基本实现了本地的静态博客远程部署到你的服务器上。

参考文章
^_^