2016年8月8日 星期一

利用 supervisor 來管理 Django 的程序

設定目標:
  • 安裝 supervisor 來進行 Django 程序管理
  • 為配合 nginx ,請參考這一篇安裝好 Nginx 以及 Django
快速安裝流程:
  1. 利用 pip 工具,安裝 supervisor 套件:
    #pip install supervisor
    
  2. 利用 supervisor 工具,產生 supervisor 設定檔:
    #echo_supervisord_conf > /etc/supervisord.conf
    
  3. 編輯 supervisor 設定檔:
    #vim /etc/supervisord.conf
    (在檔案最尾端,加上下列幾行設定:)
    [program:mysite]
    command=/bin/uwsgi --http :8081 --chdir /usr/share/nginx/html/mysite --module mysite.wsgi
    directory=/usr/share/nginx/html/mysite
    startsecs=0
    stopwaitsecs=0
    autostart=true
    autorestart=true
    
  4. 啟動 supervisor 服務:
    #supervisord -c /etc/supervisord.conf
    
  5. 動新啟動 mysite 站台運作:
    #supervisorctl -c /etc/supervisord.conf restart mysite
    
    ※其他操作 supervisorctl 的指令:supervisorctl -c /etc/supervisord.conf [start|stop|restart] [program-name|all]
  6. 開啟防火牆設定:
    #firewall-cmd --permanent --add-port=8081/tcp
    #firewall-cmd --reload
    
  7. 利用 ini 文件來結合 nginx 運作:
    #vim /usr/share/nginx/html/mysite/mysite.ini
    [uwsgi]
    socket = /tmp/mysite.sock
    chdir=/usr/share/nginx/html/mysite
    wsgi-file = mysite/wsgi.py
    touch-reload=/usr/share/nginx/html/mysite/reload
    
    processes = 1
    threads = 2
    
    chmod-socket = 664
    chown-socket=nginx:nginx
    
  8. 重新編輯 supervisor 設定檔:
    #vim /etc/supervisord.conf
       :
       :(略過...)
    [program:mysite]
    command=/bin/uwsgi --ini /usr/share/nginx/html/mysite/mysite.ini
    directory=/usr/share/nginx/html/mysite
    startsecs=0
    
  9. 動新啟動 mysite 站台運作:
    #supervisorctl -c /etc/supervisord.conf restart mysite
    
  10. 在 Nginx 上,新增 mysite 設定檔:
    #vim /etc/nginx/conf.d/mysite.conf
    server {
        listen      8081;
        server_name 192.168.5.104;
        charset     utf-8;
    
        client_max_body_size 75M;
    
        location /media  {
            alias /usr/share/nginx/html/mysite/media;
        }
    
        location /static {
            alias /usr/share/nginx/html/mysite/static;
        }
        location / {
            uwsgi_pass  unix:///tmp/mysite.sock;
            include     /etc/nginx/uwsgi_params;
        }
    }
    
    
  11. 重新啟動 Nginx :
    #systemctl restart nginx
    

參考文獻:
  • http://www.aahyhaa.com/archives/587
  • http://uwsgi-docs.readthedocs.io/en/latest/tutorials/Django_and_nginx.html
  • https://www.digitalocean.com/community/tutorials/how-to-serve-django-applications-with-uwsgi-and-nginx-on-centos-7
  • https://www.restran.net/2015/04/09/centos-uwsgi-nginx-django/