123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- Notas de despliegue de la app botadero en debian 8 con NGINX
- basado en:
- * http://flaviusim.com/blog/Deploying-Flask-with-nginx-uWSGI-and-Supervisor/
- * https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uwsgi-and-nginx-on-ubuntu-14-04
- Prerequisitos
- =============
- * Esta prueba se ha realizado sobre Debian GNU/Linux 8 y NGINX instalado.
- * Se asume que el directorio de localizacion de la app es /srv/botadero/
- * Para poder ejecutar la app y permitir comunicar uwsgi con NGINX se debe
- instalar python-virtualenv y tener instalado python-pip, python-dev
- y herramientas para compilacion de paquetes (build-essential)
- * Es necesario activar crear y activar el entorno virtual python:
- $ virtualenv venv
- $ . venv/bin/activate
-
- * Para poder ejecutar la app se debe instalar los paquetes listados en
- Docu/pip_install.txt con:
-
- $ pip install Flask
- $ pip install uwsgi
- * Copiar la carpeta del proyecto botadero en el directorio /srv/botadero
- * Cambiar el usuario y grupo
-
- chown -R www-data:www-data /srv/botadero
- botadero.ini
- ============
- Este archivo indica como actuar a uwsgi se puede usar el que contiene el
- repositorio ubicado en el directorio raiz de la app.
- (se asume /srv/botadero/botadero.ini)
- [uwsgi]
- module = wsgi
- master = true
- processes = 5
- socket = botadero.sock
- chmod-socket = 660
- vacuum = true
- die-on-term = true
- Config de NGINX
- ===============
- Asumiendo que se creara otro virtualhost en nginx para la app se puede crear
- un nuevo archivo en /etc/nginx/sites-available/botadero con contenido:
- server{
- #listen puerto;
- listen 80;
- server_name dominio_del_server_o_IP;
-
- # permite la subida de archivos de hasta 5000 MB
- client_max_body_size 5000M;
- location / {
- include uwsgi_params;
- uwsgi_pass unix:/srv/botadero/botadero.sock;
- }
- }
- Luego de guardar el archivo enlazarlo:
- sudo ln -s /etc/nginx/sites-available/botadero /etc/nginx/sites-enabled
- Para probar el configs en NGINX:
- sudo nginx -t
- Si funciona reiniciar nginx
- sudo service nginx restart
- Probar UWSGI con NGINX
- ======================
- Se puede probar que todo funciona bien con uwsgi haciendo:
- $ sudo -u www-data uwsgi --ini botadero.ini
- En el directorio donde esta la app (/srv/botadero/) con el entorno virtual activo,
- sin activar el entorno virtual se puede usar:
- $ sudo -u www-data venv/bin/uwsgi --ini botadero.ini
- Al abrir un navegador en la ruta y puerto especificada en el archivo de config
- de Nginx se deberia poder usar la app.
- Ejecutar al inicio con systemd
- ==============================
- Aprovechando el archivo botadero.ini para decirle a uwsgi como ejecutar la app se puede hacer un archivo para que systemd lo ejecute.
- En este ejemplo el archivo puede ir en
- /etc/systemd/system/uwsgi.service
- Con contenido:
- [Unit]
- Description=uwsgi deamon
- After=network.target
- [Service]
- User=www-data
- Group=www-data
- WorkingDirectory=/srv/botadero/
- ExecStart=/srv/botadero/venv/bin/uwsgi --ini botadero.ini
- [Install]
- WantedBy=multi-user.target
- Se puede probar que se ejecuta con:
- $ sudo systemctl start uwsgi.service
-
- Si al ejecutar:
-
- $ sudo systemctl status uwsgi.service
- La app esta corriendo se puede habilitar para que se ejecute al inicion con:
- $ sudo systemctl enable uwsgi.service
- Ejecutar al inicio con script
- =============================
- Si no se tiene systemd o el paso anterior no funciona, se puede hacer un script tipico de inicio.
- Se deberia agregar un script para hacer ejecutar
- sudo -u www-data vevn/bin/uwsgi --ini botadero.ini
- al inicio del sistema o usar otros programas como supervisor o usar un script
- mejor elaborado.
- Ejemplo del script muy basico (por ejemplo en: /etc/init.d/botadero-init.sh)
- #!/bin/sh
- if [ $UID -ne 0 ]
- then
- echo "debe ser superusuario"
- exit 1
- fi
- RUTA=/srv/botadero/
- RUTA_ENTORNO_VIRTUAL=/srv/botadero/venv
- cd $RUTA
- sudo -u www-data $RUTA_ENTORNO_VIRTUAL/bin/uwsgi --ini botadero.ini
- Dar permisos:
- sudo chmod +x /etc/init.d/botadero-init.sh
- Incluir en inicio:
- sudo update-rc.d botadero-init.sh defaults 99
- TODO: (AVISO! configuracion no funcional) Supervisor
- ====================================================
- Para hacer que la aplicacion se ejecute al inicio se puede usar supervisord
- $ sudo apt-get install supervisor
- Se debe crear un archivo para indicarle a supervisor como actuar este un
- ejemplo en :
- [unix_http_server]
- file=/tmp/supervisor.sock ; (the path to the socket file)
- [supervisord]
- logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log)
- logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB)
- logfile_backups=10 ; (num of main logfile rotation backups;default 10)
- loglevel=info ; (log level;default info; others: debug,warn,trace)
- pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
- nodaemon=false ; (start in foreground if true;default false)
- minfds=1024 ; (min. avail startup file descriptors;default 1024)
- minprocs=200 ; (min. avail process descriptors;default 200)
- [supervisorctl]
- serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket
- [program:botadero]
- command=/srv/botadero/venv/bin/uwsgi --ini /srv/botadero/botadero.ini
- directory=/srv/botadero
- autostart=true
- autorestart=true
- stdout_logfile=/srv/botadero/logs/uwsgi.log
- redirect_stderr=true
- stopsignal=QUIT
- Luego terminar los procesos de supervisor
- ps -A | grep supervisor
- kill <id>
- sudo supervisord -c /etc/supervisord.conf
- Mas referencia revisar: http://supervisord.org/configuration.html
|