项目 11 部署与运行
项目 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页面头部的代码 #安装curl pyvip@Vip:~$ sudo apt-get install curl
ps -ef|grep python #查看当前运行进程
Supervisor
安装supervisor
#安装supervisor sudo pip2 install supervisor
修改pip安装源
#修改pip安装源 vi .pip/pip.conf [global] timeout = 60 index-url = https://pypi.doubanio.com/simple
pip升级
#修改相源 wumenghua:~ root# mkdir .pip wumenghua:.pip root# touch pip.conf [global] index-url=http://pypi.douban.com/simple cat .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.conf echo_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 ; 启动失败自动重试次数,默认是 3 user=pyvip ; 用哪个用户启动 redirect_stderr=true ; 把 stderr 重定向到 stdout,默认 false stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB stdout_logfile_backups = 20 ; stdout 日志文件备份数 ; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件) stdout_logfile = /tmp/tornado_app_8000.log loglevel=info [program:tornado-8001] directory=/home/pyvip/ws/tudo/ command=/home/pyvip/.virtualenvs/tornado/bin/python app.py --port=8001 autostart=true startsecs=5 autorestart=true startretries=3 user=pyvip redirect_stderr=true stdout_logfile_maxbytes = 20MB stdout_logfile_backups = 20 stdout_logfile = /tmp/tornado_app_8001.log loglevel=info [program:tornado-8002] directory=/home/pyvip/ws/tudo/ command=/home/pyvip/.virtualenvs/tornado/bin/python app.py --port=8002 autostart=true startsecs=5 autorestart=true startretries=3 user=pyvip redirect_stderr=true stdout_logfile_maxbytes = 20MB stdout_logfile_backups = 20 stdout_logfile = /tmp/tornado_app_8002.log loglevel=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、安装nginx sudo 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、运行nginx sudo nginx sudo netstat -anop|grep 8888 #查看监听端口 sudo nginx -s reload #nginx的重启