项目 11 部署与运行
#为什么要运行多个tornado实例#网页响应不是特别的计算密集型处理,对于计算机来说不会消耗太多的CPU,运行多个实例可以充分利用CPU#多实例又会有多端口的问题,在下面的Nginx来处理;通过打开多个端口来表示多个Web服务
#在同时打开8000和8001端口,出现无法打开8001端口的现象,试看一下是不是端口转发未做好
#curl命令#在Xshell里面显示页面代码pyvip@Vip:~$ curl 127.0.0.1:8000/login#显示的就是html页面代码pyvip@Vip:~$ curl 127.0.0.1:8000/login|head#显示的就是html页面头部的代码#安装curlpyvip@Vip:~$ sudo apt-get install curl
ps -ef|grep python #查看当前运行进程
Supervisor
安装supervisor
#安装supervisorsudo pip2 install supervisor
修改pip安装源
#修改pip安装源vi .pip/pip.conf[global]timeout = 60index-url = https://pypi.doubanio.com/simple
pip升级
#修改相源wumenghua:~ root# mkdir .pipwumenghua:.pip root# touch pip.conf[global] index-url=http://pypi.douban.com/simplecat .pip/pip.conf #显示如下[global] index-url=http://pypi.douban.com/simple#在执行pip install --upgrade pip#升级成功wumenghua:~ root# pip --version pip 10.0.1 from /Library/Python/2.7/site-packages/pip (python 2.7)
#1、在etc目录下创建supervisor目录sudo mkdir supervisor#2、切换用户,由于用户权限不够,所以使用root用户sudo su -#3、将信息导入到etc/supervisor/supervisord.confecho_supervisord_conf > /etc/supervisor/supervisord.conf#4、修改supervisor文件cd etc/supervisor #进入目录,可能需要先 cd ..vim supervisor.conf #打开文件files = /etc/supervisor/conf.d/*.conf #在倒数第二行include里面添加这一行代码,将上面的include的注释取消掉#5、创建配置文件目录mkdir conf.d#6、退出root用户exit#7、写入部署文件#在pycharm里面创建一个deploy目录下的Instagram_super.conf
Instagram_super.conf
# 增加一个tornadoes组[group:tornadoes]programs=tornado-8000,tornado-8001,tornado-8002# 分别定义三个tornado的进程配置[program:tornado-8000]directory=/home/pyvip/ws/tudo/ ; 程序的启动目录command=/home/pyvip/.virtualenvs/tornado/bin/python app.py --port=8000 ; 启动命令,与手动在命令行启动的命令是一样的,注意这里home不可用~代替autostart=true ; 在 supervisord 启动的时候也自动启动startsecs=5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了autorestart=true ; 程序异常退出后自动重启startretries=3 ; 启动失败自动重试次数,默认是 3user=pyvip ; 用哪个用户启动redirect_stderr=true ; 把 stderr 重定向到 stdout,默认 falsestdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MBstdout_logfile_backups = 20 ; stdout 日志文件备份数; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)stdout_logfile = /tmp/tornado_app_8000.logloglevel=info[program:tornado-8001]directory=/home/pyvip/ws/tudo/command=/home/pyvip/.virtualenvs/tornado/bin/python app.py --port=8001autostart=truestartsecs=5autorestart=truestartretries=3user=pyvipredirect_stderr=truestdout_logfile_maxbytes = 20MBstdout_logfile_backups = 20stdout_logfile = /tmp/tornado_app_8001.logloglevel=info[program:tornado-8002]directory=/home/pyvip/ws/tudo/command=/home/pyvip/.virtualenvs/tornado/bin/python app.py --port=8002autostart=truestartsecs=5autorestart=truestartretries=3user=pyvipredirect_stderr=truestdout_logfile_maxbytes = 20MBstdout_logfile_backups = 20stdout_logfile = /tmp/tornado_app_8002.logloglevel=info
#8、建立远链接,将Instagram_super.conf与etc目录下的文件做远链接sudo ln -s ~/tmp/instragram/deploy/Instagram_super.conf /etc/supervisor/conf.d/ls -l /etc/supervisor/conf.d/ #检查是否已经建立远链接#9、运行部署sudo supervisord#10、查看状态sudo supervisorctl#11、基本操作stop tornadoes:tornado-8000 #停止8000端口的运行start tornadoes:tornado-8000 #开始8000端口的运行status #查看当前状态sudo supervisorctl reload #重启部署在外面kill掉8000进程,会自动重启这个进程(可以用于修复bug,用户卡顿等等)
Nginx
#1、安装nginxsudo apt-get install nginx#2、查看nginx是否运行ps -ef|grep nginx#如果发现root在运行nginx,就用sudo kill杀掉该进程#3、在pycharm里面创建一个nginx.conf,导入下列代码
nginx.conf
upstream tornadoes{ server 127.0.0.1:8000; server 127.0.0.1:8001; server 127.0.0.1:8002;}proxy_next_upstream error;server { listen 8888; # 一般是 80 server_name 127.0.0.1; location /{ proxy_pass_header Server; proxy_set_header Host $http_host; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; # 把请求方向代理传给tornado服务器,负载均衡 proxy_pass http://tornadoes; }}
#4、将nginx.conf拷贝到指定目录下sudo cp ~/tmp/instragram/deploy/nginx.conf sites-enabled/sudo nginx -t #测试是否可以运行nginx#5、运行nginxsudo nginxsudo netstat -anop|grep 8888 #查看监听端口sudo nginx -s reload #nginx的重启