前言

之所以弃坑WP,是因为很早以前就觉得ta真的很臃肿,但是一直没有兴趣去换一个博客程序,后来周围的伙伴有在用github+hexo,但是我觉得github pages有点不稳定,也就没有去换hexo。直到!!!半月前,腾讯云发了一个邮件提醒我说wp这货有重大漏洞了,就问你更不更新4.7,卧槽,那个更新提示真的好烦,早就被我关了,现在让我更新,我跟你讲哦,完全不可能。于是我就开心地度过了半月,终于事发了。这周五,腾讯云又给我发了个邮件,说有几个来历不明的域名指向了我的主机,怀疑是大黑阔 在搞代理跳板之类的。最后,我一怒之下,重装了系统。也就有了下面投向hexo怀抱的故事。 另外,在安装hexo的过程中遇到了很多坑的地方,遂写下来,纪念我没有做作业而花了一天半的时间来搭环境的痛苦事情。

常见的Hexo部署方案

  • 本地编写MD文档->本地Hexo解析为静态页->提交到VPS上的Git或者Github仓库->通过nginx或者github pages对外访问
  • 本地编写MD文档->同步到VPS并安装Hexo服务解析成静态页->Hexo server对外访问
  • 第一种方案的优点是:

VPS上只需要安装Git和Nginx,不用Git也要用其他工具把文件同步上去,那就索性装个Git自动同步吧
不在VPS上装Hexo服务,节省点资源
Git提交后利用Git的post-receive完成自动部署到网站根目录
文件同时提交到GitHub和VPS,这样有个备份,VPS不行了直接改下DNS解析就可以无缝过渡
Git上能保留完整的修改记录

  • 缺点:

需要在写文档的机器上安装Hexo,换个电脑用需要重新装,GitHub同步有点坑
source: sobaigu.com

本地环境搭建

备注:本地测试环境:Win 10 64位

准备

  • Nodejs

    Hexo基于Node.js写的,需要提供Hexo依赖环境

    官网下载安装包,全程默认安装下去就好了

    测试是否安装成功: cmd命令行下node -v npm -v

  • Git

    将静态页提交到GitHub等仓库托管服务商

    注意的是还是全程默认安装下去就好

    测试安装成功:git -version

    安装以后,打开Git Bash 输入:

    1
    2
    git config --global user.name "yourname"
    git config --global user.email youremail@email.com
    1
    2
    3
    Eg:
    git config --global user.name "test"
    git config --global user.email test@qq.com

    每次Git提交都会使用该信息。它被永远的嵌入到了你的提交中

安装和配置Hexo

创建一个文件夹用于放置网站文件,然后在文件夹空白处右键,选择打开git bash。在命令行中输入

npm install hexo-cli -g

