实现自动化部署Hexo到Linux服务器

又懒了好久没写博客…

最近忽然发现百度居然不会爬取部署在github上的博客文章,所以准备把原来的博客移到我自己的VPS上。

服务器信息:

  • 国外的VPS - Vultr
  • Linux - CentOS 7

关于国外VPS,推荐Vultr吧,我用的新加坡机房,速度还是挺快。还有原来用的搬瓦工也不错。

这里不讲NodeJs环境的配置了,网上教程很多。本文主要内容:

  1. ssh免密码连接Linux
  2. CentOS 7下安装Hexo
  3. CentOS 7下安装Git
  4. 实现本地Git方式部署网站到服务器

SSH免密码登陆Linux

服务器端:

CentOS 7 默认是已经启动了 ssh 服务的。可以通过如下命令查看 ssh 服务是否启动

1
# systemctl status sshd.service

本地客户端:

执行如下命令,生成公钥。

1
$  ssh-keygen -t rsa

然后执行如下命令,把生成的公钥发送到服务器上去。

1
2
$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@服务器地址

需要输入用户名密码,然后回车回车。。。就好了

成功之后,通过

1
$ ssh root@服务器地址

无需密码就可以连接服务器了。

CentOS 7下安装Hexo

默认已经安装好 NodeJs 环境。安装 Hexo 只要以下三步。

1
2
3
# hexo init <folder> // 初始化hexo目录,<folder>=文件夹名,不存在会创建该文件夹
# cd <folder> // 进入hexo目录
# npm install // 安装模块依赖包

CentOS 7下安装Git

1.安装 Git :

1
# sudo yum install git 

2.创建一个 git 用户,用来运行 git 服务:

1
# sudo adduser git

3.初始化 Git 仓库,将其放在 /var/repo/blog.git (或者其他任意目录)下的:

1
2
3
# sudo mkdir /var/repo
# cd /var/repo
# sudo git init --bare blog.git

使用 --bare 参数,Git 就会创建一个裸仓库,裸仓库没有工作区,我们不会在裸仓库上进行操作,它只为共享而存在。

4.配置 git hooks,这里使用 post-receive 的 hook,这个 hook 会在整个 git 操作过程完结以后被运行。

blog.git/hooks 目录下新建一个 post-receive 文件:

1
2
# cd /var/repo/blog.git/hooks
# vi post-receive

post-receive 文件中写入如下内容:

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

注意,/var/www/hexo 要换成你自己的部署目录。上面那句 git 命令可以在我们每次 push 完之后,把部署目录更新到博客的最新生成状态。这样便可以完成达到自动部署的目的了。

不要忘记设置这个文件的可执行权限:

1
chmod +x post-receive

5.改变 blog.git 目录的拥有者为 git 用户:

1
# sudo chown -R git:git blog.git

ok,到此服务器端配置完成。

实现本地Git方式部署网站到服务器

本地必须安装 hexo-deploy-git 模块

1
$ npm install hexo-deployer-git --save

然后修改根目录下的 _config.yml

1
2
3
4
5
deploy:
type: git
repo: <repository url>
branch: [branch]
message: [message]

最后提交

1
2
$ hexo clean
$ hexo d

Over.