摘要

Hexo 是用 Node.js 开发的一个静态站点生成器(Static Site Generator),支持 Markdown 语法写作,有着强大的插件系统,而且性能优异。本文将记录如何将hexo在本地搭建的博客部署到阿里云的Ubuntu16.04服务器上。(通过云服务器上的私有 Git 仓库部署到 Web 服务器目录下)

服务端配置

在云服务器上安装 Git 和 Nginx 两个必备的软件包。Git 用于版本管理和部署,Nginx 用于静态博客托管。

1
2
sudo apt-get update
sudo apt-get install git nginx

Git 配置

在 /var/repo/ 下,创建一个名为 hexo_static 的裸仓库(bare repo)。如果没有 /var/repo 目录,需要先创建;然后修改目录的所有权和用户权限,之后 ubuntu 用户都具备/var/repo 目录下所有新生成的目录和文件的权限。

1
2
3
sudo mkdir /var/repo/
sudo chown -R $USER:$USER /var/repo/
sudo chmod -R 755 /var/repo/

初始化git仓库

1
2
cd /var/repo/
git init --bare hexo_static.git

配置 Nginx 托管文件目录

接下来,创建 /var/www/hexo 目录,用于 Nginx 托管,并修改权限。

1
2
3
sudo mkdir -p /var/www/hexo
sudo chown -R $USER:$USER /var/www/hexo
sudo chmod -R 755 /var/www/hexo

修改 Nginx 的 default 设置:

1
sudo vim /etc/nginx/sites-available/default

将其中的 root 指令指向 /var/www/hexo 目录

1
2
3
4
5
6
7
8
9
...

server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;

root /var/www/hexo; # 需要修改的部分
index index.html index.htm;
...

保存并退出文件。如果以后购买并备案域名之后,可以再将配置中的 default_server 修改为你的域名。
最后,重启 Nginx 服务,使得改动生效。

创建Git钩子

接下来,在服务器上的裸仓库 hexo_static 创建一个钩子,在满足特定条件时将静态 HTML 文件传送到 Web 服务器的目录下,即 /var/www/hexo。
在自动生成的 hooks 目录下创建一个新的钩子文件:

1
vim /var/repo/hexo_static.git/hooks/post-receive

在该文件中添加两行代码,指定 Git 的工作树(源代码)和 Git 目录(配置文件等)。

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

保存并退出文件,并让该文件变为可执行文件。

1
chmod +x /var/repo/hexo_static.git/hooks/post-receive

当当当!!!到这里服务器的配置就完成啦!

下面来配置_config.yml中的deploy选项

deploy配置

首先修改URL为自己的域名或者公网ip地址,比如我的就是www.jinminrui.cn
然后修改deploy

1
2
3
4
deploy:
type: git
repo: root@47.100.221.250(云服务器的IP地址):/var/repo/hexo_static
branch: master

最后!一键部署到位!
hexo generate && hexo deploy