阿里云搭建Hexo博客

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

接下来就是详细的教程了。

注:此教程只适用于习惯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-****** -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: [email protected]:/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 [email protected]你的服务器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分支。