写在前面:
该篇博客为个人记录为主,若有错漏,请留言提出。

上一篇文章讲到Hexo的简单介绍和配置使用, 这篇文章来说一下配置好的Hexo博客如何部署到github或者阿里云的服务器。

部署到github

部署到github网上有很多教程, 这里就简单介绍一下,这篇博客的重点是如何部署到自己的阿里云主机上。

注册github帐号

这。。。就不用教了吧。

新建项目

创建一个名为:用户名.github.io的项目,例如我的用户名是weiyf,则要创建的项目名是:weiyf.github.io

配置github上的sshkey

在你自己的电脑生成公钥和私钥(如果有就不需要再生成),在github上添加该sshkey。

修改Hexo下的_config.yml

1
2
3
deploy:
type: git
repo: git@github.com:用户名/用户名.github.io.git

测试自动部署

生成一篇测试文章

1
hexo new post ”测试github自动部署“

生成静态文件

1
hexo g

部署上github

1
hexo d

当然你也可以生成之后立刻部署

1
hexo g --d

浏览器打开http://用户名.github.io,测试是否部署上github

部署到阿里的云主机

部署到github非常简单,只需要简单的几条命令便可以实现自动部署,但是放在github上速度非常慢,而且是公开的,所以我们非常有必要将我们的Hexo博客部署到我们自己的云主机,那我们是否能实现几条命令就自动部署呢?如果不能实现或者很变得复杂, 那就得不偿失了,下面我们就来探讨以下如何像github一样简单自动部署到自己的云主机。

原理

我们实现自动部署是利用了Git Hooks, 那么什么是Git Hooks呢?
Git Hooks就是一些特定的事件就会触发的脚本, 例如commit, push, merge等, 那么我们就可以自己写一些脚本来实现当我们本地push的时候运行我们写的脚本进行自动部署。
在使用我们自己的服务器有必要简单配置一下。

服务器的配置

参考我之前的文章Linux服务器基本配置, 配置一个非root账号。

自动部署思路

实现自动部署的前提是在我们自己的服务器上建立一个Git远程仓库,和一个获取更新的本地仓库。
自动部署的大概思路是:

  1. 我们本地进行push
  2. git服务器更新并触发Hook下的我们写好的脚本
  3. 执行我们的脚本定位到服务器的本地仓库目录,对本地仓库进行更新(pull)

使用非root用户登陆服务器

git安装

以Ubuntu为例,执行下面的命令,安装并配置git的name和e-mail

1
2
3
sudo apt-get install git
git config --global user.name "你的用户名"
git config --global user.email "你的e-mail"

初始化远程仓库

新建一个目录名为website,仓库名为blog(当然你也可以自定义目录名和仓库名)

1
2
3
sudo mkdir /website
cd /website
sudo git init --bare blog.git

给该用户设置该目录的权限

1
sudo chown -R 用户名:用户名 blog.git

配置ssh

如果你没有配置ssh,请按照Linux服务器基本配置, 配置sshkey。

初始化服务器的本地仓库

找个地方放本地仓库, 我是直接放在远程仓库的目录下了

1
2
cd /website
git clone blog.git

因为是在同一部电脑,可以直接使用本地路径进行克隆

1
ls

执行ls命令之后你会发现有一个blog.git目录和blog目录。
改变以下当前用户该目录的权限

1
chown -R 用户名:用户名 blog

编写hook脚本

1
vim blog.git/hooks/post-receive

复制粘贴以下内容

1
2
3
4
5
6
#!/bin/sh
echo "开始部署"
unset GIT_DIR
cd /website/blog
git pull origin master
echo "部署成功"

保存之后添加可执行权限:

1
chmod +x blog.git/hooks/post-receive

安装Nginx

1
sudo apt-get install nginx

启动Nginx服务器

1
sudo /etc/init.d/nginx start

浏览器打开服务器ip或域名你应该会看到Welcome to nginx!

配置nginx服务器:

查看nginx的配置文件

1
cat /etc/nginx/nginx.conf

发现找不到server{...}闭包
在后面发现它引入了另外一个目录下的配置文件,所以我们就去看看它引入的配置文件有没有server{...}

1
include /etc/nginx/sites-enabled/*;

打开/etc/nginx/sites-enabled, 然后ls发现只有一个名为default的配置文件
我们来编辑以下这个文件

1
2
3
cd /etc/nginx/sites-enabled
ls
sudo vim default

打开之后你就会发现有server{...}的闭包了。我们对这个文件进行修改:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server {
listen 80; #端口
server_name localhost 你的域名或者ip; #域名或IP
root /website/blog; #站点根目录
charset utf-8; #文件编码
index index.html index.htm; #首页

error_page 404 /404.html; #404页面
error_page 500 502 503 504 /50x.html; #服务端错误页面

#url访问匹配路径,可以添加多个
location / {
index index.html index.htm;
root /website/blog; #这里可以是绝对路径或者相对路径,基于站点根目录
}
}

保存,使用以下命令测试配置是否正确:

1
sudo nginx -t -c /etc/nginx/nginx.conf

如果配置无误, 重启Nginx服务器是配置生效。

1
sudo /etc/init.d/nginx restart

服务端配置完毕, 下面进行Hexo部署

测试Hexo自动部署

修改Hexo配置文件:

1
2
3
4
deploy:
type: git
repo: 用户@域名或IP:远程仓库路径(例如: <用户名>@<IP>:/website/blog.git)
branch: master

使用命令进行测试:

1
hexo g --d

如果命令行输出开始部署部署成功,则自动部署成功。

总结:

其实部署到阿里云服务器跟部署到github是类似的,万变不离其宗,只是需要自己编写脚本和配置,折腾一下也能实现。