Hexo Github Aliyun 的爱恨情仇

忙活了一下午,并没有实现自己的想要的结果

由于Github属于国外的服务器,所以用Github部署的github pages会很慢
在本地ping测试下,测试结果如下图:

ping

http://123.56.15.191 为我用阿里云搭建的hexo,测试结果明显易懂


但是有一点我们要知道毕竟服务器就是服务器,以命令行来控制全局,如果想要我们去编辑更新我们的博客,那么说将会很麻烦,并且给我编辑打开麻烦,下面将介绍一种思路:

hexo

通过图片我们可以知道,在我们的服务器与Pc本地之间加入了一个中间层Github/Coding…其实这个起到的是一个中介作用

我们在本地进行编辑更新博客,然后我们可以通过本地进行hexo s的调试,但是我们其实要用的是git push,我们通过git push 把我们的本地的hexo的所有文件同步到了我们的中间层去,这样可以实现一个数据的共享,但是,我们的服务器是不知道我们的数据发生了变化

在这里我们需要声明一点:服务器中我们肯定需要部署好环境,node.js + git,系统的话肯定是命令行,推荐center os,为什么推荐center os ,原因是可以使用Yum进行安装软件,方便,省事,配置好环境后,我们肯定要把我们在本地pc的所有文件拿过来,在这个时候我们就可以通过git clone去获取文件了,这样我们的服务端通过git node.js就建立好网站,然后我们在服务端hexo s就可以运行了,比如:http://123.56.15.191:4000/

但是这里你也许会发现一点,那我们的中间层如何去与Aliyun服务器中的数据保持通步呢?

在这里我们会发现在coding和github有一个webhook,在这里解释下什么是webhook

就是用户通过自定义回调函数的方式来改变Web应用的一种行为,这些回调函数可以由不是该Web应用官方的第三方用户或者开发人员来维护,修改。通过Webhook,你可以自定义一些行为通知到指定的URL去。Webhook的“自定义回调函数”通常是由一些事件触发的,比如推送代码到代码库或者博客下新增一个评论,源站点会为Webhook进行HTTP请求的URI配置。用户通过配置,就可以使一个网站上的事件调用在另一个网站上表现出来,这些事件调用可以是任何事件,但通常应用的是系统集成和消息通知。

通过webhook可以实现我们的代码库发生变化去通知某一url进行处理,那么我们的服务端如何配置?

推荐资料:使用 WebHook 来自动部署 NodeJS 项目!
在这里感谢龙伟的帮助

  • 编写自动部署的脚本

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #!/bin/bash
    # 博客路径
    WEB_PATH=''
    # linux 用户
    WEB_USER=''
    # linux 用户组
    WEB_USERGROUP=''
    echo "start deploy..."
    cd $WEB_PATH
    echo "pulling repo source code..."
    #git reset --hard origin/master
    git gc
    #git clean -f
    git checkout master
    git pull
    hexo g
    hexo s
    echo "modify permissions..."
    chown -R $WEB_USER:$WEB_USERGROUP $WEB_PATH
    echo "Finished deploy..."
  • 处理webhook的请求

    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
    30
    31
    var http = require('http')
    var createHandler = require('coding-webhook-handler')
    var handler = createHandler({ path: '/webhook', secret: '' })
    function run_cmd(cmd, args, callback) {
    var spawn = require('child_process').spawn;
    var child = spawn(cmd, args);
    var resp = "";
    child.stdout.on('data', function(buffer) { resp += buffer.toString(); });
    child.stdout.on('end', function() { callback (resp) });
    }
    http.createServer(function (req, res) {
    handler(req, res, function (err) {
    res.statusCode = 404
    res.end('no such location')
    })
    }).listen(8082)
    handler.on('error', function (err) {
    console.error('Error:', err.message)
    })
    handler.on('push', function (event) {
    console.log('Received a push event for %s to %s',
    event.payload.repository.name,
    event.payload.ref);
    // payload print出来看看有哪些信息
    run_cmd('sh', ['./deploy.sh'], function(text){ console.log(text) });
    })
  • 配置服务器的ngnix

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    server {
    listen 80;
    server_name {};
    # ...
    location / {
    # ...
    }
    location /webhook$ {
    proxy_pass http://123.56.15.191:4000;
    }
    }
  • 配置Coding/Github的WebHook

基本思路是这样,但是表示我没有成功,不过我会在试试,梦想还是要有的,万一实现了呢

这样的话我们就可以实现访问阿里云服务器的网站了,由于国内的限制,如果绑定域名的,我们需要备案,但是备案前可以通过ip进行访问的

至此今天的文章到此为止,如果你有好的方案,恳请欢迎提出,我们一起分享在探索路上的成功与喜悦


最近访客