^

Young Anything I do that may help others, I'll post it here.

Linux deploy of WeRoBot's search engine

部署的整体理解

  • 微信公众号的前后端的交互服务相当于一个114接线员;nginx反向代理服务器相当于一个酒店前台;gunicorn接口服务相当于一个酒店房间内负者接电话的房内接线员,WeRoBot微信公众号开发框架是一个秘书,他负责传递搜索引擎的信息给gunicorn,但是他要确保是114接线员转接的电话才会工作(和114接线员有个秘密口令,这个口令包含在信息来回传输过程中);Supervisor程序相当于一个酒店经理(24小时不睡觉,监督保证gunicorn不停地工作):
    1. 用户A想通过微信公众号查询到python搜索引擎B的信息b(对应于A打电话问114接线员住在某酒店的辛普森一家,即B,关于homer的信息);
    2. 微信公众号的服务收到A的这个请求后,将该请求发送给我们指定的ip地址的80网络端口(对应于114客服打电话给某个具体地址的酒店前台工作人员80,问A想要获取的信息);
    3. nginx将80端口的请求转给其他我们在服务器上设定的端口如6666的程序(对应于前台工作人员80把电话转给具体要求的客房6666)
    4. gunicorn接口服务开始和python的程序交互,python程序返回一个信息,gunicorn就将其返回,然后这个信息一层层原路返回给用户A,查询结束(对应于gunicorn房内接线员接到电话就开始问房间里的辛普森一家,有个人想问homer的个人信息,给我来一份我电话里告诉他,然后WeRoBot秘书收到这个请求把答案传达给了gunicorn)
    5. Supervisor在这个过程中监督gunicorn接口服务不要挂掉,保证gunicorn挂掉后,能立即再次启动(对应于gunicorn接到太多人的太多电话就可能会累死,Supervisor一旦发现这个现象就会立即换上一个全新的gunicorn房内接线员)
  • 为什么要使用nginx反向代理?因为微信公众号只支持80端口,这个80端口很多地方都会用到,所以如果我这台服务器还有其他的web程序也需要使用这个端口的话,就会有冲突,可以用反向代理起到扩展端口的作用,转接每个特定的端口请求。
  • Supervisor为什么不用监督nginx?一般nginx不会因为请求太多而挂掉,而gunicorn可能因此挂掉。
  • 除了微信公众号的前后端的交互服务,其余所有程序都运行在一个腾讯云的linux服务器上。

后台运行app的linux操作

    1. $screen #进入一个新建编号副窗口
    2. $nohup python app.py simpsons > simpsons_wiki.out 2>&1 & #开启job并放入后台里
    3. ctrl+a 然后点 d #保存并断开这个副screen,回到主screen
    4. $screen -ls #回到主screen后,列出所有保存的副screen
    5. $screen -r a_id #可进入相应的副screen