18.tornado项目的部署和运行(采用Linux常见应用服务配置模式nginx+supervisord)

网友投稿 1062 2022-10-07 12:30:08

18.tornado项目的部署和运行(采用Linux常见应用服务配置模式nginx+supervisord)

运行多个Tornado实例好处:

网页响应不需要使用特别多的计算密集型处理多个实例充分利用 CPU多端口处理

Linux 常见应用服务配置模式 nginx 和 supervisord:采用主配置文件 + 项目配置文件。

目录:

​​1.supervisord适用场景及简介​​​​2.使用Supervisor监控Tornado进程​​

​​(1)supervisor的安装:​​

​​安装使用:​​

​​第一步:supervisor的安装和配置​​​​第二步:本项目相关配置​​​​拓展一:supervisor开启web端操作页面​​​​拓展二:supervisor的启动和管理​​

​​3. 使用Nginx作为反向代理​​

​​(1)安装nginx​​​​(2)配置nginx完成部署​​​​拓展:​​

1.supervisord适用场景及简介

supervisord的适用场景:

在一个分布式环境中,每台机器上可能需要启动和停止多个进程,使用命令行方式一个一个手动启动和停止非常麻烦,而且查看每个进程的状态也很不方便。如果有一个工具能够实现每台机器上多个进程的简单高效中心化管理将是非常方便的。于是Supervisord工具应运而生。与Supervisord类似的工具包括monit, daemontools和runit。

supervisord简介:

supervisord官网:​​Python3 版本的supervisor:

第一步:supervisor的安装和配置

先安装:

pip install supervisor

正常来说,你应该按如下步骤进行配置,但是嘞,我很随性,所以咱就是不想按照这个来,直接看第二步即可(本项目中自定义配置目录)~ supervisor安装后/etc下有时默认没有配置文件,需要运行echo_supervisord_conf程序生成supervisor的初始化配置文件。具体步骤如下:

在/etc/下创建supervisor文件夹:

sudo mkdir supervisor

使用命令生成初始化配置文件:

echo_supervisord_conf > /etc/supervisor/supervisord.conf

然后编辑这个配置文件(supervisord.conf),在最后(最后一行)让这个配置文件include指定目录下的配置文件:

# 指定了socket file的位置[unix_ ;UNIX socket 文件,supervisorctl 会使用;chmod=0700 ;socket文件的mode,默认是0700;chown=nobody:nogroup ;socket文件的owner,格式:uid:gid #用于启动一个含有前端的服务,可以从Web页面中管理服务。其中,port用于设置访问地址,username和password用于设置授权认证。;[inet_ ;HTTP服务器,提供web管理界面;port=127.0.0.1:9001 ;Web管理后台运行的IP和端口,如果开放到公网,需要注意安全性;username=user ;登录管理后台的用户名;password=123 ;登录管理后台的密码 # 管理服务本身的配置[supervisord]logfile=/tmp/supervisord.log ;日志文件,默认是 $CWD/supervisord.loglogfile_maxbytes=50MB ;日志文件大小,超出会rotate,默认 50MB,如果设成0,表示不限制大小logfile_backups=10 ;日志文件保留备份数量默认10,设为0表示不备份loglevel=info ;日志级别,默认info,其它: debug,warn,tracepidfile=/tmp/supervisord.pid ;pid 文件nodaemon=false ;是否在前台启动,默认是false,即以 daemon 的方式启动minfds=1024 ;可以打开的文件描述符的最小值,默认 1024minprocs=200 ;可以打开的进程数的最小值,默认 200 [supervisorctl]serverurl=unix:///tmp/supervisor.sock ;通过UNIX socket连接supervisord,路径与unix_; 通过HTTP的方式连接supervisord ; [program:xx]是被管理的进程配置参数,xx是进程的名称[program:xx]command=/opt/apache-tomcat-8.0.35/bin/catalina.sh run ; 程序启动命令autostart=true ; 在supervisord启动的时候也自动启动startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒autorestart=true ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启startretries=3 ; 启动失败自动重试次数,默认是3user=tomcat ; 用哪个用户启动进程,默认是rootpriority=999 ; 进程启动优先级,默认999,值小的优先启动redirect_stderr=true ; 把stderr重定向到stdout,默认falsestdout_logfile_maxbytes=20MB ; stdout 日志文件大小,默认50MBstdout_logfile_backups = 20 ; stdout 日志文件备份数,默认是10; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)stdout_logfile=/opt/apache-tomcat-8.0.35/logs/catalina.outstopasgroup=false ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程killasgroup=false ;默认为false,向进程组发送kill信号,包括子进程 # 对事件进行的管理;[eventlistener:theeventlistenername]# 对任务组的管理 ,包含其它配置文件;[group:thegroupname];programs=progname1,progname2 ; each refers to 'x' in [program:x] definitions;priority=999 ; the relative start priority (default 999)[include]files = supervisord.d/*.ini ;可以指定一个或多个以.ini结束的配置文件

