目前比较流行的博客搭建免费方案有 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 用户

  1. 创建一个 git 用户,用来运行 git 服务。

    $ sudo adduser git
    
  2. 增加 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 退出。

  3. 切换到 git 用户。

    $ su git
    

    以下操作均在 git 用户下执行。

# 搭建 Git 仓库

  1. 安装 git。

    $ sudo apt-get install git
    
  2. 创建 git 用户的 git 仓库目录。

    $ sudo mkdir blog.git
    $ sudo chown -R git:git blog.git
    
  3. 生成密钥,并复制到 /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
    
  4. 初始化 Git 仓库。

    $ git init --bare blog.git
    
  5. 设置钩子。

    $ 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
  6. 赋予脚本执行权限。

    $ sudo chmod u+x /usr/local/blog.git/hooks/post-receive

# 安装 Nodejs

  1. 执行检查可更新的软件。

    $ sudo apt-get update 
    
  2. 安装 Nodejs。

    $ sudo apt-get install nodejs 
    $ sudo apt install nodejs-legacy
    $ sudo apt install npm
    
  3. 更换淘宝镜像。

    $ sudo npm config set registry https://registry.npm.taobao.org
  4. 查看配置是否生效 。

    $ sudo npm config list
  5. 安装更新版本的工具 N。

    $ sudo npm install n -g
    
  6. 跟踪 Nodejs 版本。

    $ sudo n stable
    
  7. 查看 Nodejs 版本。

    $ nodejs -v
    

# 安装 Hexo

  1. 安装 hexo。

    $ sudo npm install -g hexo-cli
    
  2. 创建 hexo 目录,修改 hexo 目录拥有者。

    $ sudo mkdir hexo
    $ sudo chown -R git:git hexo
    
  3. 初始化 hexo。

    $ cd hexo
    $ hexo init
    
  4. 测试运行,-p 可指定访问端口。

    $ hexo s -p 8085
    
  5. 测试。

    通过 PC 端浏览器访问 http://你的服务器ip地址:8085 ,可以看到 Hexo 博客的首页。

  6. 部署配置。

    $ vi _config.yml
    

    将 deploy 处改为:

    deploy:
      type: git
      repository: git@101.200.55.12:/usr/local/blog.git
      branch: master
    
  7. 安装 hexo 部署工具。

    $ sudo npm install --save hexo-deployer-git
    
  8. 初始化 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
    
  9. 编译部署 hexo。

    $ hexo g
    $ hexo d
    

    此时可以成功部署到 git 服务器。

# 安装 Nginx

  1. 安装 Nginx。

    $ sudo apt-get install nginx
    
  2. 启动 Nginx。

    $ service nginx start
    
  3. 测试。

    客户端浏览器访问 http://你的服务器ip地址 ,可以看到 Nginx 的欢迎界面。

  4. 创建中间目录和博客目录。

    $ 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
    
  5. 创建虚拟主机配置文件。

    $ 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;
            }
    }
    

    端口号可根据个人需求配置。

  6. 重启 Nginx。

    $ sudo service nginx restart
    
  7. 测试。

    $ 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 分支。