notas_deploy_nginx_debian.txt 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. Notas de despliegue de la app botadero en debian 8 con NGINX
  2. basado en:
  3. * http://flaviusim.com/blog/Deploying-Flask-with-nginx-uWSGI-and-Supervisor/
  4. * https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uwsgi-and-nginx-on-ubuntu-14-04
  5. Prerequisitos
  6. =============
  7. * Esta prueba se ha realizado sobre Debian GNU/Linux 8 y NGINX instalado.
  8. * Se asume que el directorio de localizacion de la app es /srv/botadero/
  9. * Para poder ejecutar la app y permitir comunicar uwsgi con NGINX se debe
  10. instalar python-virtualenv y tener instalado python-pip, python-dev
  11. y herramientas para compilacion de paquetes (build-essential)
  12. * Es necesario activar crear y activar el entorno virtual python:
  13. $ virtualenv venv
  14. $ . venv/bin/activate
  15. * Para poder ejecutar la app se debe instalar los paquetes listados en
  16. Docu/pip_install.txt con:
  17. $ pip install Flask
  18. $ pip install uwsgi
  19. * Copiar la carpeta del proyecto botadero en el directorio /srv/botadero
  20. * Cambiar el usuario y grupo
  21. chown -R www-data:www-data /srv/botadero
  22. botadero.ini
  23. ============
  24. Este archivo indica como actuar a uwsgi se puede usar el que contiene el
  25. repositorio ubicado en el directorio raiz de la app.
  26. (se asume /srv/botadero/botadero.ini)
  27. [uwsgi]
  28. module = wsgi
  29. master = true
  30. processes = 5
  31. socket = botadero.sock
  32. chmod-socket = 660
  33. vacuum = true
  34. die-on-term = true
  35. Config de NGINX
  36. ===============
  37. Asumiendo que se creara otro virtualhost en nginx para la app se puede crear
  38. un nuevo archivo en /etc/nginx/sites-available/botadero con contenido:
  39. server{
  40. #listen puerto;
  41. listen 80;
  42. server_name dominio_del_server_o_IP;
  43. # permite la subida de archivos de hasta 5000 MB
  44. client_max_body_size 5000M;
  45. location / {
  46. include uwsgi_params;
  47. uwsgi_pass unix:/srv/botadero/botadero.sock;
  48. }
  49. }
  50. Luego de guardar el archivo enlazarlo:
  51. sudo ln -s /etc/nginx/sites-available/botadero /etc/nginx/sites-enabled
  52. Para probar el configs en NGINX:
  53. sudo nginx -t
  54. Si funciona reiniciar nginx
  55. sudo service nginx restart
  56. Probar UWSGI con NGINX
  57. ======================
  58. Se puede probar que todo funciona bien con uwsgi haciendo:
  59. $ sudo -u www-data uwsgi --ini botadero.ini
  60. En el directorio donde esta la app (/srv/botadero/) con el entorno virtual activo,
  61. sin activar el entorno virtual se puede usar:
  62. $ sudo -u www-data venv/bin/uwsgi --ini botadero.ini
  63. Al abrir un navegador en la ruta y puerto especificada en el archivo de config
  64. de Nginx se deberia poder usar la app.
  65. Ejecutar al inicio con systemd
  66. ==============================
  67. Aprovechando el archivo botadero.ini para decirle a uwsgi como ejecutar la app se puede hacer un archivo para que systemd lo ejecute.
  68. En este ejemplo el archivo puede ir en
  69. /etc/systemd/system/uwsgi.service
  70. Con contenido:
  71. [Unit]
  72. Description=uwsgi deamon
  73. After=network.target
  74. [Service]
  75. User=www-data
  76. Group=www-data
  77. WorkingDirectory=/srv/botadero/
  78. ExecStart=/srv/botadero/venv/bin/uwsgi --ini botadero.ini
  79. [Install]
  80. WantedBy=multi-user.target
  81. Se puede probar que se ejecuta con:
  82. $ sudo systemctl start uwsgi.service
  83. Si al ejecutar:
  84. $ sudo systemctl status uwsgi.service
  85. La app esta corriendo se puede habilitar para que se ejecute al inicion con:
  86. $ sudo systemctl enable uwsgi.service
  87. Ejecutar al inicio con script
  88. =============================
  89. Si no se tiene systemd o el paso anterior no funciona, se puede hacer un script tipico de inicio.
  90. Se deberia agregar un script para hacer ejecutar
  91. sudo -u www-data vevn/bin/uwsgi --ini botadero.ini
  92. al inicio del sistema o usar otros programas como supervisor o usar un script
  93. mejor elaborado.
  94. Ejemplo del script muy basico (por ejemplo en: /etc/init.d/botadero-init.sh)
  95. #!/bin/sh
  96. if [ $UID -ne 0 ]
  97. then
  98. echo "debe ser superusuario"
  99. exit 1
  100. fi
  101. RUTA=/srv/botadero/
  102. RUTA_ENTORNO_VIRTUAL=/srv/botadero/venv
  103. cd $RUTA
  104. sudo -u www-data $RUTA_ENTORNO_VIRTUAL/bin/uwsgi --ini botadero.ini
  105. Dar permisos:
  106. sudo chmod +x /etc/init.d/botadero-init.sh
  107. Incluir en inicio:
  108. sudo update-rc.d botadero-init.sh defaults 99
  109. TODO: (AVISO! configuracion no funcional) Supervisor
  110. ====================================================
  111. Para hacer que la aplicacion se ejecute al inicio se puede usar supervisord
  112. $ sudo apt-get install supervisor
  113. Se debe crear un archivo para indicarle a supervisor como actuar este un
  114. ejemplo en :
  115. [unix_http_server]
  116. file=/tmp/supervisor.sock ; (the path to the socket file)
  117. [supervisord]
  118. logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log)
  119. logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB)
  120. logfile_backups=10 ; (num of main logfile rotation backups;default 10)
  121. loglevel=info ; (log level;default info; others: debug,warn,trace)
  122. pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
  123. nodaemon=false ; (start in foreground if true;default false)
  124. minfds=1024 ; (min. avail startup file descriptors;default 1024)
  125. minprocs=200 ; (min. avail process descriptors;default 200)
  126. [supervisorctl]
  127. serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket
  128. [program:botadero]
  129. command=/srv/botadero/venv/bin/uwsgi --ini /srv/botadero/botadero.ini
  130. directory=/srv/botadero
  131. autostart=true
  132. autorestart=true
  133. stdout_logfile=/srv/botadero/logs/uwsgi.log
  134. redirect_stderr=true
  135. stopsignal=QUIT
  136. Luego terminar los procesos de supervisor
  137. ps -A | grep supervisor
  138. kill <id>
  139. sudo supervisord -c /etc/supervisord.conf
  140. Mas referencia revisar: http://supervisord.org/configuration.html