关于部署:git-webhook自动部署服务端代码django-python-docker等

12次阅读

共计 1509 个字符,预计需要花费 4 分钟才能阅读完成。

背景

自己开了一个 django 的集体博客,而且应用 docker 部署的,每次有代码更改都须要 git 本地提交,而后登陆服务器拉取代码,比拟耗时耗力,有没有一种形式能够本地提交代码之后,服务器主动拉取?这就是本文要介绍的主动部署

计划调研

看了网上对于主动部署的文章不是特地多,而且部署的都有点简单,尤其是针对 docker 容器的这种根本没有
还有大部分都是介绍如何主动部署一个网站,然而网站外的代码没法拉取,因为网站内执行 git 命令,无奈 cd 到网站根目录外去操作,通过大量尝试,本人钻研出一种十分间接简略的主动部署计划

计划次要内容

  • 用 python 写一个 webhook.py 的服务文件,运行 python3 webhook.py
  • 如果曾经运行了,端口 9002 会被占用,查找 pid:lsof -i:9002,而后 kill 就行
  • 外网无法访问 http://ip:9002/,是端口须要在控制台增加放开规定

详解

因为我的是 docker 利用治理形式,网站内目录拉取不了外层级的目录,所以须要独立开 webhook 服务,这种独立 webhook 服务比拟通用,根本所有 webhook 需要都能够满足
首先我用 python 开的服务,当然 php、go 等都能够,语言不限,我这里以 python 为例
服务代码:

from http.server import HTTPServer, BaseHTTPRequestHandler
import json
import subprocess
import os

class Resquest(BaseHTTPRequestHandler):
    def handler(self):
        print("data:", self.rfile.readline().decode())
        self.wfile.write(self.rfile.readline())

    def do_POST(self):
        print("hello webhook..")
        os.system('cd /root/docker-django && git add . && git status  && git stash ;git stash clear;git pull')
        print("git pull finished")

if __name__ == '__main__':
    host = ('', 9002)
    server = HTTPServer(host, Resquest)
    print("Starting server, listen at: %s:%s" % host)
    server.serve_forever()

这段服务代码是网上找的,外面有 get 和 post,这段是我精简之后的,没必要 get,也没必要解析参数,间接开启服务执行 shell 命令就完事了

在服务器上执行 python3 webhook.py 服务就起来了,前面加上 & 而后回车,就能够在后盾运行了
python3 webhook.py &

服务器如何域名映射之类的不属于这里探讨范畴,默认这些根底大家都已 OK

问题解决

1,可能在测试过程中发现端口 9002 被占用,解决形式是先执行 lsof -i:9002 站到端口占用的 pid,而后 kill -9 pid 杀掉即可应用
2,测试是否可能拜访胜利,在命令行里执行:curl -X POST http:// 你的域名:9002
3,发现外网无法访问:http:// 你的域名:9002,登陆阿里云或腾讯云或其余服务器后盾,看下服务器的 9002 端口是不是没开,没开的话自定义开启一下 9002 即可

作者简介

iOS 架构师,简直用过各种编程语言,以 iOS 为主。如果您感觉文章帮忙了你,请给个关注,自己有一个 iOS 开发高手必备神器:资源库,能够在 appstore 搜寻下载,如果您感觉好,就给资源库来个好评吧?

正文完
 0