项目 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的重启

 

posted on 2018-07-03 18:05  许铖铖  阅读(234)  评论(0编辑  收藏  举报