參考連接:supervisor + Tornado + Nginx 使用詳解, 用tornado ,Supervisord ,nginx架網站, tornado官方文檔javascript
項目文檔樹:css
. ├── chnservices │ └── channels.py ├── etc │ ├── chnservices.conf │ ├── nginx │ │ └── nginx.conf │ ├── supervisord.conf │ └── supervisord.conf.original └── venv ├── bin │ ├── activate │ ├── activate.csh │ ├── activate.fish │ ├── activate_this.py │ ├── easy_install │ ├── easy_install-2.7 │ ├── pip │ ├── pip2 │ ├── pip2.7 │ ├── python │ ├── python2 -> python │ └── python2.7 -> python ├── include │ └── python2.7 -> /usr/include/python2.7 ├── lib │ └── python2.7 └── local ├── bin -> /a/path/venv/bin ├── include -> /a/path/venv/include └── lib -> /a/path/venv/lib
supervisor.conf(部分)html
[program:app-channels] process_name=%(program_name)s-%(process_num)s directory=/a/path/chnservices/ command=/a/path/venv/bin/python2.7 /a/path/chnservices/channels.py --port=%(process_num)s numprocs=2 numprocs_start=8001 ;umask=022 ;priority=999 autostart=true startsecs=2 ;startretries=3 ;autorestart=unexpected ;exitcodes=0,2 ;stopsignal=QUIT ;stopwaitsecs=10 ;stopasgroup=false ;killasgroup=false user=www-data redirect_stderr=true stdout_logfile=/var/log/nginx/chn_stdout.log ;stdout_logfile_maxbytes=1MB ;stdout_logfile_backups=10 ;stdout_capture_maxbytes=1MB ;stdout_events_enabled=false stderr_logfile=/var/log/nginx/chn_stderr.log ;stderr_logfile_maxbytes=1MB ;stderr_logfile_backups=10 ;stderr_capture_maxbytes=1MB ;stderr_events_enabled=false ;environment=A="1",B="2" ;serverurl=AUTO
channels.pyjava
import tornado.ioloop import tornado.web from tornado.options import define, options define("port", default=8006, help="run on the given port", type=int) class MainHandler(tornado.web.RequestHandler): def get(self): self.write("Hello, world") def make_app(): return tornado.web.Application([ (r"/", MainHandler), ]) if __name__ == "__main__": tornado.options.parse_command_line() # tornado.options.parse_config_file("/etc/chnservices.conf") print 'port:',options.port app = make_app() app.listen(options.port) tornado.ioloop.IOLoop.current().start()
nginx.conf(tornado推薦配置修改)node
user www-data; 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:8001; server 127.0.0.1:8002; } 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; proxy_next_upstream error; server { listen 8000; # Allow file uploads client_max_body_size 50M; location ^~ /static/ { root /var/www/tornado/; 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; } } }
安裝:python
使用supervisor作進程管理,使用Nginx作反向代理;supervisor能夠使用源碼安裝和yum安裝(CentOS),使用pip安裝和源碼安裝是同樣的道理:nginx
sudo pip install supervisor
supervisor默認會從(/usr/local/etc/supervisord.conf, /usr/local/supervisord.conf, supervisord.conf, etc/supervisord.conf, /etc/supervisord.conf)尋找配置文件,爲了方便,咱們生成配置文件並修改後,連接到/etc/supervisord.conf。
生成配置文件:web
echo_supervisord_conf > /a/path/etc/supervisord.conf
按示例修改,修改後連接到指定位置:瀏覽器
sudo ln -s /a/path/etc/chnservices.conf /etc/chnservices.conf
將Nginx配置文件修改後連接到默認位置:app
sudo ln -s /a/path/etc/nginx/nginx.conf /etc/nginx/nginx.conf
使Nginx中設置的靜態目錄與項目的靜態目錄保持一致:
ln -s /a/path/chnservices /var/www/tornado
啓動supervisor:
sudo supervisord -c /etc/supervisord.conf sudo supervisorctl start all sudo supervisorctl reload all sudo supervisorctl restart all
此時,瀏覽器訪問http://127.0.0.1:8001/和http://127.0.0.1:8002/應該就能夠看到「Hello, world」了.
啓動nginx:
sudo service nginx restart
此時,瀏覽器訪問http://127.0.0.1:8000/就能夠看到從tornado經nginx的「Hello, world」了.
添加開機啓動:
tornado代碼遇到異常退出時supervisor會自動從新啓動咱們的python代碼,可是如今supervisor不是開機啓動的,編輯/etc/rc.local, 在exit 0以前添加sudo supervisord便可。