ubuntu+nginx+supervisor部署tornado
记录一下最近部署tornado的过程:
###安装所需软件
使用apt-get安装nginx,redis,supervisor等需要用到的服务。
使用pip命令安装项目需要的python依赖。
###修改文件描述符数量
默认ubuntu每个进程最多打开1024个文件描述符,有时候会提示”Too many open files”的错误,需要先修改这个限制。
sudo vi /etc/security/limits.conf
在文件尾加上
1 | * hard nofile 65535 |
sudo vi /etc/pam.d/su
将pam_limits.so这一行注释删除.sudo vi /etc/profile
最后加上ulimit -SHn 65535
重启后用ulimit -n
查看应该已经是65535.
###修改nginx配置
这里启动四个tornado进程,nginx监听80端口反响代理到8000-8004的四个tornado进程。
修改nginx配置,vi /etc/nginx/nginx.conf
user root;
worker_processes 1;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
use epoll;
}
http {
# Enumerate all the Tornado servers here
upstream frontends {
server 127.0.0.1:8000;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
}
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
keepalive_timeout 65;
proxy_read_timeout 200;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
gzip on;
gzip_min_length 1000;
gzip_proxied any;
gzip_types text/plain text/html text/css text/xml
application/x-javascript application/xml
application/atom+xml text/javascript;
# Only retry if there was a communication error, not a timeout
# on the Tornado server (to avoid propagating "queries of death"
# to all frontends)
proxy_next_upstream error;
server {
listen 80;
# Allow file uploads
client_max_body_size 50M;
location ^~ /static/ {
root /home/wnn/program/picwall/; # your own static file
if ($query_string) {
expires max;
}
}
location = /favicon.ico {
rewrite (.*) /static/favicon.ico;
}
location = /robots.txt {
rewrite (.*) /static/robots.txt;
}
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;
proxy_pass http://frontends;
}
}
}
###使用supervisor管理tornado进程
supervisor是使用python开发的一个进程管理工具,可以用apt-get直接安装。
修改supervisor配置文件vi /etc/supervisor/supervisord.conf
,在文件最后加上以下配置:
[group:tornadoes]
programs=tornado-8000,tornado-8001,tornado-8002,tornado-8003
[program:tornado-8000]
command=python /home/wnn/program/picwall/app.py --port=8000
directory=/home/wnn/program/picwall
user=root
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/tornado.log
loglevel=info
[program:tornado-8001]
command=python /home/wnn/program/picwall/app.py --port=8001
directory=/home/wnn/program/picwall
user=root
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/tornado.log
loglevel=info
[program:tornado-8002]
command=python /home/wnn/program/picwall/app.py --port=8002
directory=/home/wnn/program/picwall
user=root
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/tornado.log
loglevel=info
[program:tornado-8003]
command=python /home/wnn/program/picwall/app.py --port=8003
directory=/home/wnn/program/picwall
user=root
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/tornado.log
loglevel=info
这里定义个一个进程组,可以很方便的在supervisorctl里边管理进程。设置好以后可以使用supervisord命令启动。
这样tornado项目就启动好了。
刚做的一个图片网站http://tupian.today就是使用这些配置搭建的。vps使用的vultr,如果你需要购买vps可以通过http://www.vultr.com/?ref=6852279这个链接,可以获得十美元两个月的试用。感觉vultr东京机房的速度比digitocean旧金山的速度和稳定性好太多了,最低配置都是一个月5美元,不过vultr的缺点就是一个月只有400G流量,考虑速度还是用日本的机房吧,都说digitocean旧金山速度好,但是我用ssh经常登陆不了,体验很差。
###More than just a pretty web framework, the Tornado IOLoop