可能你会看到一个WARN,但是不用担心,这不会影响你的正常使用。 然后输入`npm install hexo --save
等安装好了我们来看看是否安装成功hexo -v
如果有显示版本之类的信息则安装成功,接下来,输入hexo init
然后输入

1
2
npm install hexo-deployer-git --save
npm install hero-server

安装所需要的包,第一个工具是负责将内容提交到仓库,第二个工具是提供部署前的预览
下面我们来测试一下是否安装成功
使用 hexo new <文章名称> 来新建文章,该命令会生成一个 .md文件放置在 sources/_posts文件夹。
hexo new "hello Hexo"
用md编辑器将md文件编辑完毕以后, 使用hexo g.md文件渲染成静态文件,然后启动hexo-server

1
2
hexo g
hexo s

现在便可以打开浏览器访问 http://localhost:4000 来查看我们的博客了!

配置ssh公钥

下面在git bash中依次输入

1
2
3
4
cd ~
mkdir .ssh
cd .ssh
ssh-keygen -t rsa

在系统当前用户文件夹下生成了私钥 id_rsa 和公钥 id_rsa.pub ,其中公钥需要上传到服务器或者在服务器新建公钥文件并粘贴公钥内容,待会会用到。

修改Hexo配置文件

打开位于 hexo 文件夹下的 _config.yml,修改 deploy 参数:

1
2
3
deploy:
type: git
repo: git@服务器的ip地址:hexo.git

注意type和repo前要打两个空格,不是tab键,然后冒号后要打一个空格

本地环境到此时搭建完毕

服务器环境搭建

测试环境为 Ubuntu 16.04.1 LTS x64 root用户

安装依赖

首先,在 VPS 上安装 Git 和 nginx。

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

新建用户

新增一个名为 git 的用户,过程中需要设置登录密码,先输入两次密码,然后按几次回车就可。

adduser git

(重点)下面给用户 git 赋予无需密码操作的权限

1
2
chmod 740 /etc/sudoers
vi /etc/sudoers

找到root ALL=(ALL:ALL) ALL 在下一行添加git ALL=(ALL:ALL) ALL,然后保存。(打开文件之后要按i进入编辑模式,编辑完以后按Esc,再输入:wq回车才能保存;如果想不保存直接退出请输入:q!。)

然后更改读写权限。

chmod 440 /etc/sudoers

连接ssh

下面将本地的ssh公钥上传到vps,在服务器端输入

1
2
3
4
5
su git
cd ~
mkdir .ssh && cd .ssh
touch authorized_keys
vi authorized_keys

现在要打开本地Git Bash,输入vi ~/.ssh/id_rsa.pub,把里面的内容复制下来粘贴到上面打开的文件里,然后保存。

配置Git

建立git库

1
2
3
cd ~
mkdir hexo.git && cd hexo.git
git init --bare

用户授权(操作nginx放网页地方的权限)

1
2
3
cd /var/www
sudo mkdir hexo
sudo chown git:git -R /var/www/hexo

配置Git Hooks

1
2
cd ~/hexo.git/hooks
vi post-receive

输入内容并保存:

1
2
3
4
5
6
7
8
#!/bin/bash
GIT_REPO=/home/git/hexo.git
TMP_GIT_CLONE=/tmp/hexo
PUBLIC_WWW=/var/www/hexo
rm -rf ${TMP_GIT_CLONE}
git clone $GIT_REPO $TMP_GIT_CLONE
rm -rf ${PUBLIC_WWW}/*
cp -rf ${TMP_GIT_CLONE}/* ${PUBLIC_WWW}

赋予可执行权限:

1
chmod +x post-receive

配置nginx

执行sudo vi /etc/nginx/conf.d/hexo.conf,输入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
server {
listen 80 ;
listen [::]:80;
root /var/www/hexo;
server_name example.com;
access_log /var/log/nginx/hexo_access.log;
error_log /var/log/nginx/hexo_error.log;
error_page 404 = /404.html;
location ~* ^.+\.(ico|gif|jpg|jpeg|png)$ {
root /var/www/hexo;
access_log off;
expires 1d;
}
location ~* ^.+\.(css|js|txt|xml|swf|wav)$ {
root /var/www/hexo;
access_log off;
expires 10m;
}
location / {
root /var/www/hexo;
if (-f $request_filename) {
rewrite ^/(.*)$ /$1 break;
}
}
location /nginx_status {
stub_status on;
access_log off;
}
}

重启 nginx 服务器:

1
sudo /etc/init.d/nginx restart

服务器端配置结束

发布文章

在本地编辑好文章之后使用 hexo g 生成静态网页,hexo s 在本地预览,hexo d 提交到服务器。

大功告成!!

后记

这次配置遇到了很多坑,nginx的文件夹指向,git用户的权限等等问题,还有改hexo配置文件时少打空格这种坑,也找了很多资料,最大的感触就是找资料不要用baidu!!!!!!要么是不相关的博文,要不就不靠谱,白白费了我很多时间,后来在Google上找到了很多相关的资料,本来以为部署到vps这类文章很少,实际google看来还是很多很好的文章,谢谢你们的博文!!!

另外,hexo还有很多坑,如果朋友看了这篇文章,遇到了问题,欢迎和我一起探讨解决

最后的最后

Google大法好!!!!!!

参考资料