supervisord.d这个目录也是得自己新建:

mkdir supervisord.d

然后再在/etc/supervisord.d/目录里放置所有的supervisor的配置文件即可。 supervisord.d目录就是用来存放用户自定义的进程配置,默认的子进程配置文件结尾为include配置的 .ini。

若/etc/supervisord.d/目录里配置文件有改动,需执行supervisorctl update命令加载新的配置

supervisorctl update:配置文件修改后可以使用该命令加载新的配置supervisorctl reload:重新启动配置中的所有程序

第二步:本项目相关配置

cd到项目根目录创建deploy目录用于存放supervisor配置文件:

mkdir deploy

使用命令在deploy目录下生成一个主服务配置文件:

echo_supervisord_conf > deploy/supervisord.conf

在deploy下创建super文件夹,在里面创建用来装配置的文件tudo.ini:

mkdir super

检查deploy/supervisord.conf中是否include配置,没有就加上:

[include]files = super/*.ini

增加Supervisor项目运行配置文件(名字如 tudo.conf)到 /deploy/super/tudo.ini:

# 增加一个tornadoes进程组[group:tornadoes]programs = tornado-8000,tornado-8001,tornado-8002# 分别定义三个tornado的进程配置[program:tornado-8000]directory = /home/Dja_pro/tudo_file/ ; 程序的启动目录# which python 进行查看路径command = /root/.virtualenvs/tudo_pro/bin/python /home/Dja_pro/tudo_file/app.py --port=8000 ; 启动命令,与手动在命令行启动的命令是一样的,注意这里home不可用~代替autostart = true ; 在 supervisord 启动的时候也自动启动startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了autorestart = true ; 程序异常退出后自动重启startretries = 3 ; 启动失败自动重试次数,默认是 3user = root ; 用哪个用户启动redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 falsestdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MBstdout_logfile_backups = 20 ; stdout 日志文件备份数; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)stdout_logfile = /tmp/tudo_log/tornado_app_8000.logloglevel = info[program:tornado-8001]directory = /home/Dja_pro/tudo_file/ ; 程序的启动目录command = /root/.virtualenvs/tudo_pro/bin/python /home/Dja_pro/tudo_file/app.py --port=8001 ;autostart = truestartsecs = 5autorestart = truestartretries = 3user = rootredirect_stderr = truestdout_logfile_maxbytes = 20MBstdout_logfile_backups = 20stdout_logfile = /tmp/tudo_log/tornado_app_8001.logloglevel = info[program:tornado-8002]directory = /home/Dja_pro/tudo_file/ ; 程序的启动目录command = /root/.virtualenvs/tudo_pro/bin/python /home/Dja_pro/tudo_file/app.py --port=8002 ;autostart = truestartsecs = 5autorestart = truestartretries = 3user = rootredirect_stderr = truestdout_logfile_maxbytes = 20MBstdout_logfile_backups = 20stdout_logfile = /tmp/tudo_log/tornado_app_8002.logloglevel = info

cd到项目目录下的deploy目录里(.conf同级目录),然后使用​​supervisord​​启动supervisor服务:

如果出现错误:

Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord.

解决办法:

sudo unlink /tmp/supervisor.sock

或者

sudo unlink /var/run/supervisor.sock

到现在已经OK了,我们去浏览器就可以访问项目啦~

supervisorctl 交互操作:输入命令 supervisorctl 进入 supervisorctl 的 shell 交互界面:(下面命令都可以加supervisorctl直接执行,不进supervisorctl的shell交互界面也行哦~)

help # 查看帮助 status # 查看程序状态 stop program_name # 关闭 指定的程序(program_name是[program:x]中的x) start program_name # 启动 指定的程序 restart program_name # 重启 指定的程序 stop all # 关闭所有 start all # 启动所有 restart all # 重启所有 update # 重启配置文件修改过的程序(修改了配置,通过这个命令加载新的配置) supervisorctl reload # 载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程 supervisorctl update # 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启

(注意:start,restart,stop都不会载入最新的配置文件!)

使用​​less /tmp/tudo_log/tornado_app_8062.log​​查看日志。

拓展一:supervisor开启web端操作页面

修改配置文件(supervisord.conf)把[inet_:9001

再reload一下就可以啦~

supervisorctl reload

现在我们就可以通过网页端进行本项目的开,关操作了哦~

拓展二:supervisor的启动和管理

启动supervisor一定要先启动 daemon 程序 (supervisord) 才能执行管理操作,否则会报错!

使用默认的主配置文件( /etc/supervisor/supervisord.conf):​​sudo supervisord​​明确指定主配置文件(自定义配置目录的):​​sudo supervisord -c /home/tudo_file/deploy/supervisord.conf​​使用 user 用户启动supervisord:​​sudo supervisord -u user​​

结束 supervisor 进程:

ps -aux|grep supervisord

3. 使用Nginx作为反向代理

(1)安装nginx

直接在服务器里执行:sudo apt-get install nginx确定是否启动sudo service nginx status

(安装好后使用ps -ef|grep nginx查看是否运行起来了【双核】)

(使用ls /etc/nginx 检测配置文件是否存在)

3. 使用命令​​cat /etc/nginx/sites-enabled/default​​查看NGING的静态文件内容或者在浏览器输入ip能看到Welcome to nginx!即OK。

(2)配置nginx完成部署

简单起见,我们直接在/etc/nginx/nginx.conf(主配置文件)文件中的tornadoes{ server 192.168.31.1:8060; server 192.168.31.1:8061; server 192.168.31.1:8062;}proxy_next_upstream error;server { listen 80; # 一般是 80 server_name 192.168.31.1; # 根据实际情况填写对应ip location /{ proxy_pass_header Server; proxy_set_header Host $ proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; # 把请求方向代理传给tornado服务器,负载均衡 proxy_pass }}

值得一提的是,我这里是为了方便起见,所以直接将本项目配置放到了nginx的主配置文件/etc/nginx/nginx.conf中,这当然不是规矩之举。 nginx官方会推荐我们将项目对应的配置文件放到/etc/nginx/conf.d或者/etc/nginx/sites-enabled/文件夹里。 有兴趣的可以自己搞下试试哦~

其实现在nginx反向代理已经ok了,我们直接访问域名就可以看到项目了,因为nginx默认会当你更改配置时会自动重载。当然,如果你不放心,可以执行如下命令:检查配置文件是否正确:

sudo nginx -t

重载nginx:

sudo nginx -s reload

拓展:

设置 Nginx 参数——避免使用 Nginx 服务器上传文件时,浏览器报 413 请求过大 !

找到配置文件 nginx.conf (如没有额外配置其他 conf ),在 或 server{} 或 location{} 节点下添加 client_max_body_size:

client_max_body_size 10m; #(改成你想要的数值)

nginx -s reload

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:关于微信小程序 欢迎界面开发的介绍(微信小程序排行榜)
下一篇:speedtest----命令行测试网速
相关文章