部署¶
备注
本节所讨论的是将 ZgRoBot 作为独立服务运行情况下的部署操作。 如果你希望将 ZgRoBot 集成到其他 Web 框架内,请阅读 与其他 Web 框架集成
在独立服务器上部署¶
使用 zgrobot.run
来启动 WSGI 服务器¶
你可以在 Config()
中配置好 ZgRoBot 需要监听的地址和端口号, 然后使用你生成的 robot
调 用 run()
方法来启动服务器
import zgrobot
robot = zgrobot.ZgRoBot(token='tokenhere')
@robot.handler
def echo(message):
return 'Hello World!'
robot.config['HOST'] = '0.0.0.0'
robot.config['PORT'] = 80
robot.run()
备注
你需要 root 或管理员权限才能监听 1024 以下的端口。
你可以通过传递 server
参数来手动指定使用的服务器
import zgrobot
robot = zgrobot.ZgRoBot(token='tokenhere')
@robot.handler
def echo(message):
return 'Hello World!'
robot.config['HOST'] = '0.0.0.0'
robot.config['PORT'] = 80
robot.run(server='gevent')
server
支持以下几种:
cgi
flup
wsgiref
waitress
cherrypy
paste
fapws3
tornado
gae
twisted
diesel
meinheld
gunicorn
eventlet
gevent
rocket
bjoern
auto
当 server
为 auto
时, ZgRoBot 会自动依次尝试以下几种服务器:
Waitress
Paste
Twisted
CherryPy
WSGIRef
所以,只要你安装了相应的服务器软件,就可以使用 zgrobot.run
直接跑在生产环境下。
备注
server 的默认值为 auto
。
注意
WSGIRef 的性能非常差, 仅能用于开发环境。 如果你要在生产环境下部署 ZgRoBot , 请确保你在使用其他 server 。
通过 WSGI HTTP Server 运行 ZgRoBot¶
zgrobot.wsgi
暴露了一个 WSGI Application ,你可以使用任何你喜欢的 WSGI HTTP Server 来部署 ZgRoBot。
比如, 如果你想用 Gunicorn 来部署
# FileName: robot.py
from zgrobot import ZgRoBot
robot = ZgRoBot()
那么你只需要在 Shell 下运行
gunicorn robot:robot.wsgi
就可以了。
使用 Supervisor 管理守护进程¶
请注意, zgrobot.run
是跑在 非守护进程模式下 的——也就是说,一旦你关闭终端,进程就会自动退出。
我们建议您使用 Supervisor 来管理 ZgRoBot 的进程。
配置文件样例:
[program:wechat_robot]
command = python /home/<username>/robot.py
user = <username>
redirect_stderr = true
stdout_logfile = /home/<username>/logs/robot.log
stdout_errfile = /home/<username>/logs/robot_error.log
使用 Nginx 进行反向代理¶
微信服务器只支持80端口的机器人——显然,你的服务器上不会只跑着一个微信机器人。对于这种情况,我们建议您使用 Nginx 来进行反向代理。
备注
建议新建一个子配置文件对机器人进行配置,并在主配置文件的 server
中添加 include xxx/*.conf;
(配置文件的绝对路径),然后 重新加载 nginx
服务。
配置文件样例:
server {
server_name example.com;
listen 80;
location / {
proxy_pass_header Server;
proxy_redirect off;
proxy_pass http://127.0.0.1:12233;
}
}
备注
在这个例子中, ZgRoBot 的端口号为 12233。你应该在微信管理后台中将服务器地址设为 http://example.com
。
更多的 Nginx
配置请参看 万字长文看Nginx配置详解!