之前博客使用的是搬瓦工的机器,感觉访问速度受限,刚好阿里云有活动,就决定迁移到阿里。鉴于之前一直没有一个好用的评论系统,迁移到阿里后进行了备案,开始使用畅言评论系统。 另外考虑到备份问题,也对部署方式进行了更新。

迁移前:

之前Blog的部署方式是:Hexo + VPS(git-hook) + Nginx(proxy)的形式,图床使用的七牛云。

迁移后:

本地Hexo将Blog文件提交到Github 然后通过Github的Webhooks功能通知Ali服务器,服务器进行Git pull操作 Nginx使用Docker的方式

接收Github通知需要一个HTTP服务器,没必要用太重的web框架,所以就自己写了一个简单的【代码地址】,如下

 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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/usr/bin/env python
# Requier: pip install GitPython
# http://note.qidong.name/2018/01/gitpython/
import socket
import threading
import os
import git
import time




class init_socket():
    def __init__(self, HOST_NAME, HOST_PORT, MAX_CLIENT):
        self.host_name = HOST_NAME
        self.host_port = HOST_PORT
        self.ss = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.ss.bind((HOST_NAME, HOST_PORT))
        self.ss.listen(MAX_CLIENT)
    def run(self, REMOTE_PATH, LOCAL_PATH):
        res_ok = 'HTTP/1.1 200 OK\nContent-Type:text/html\nServer:myserver\n\nHello, Gourds!'
        res_xx = 'HTTP/1.1 404 OK\nContent-Type:text/html\nServer:myserver\n\nFriend!'
        while True:
            sock, addr = self.ss.accept()
            print sock, addr
            request = sock.recv(1024)
            method = request.split(' ')[0]
            src = request.split(' ')[1]
            print method, src
            if method == 'POST':
                if src == '/hook/push':
                    content = res_ok
                    if len(os.listdir(LOCAL_PATH)) <= 1:
                        git.Repo.clone_from(url=REMOTE_PATH, to_path=LOCAL_PATH)
                        print "Run clone command"
                    else:
                        gp = git.cmd.Git(LOCAL_PATH)
                        gp.pull()
                        print "Run pull command"
                else:
                    content = res_xx
            else:
                content = res_xx
            print content
            sock.sendall(content)
            print request
            sock.close()
            time.sleep(60)


if __name__ == '__main__':
    my_app = init_socket("", 18080, 5)
    my_app.run('git@project.git', '/path/to/nginx/')