使用Nginx+Hexo搭建博客并实现服务器自动部署

安装hexo非常简单,但是安装之前需要确保已经安装了git和node.js

1.安装git

1.Windows用户可以直接下载安装文件安装
2.Mac用户可以下载安装文件,或者使用homebrew安装

brew install git

3.Linux用户使用命令(Ubuntu, Debian)

sudo apt-get install git-core

或命令(Fedora, Red Hat, CentOS)

sudo yum install git-core

2.安装node

安装node使用nvm

wget -qO- https://raw.github.com/creationix/nvm/master/install.sh | sh

安装之后需要重启终端
然后安装node

nvm install stable

不过由于某种众所周知的原因,安装过程可能非常缓慢,可以考虑科学上网,另外也可以下载安装文件进行安装,或源码文件进行编译安装,node中文网 这里下载似乎比较快。
另外,Windows用户直接下载安装文件安装最快捷,安装时记得勾选Add to Path

3.安装hexo并初始化项目

先检查一下git和node是否安装好了

git --version
node --version

如果正常显示git和node的版本则可以继续下面的操作了,否则请先进行第一步的操作

好的,继续

npm install -g hexo-cli

安装成功后切换到你想要创建博客的目录,然后执行

hexo init <folder>
cd <folder>
npm install

其中folder为博客目录名称,换成你想要的名称即可
至此,第一步已经完成。

第二步 配置服务器

1.配置Nginx

ssh连接你的服务器,参考这里
安装Nginx

yum install -y nginx

启动Nginx服务

service nginx start

测试Nginx服务器

wget http://127.0.0.1

能正常获取inde.html文件说明Nginx安装成功

2.建立git仓库

安装git,参考第一步
新建git用户

adduser git

建立裸仓,参考

cd /home/git
git init --bare hexo.git
chown -R git:git hexo.git

将本地机器上的ssh公钥填入/home/git/.ssh/authorized_keys文件(若还未创建公钥,参考这里
在本机

cat ~/.ssh/id_rsa.pub

复制公钥
在服务器

nano /home/git/.ssh/authorized_keys

粘贴公钥,Ctrl+x保存,输入y,然后回车即可

配置Nginx

查找Nginx配置文件

nginx -t

笔者的配置文件位于/etc/nginx/nginx.conf.default,修改public文件所在目录

listen       80;
root   /home/git; 
server_name  localhost;

location / {
  index  index.html index.htm;
}

注意,笔者是将git用户目录作为Nginx服务器根目录,这里随读者喜好,但是要注意文件权限问题。
保存后重启Nginx服务器

service nginx restart

第三步实现自动部署

在第二步建立的裸仓中(即hexo.git文件夹中),找到hooks目录下的post-update.sample,重命名为post-update
填入如下代码 参考这里

#!/bin/sh
git --work-tree=/home/git --git-dir=/home/git/hexo.git checkout -f

修改权限使其可执行

chmod +x post-update

接下来,在第一步中建立的hexo项目目录,编辑_config.yml,修改deploy项,类似如下

deploy:
  type: git
  repo: git@server:/home/git/hexo.git
  branch: master

将server改为你的服务器地址
在hexo项目目录中安装hexo-deployer-git

npm install hexo-deployer-git --save

好了,现在执行

hexo new <title>

title换成文章标题
然后执行

hexo g -d

g和d是generate和deploy的简写
另外你可以直接编辑或新建hexo项目目录下./source/_posts目录里的md文件(至于Markdown语法,看看这里吧)
这时访问你的服务器试试吧!!!