目前比较流行的博客搭建免费方案有hexo和jekyll,两者优缺点对比可参考博客博客搭建可行性方案( jekyll , hexo , Wordpress ),博主选择了hexo来搭建博客。
一开始博主没有自己的服务器,就借助github搭建了hexo。hexo+github搭建博客步骤可参考博客5分钟 搭建免费个人博客,next主题配置可参考博客hexo搭建个人博客–NexT主题优化。
后来博主拥有了自己的服务器,想着把博客全部迁移到自己的服务器上,就先在服务器搭建了一个git仓库,使得博客从GitHub迁移到了服务器的git。hexo部署到个人服务器参考从 0 开始搭建 hexo 博客。
但是这样还有一个不足之处,就是hexo是部署到本地的,使用多台电脑同时写博客就需要在两台电脑都搭建hexo环境。如何才能将hexo环境搭建在服务器上,而本地只需要一个git呢?解决思路就是,在服务器上搭建一个hexo环境,本地git上传hexo编译之前的文件到服务器git,然后触发钩子去执行一个脚本,到hexo文件夹下拉取最新提交,重新编译并部署一下hexo到服务器git,服务器git触发一个钩子将部署的文件克隆到一个利用nginx可以访问到的文件夹下。服务器git就需要存储hexo编译之前和之后的文件,存储编译之前的文件主要是方便多台电脑编写博客,所以git仓库分为两个分支,master分支和hexo分支,hexo分支存储编译之后的文件,master分支存储编译之后的文件。当然,也可以使用两个git仓库来分别存储编译之前和之后的文件。
接下来就是详细的教程了。
注:此教程只适用于习惯hexo并且需要在多台电脑同时编写博客的童鞋。
环境准备
服务器 阿里云(Ubuntu 16.04 64位)
创建git用户
-
创建一个git用户,用来运行git服务。
$ sudo adduser git
-
增加git用户执行sudo的权限,并免密执行。
$ sudo visudo
在
root ALL=(ALL:ALL) ALL
下添加一行git ALL=(ALL:ALL) ALL
;在
%admin ALL=(ALL) ALL
下添加一行%git ALL=(ALL) NOPASSWD: ALL
。执行
Ctrl+O
保存,回车,执行Ctrl+X
退出。 -
切换到git用户。
$ su git
以下操作均在git用户下执行。
搭建Git仓库
-
安装git。
$ sudo apt-get install git
-
创建git用户的git仓库目录。
$ sudo mkdir blog.git $ sudo chown -R git:git blog.git
-
生成密钥,并复制到
/home/git/.ssh/authorized_keys
中。此步骤是为了服务器上的hexo向git部署时不必输入密码。$ ssh-keygen -t rsa $ sudo chmod 700 /home/git/.ssh/ $ sudo chmod 600 /home/git/.ssh/authorized_keys
-
初始化Git仓库。
$ git init --bare blog.git
-
设置钩子。
$ vi blog.git/hooks/post-receive
#!/bin/bash # 读取被提交的分支 # refs/heads/hexo # refs/heads/master read mes mes ref if [ "$ref" == "refs/heads/hexo" ]; then rm -rf /tmp/blog rm -rf /usr/huihui/hexo/source/_post/* git clone -b hexo /usr/huihui/git /tmp/blog \cp -rf /tmp/blog/* /usr/huihui/hexo unset GIT_DIR cd /usr/huihui/hexo hexo clean hexo g hexo d elif [ "$ref" == "refs/heads/master" ]; then rm -rf /tmp/blog git clone /usr/huihui/git /tmp/blog rm -rf /var/www/blog/html/* cp -rf /tmp/blog/* /var/www/blog/html fi
-
赋予脚本执行权限。
$ sudo chmod u+x /usr/local/blog.git/hooks/post-receive
安装Nodejs
-
执行检查可更新的软件。
$ sudo apt-get update
-
安装Nodejs。
$ sudo apt-get install nodejs $ sudo apt install nodejs-legacy $ sudo apt install npm
-
更换淘宝镜像。
$ sudo npm config set registry https://registry.npm.taobao.org
-
查看配置是否生效 。
$ sudo npm config list
-
安装更新版本的工具N。
$ sudo npm install n -g
-
跟踪Nodejs版本。
$ sudo n stable
-
查看Nodejs版本。
$ nodejs -v
安装Hexo
-
安装hexo。
$ sudo npm install -g hexo-cli
-
创建hexo目录,修改hexo目录拥有者。
$ sudo mkdir hexo $ sudo chown -R git:git hexo
-
初始化hexo。
$ cd hexo $ hexo init
-
测试运行,-p可指定访问端口。
$ hexo s -p 8085
-
测试。
通过PC端浏览器访问
http://你的服务器ip地址:8085
,可以看到Hexo博客的首页。 -
部署配置。
$ vi _config.yml
将deploy处改为:
deploy: type: git repository: git@101.200.55.12:/usr/local/blog.git branch: master
-
安装hexo部署工具。
$ sudo npm install --save hexo-deployer-git
-
初始化git仓库,并将编译之前的文件推送到hexo分支。
$ git init $ git config --global user.email "你的邮件" $ git config --global user.name "你的名字" $ git remote add origin git@你的服务器id地址:/usr/local/blog.git $ git checkout -b hexo $ git add . $ git commit -m "初始的hexo" $ git push origin hexo
-
编译部署hexo。
$ hexo g $ hexo d
此时可以成功部署到git服务器。
安装Nginx
-
安装Nginx。
$ sudo apt-get install nginx
-
启动Nginx。
$ service nginx start
-
测试。
客户端浏览器访问
http://你的服务器ip地址
,可以看到Nginx的欢迎界面。 -
创建中间目录和博客目录。
$ sudo mkdir /tmp/blog $ sudo chown -R git:git /tmp/blog $ sudo mkdir -p /var/www/blog/html $ sudo chown -R git:git /var/www/blog/html $ sudo chmod -R 755 /var/www
-
创建虚拟主机配置文件。
$ vi /etc/nginx/conf.d
server { listen 8086; listen [::]:8086; root /var/www/blog/html; index index.html index.htm index.nginx-debian.html; server_name eliyar.biz www.eliyar.biz; location / { try_files $uri $uri/ =404; } }
端口号可根据个人需求配置。
-
重启Nginx。
$ sudo service nginx restart
-
测试。
$ vi /var/www/blog/html/index.html
<html> <head> <title>Welcome to Blog!</title> </head> <body> <h1>Success! The Blog server block is working!</h1> </body> </html>
浏览器访问
http://你的服务器ip地址:8086
,可以访问到页面。
最后
现在我们已经可以在多台电脑编写博客了,只需要在每台电脑上安装git即可。当需要换另一台电脑编写博客时,拉取远程git仓库hexo分支的代码,编写完成之后推送到hexo分支。