lex00.flask-uwsgi-nginx

README.md

Rol de Ansible: flask-uwsgi-nginx

Este rol para Ansible despliega tu aplicación Flask desde un repositorio git.

El rol empaqueta tu aplicación Flask como un paquete wheel y luego la instala en un virtualenv.

Requisitos

  • Archivo .python-version

    Este archivo debe contener la versión de Python que estás utilizando.

  • python setup.py bdist_wheel

    El rol ejecutará este comando. Prueba antes y asegúrate de que tu proyecto pueda construir un paquete wheel.

Variables del Rol

app_repo_url: 'https://github.com/lex00/flask-github-jobs'

  • repositorio de python que contiene la aplicación flask.

app_subfolder: ''

  • si tu proyecto está en una subcarpeta en el repositorio, especifica esto aquí, de lo contrario déjalo en blanco.

app_description: 'Una aplicación Flask que lista trabajos de la API de trabajos de GitHub'

  • esto se incluirá en el script del servicio del sistema.

app_name: 'flask_github_jobs'

  • nombre de las carpetas de la aplicación y del servicio.

app_user: 'flask_github_jobs'

  • tanto el usuario como el grupo del sistema serán este valor.

app_domain: 'notarealdomain.com'

  • dominio al que responderá nginx.

app_module: 'flask_github_jobs'

  • módulo de python para uwsgi.ini.

app_callable: 'app'

  • callable de python para uwsgi.ini.

app_port: '80'

  • puerto del servicio.

app_health_ep: '/'

  • endpoint de salud.

uwsgi_process_count: '4'

  • número de procesos uwsgi.

uwsgi_thread_count: '2'

  • número de hilos uwsgi.

Dependencias

Ninguna

Ejemplo de Playbook

- hosts: all
  tasks:
  - import_role:
       name: lex00.flask-uwsgi-nginx

Configuración de Python

Puedes usar cualquier versión de Python que desees.

  • Archivo .python-version

    • Tu proyecto debe tener este archivo.
  • /home/{{ app_user }}/.pyenv/versions

    • pyenv construirá e instalará Python aquí.
  • /opt/{{ app_name }}/venv

    • La aplicación se instalará en este virtualenv.

Configuración de Uwsgi

Uwsgi se instalará en el virtualenv. No se instalarán paquetes del sistema para Uwsgi.

  • /etc/{{ app_name }}/app_name.ini

    • Archivo de configuración de Uwsgi.
  • /var/run/{{ app_name }}/{{ app_name }}.sock

    • Archivo de socket de Uwsgi.

Activos estáticos de Flask

Este rol descubrirá automáticamente tus carpetas de activos estáticos y las configurará en nginx.

Para que esto funcione:

  • Coloca tus activos en una carpeta llamada static en tu módulo de aplicación flask.

  • Configura static_url_path como vacío.

    app = Flask(__name__, static_url_path='')
    

Gestión de servicios

Ubuntu 14.04 Para iniciar/parar el servicio Uwsgi

sudo start {{ app_name }}

Ubuntu 14.04 Para iniciar/parar Nginx

sudo start nginx

Ubuntu >= 16 Para iniciar/parar el servicio Uwsgi

sudo systemctl start {{ app_name }}

Ubuntu >= 16 Para iniciar/parar Nginx

sudo systemctl start nginx

Registros

Los registros se colocarán en /var/log/{{ app_name }}.

Serán propiedad de {{ app_user }}.

Ejemplo de Vagrant + Galaxy

Crea un requirements.yml con este contenido:

---
- src: lex00.flask-uwsgi-nginx

El provisionador necesita que galaxy_role_file esté configurado de esta manera.

config.vm.provision "ansible", type: "ansible_local" do |ansible|
  ansible.verbose = true
  ansible.become = true
  ansible.extra_vars = "vars.json"
  ansible.config_file = "ansible.cfg"
  ansible.galaxy_roles_path = "roles"
  ansible.galaxy_role_file = "requirements.yml"
  ansible.playbook = "playbook.yml"
end

Ejemplo de Packer + Galaxy

Crea un requirements.yml con este contenido:

---
- src: lex00.flask-uwsgi-nginx

El provisionador necesita que galaxy_file esté configurado de esta manera.

{
  "type": "ansible-local",
  "host_vars": "{{ user `vars_path` }}",
  "playbook_dir": "{{ user `ansible_path` }}",
  "playbook_paths": "{{ user `ansible_path` }}",
  "role_paths": "{{ user `ansible_path` }}/roles",
  "playbook_file": "{{ user `ansible_path` }}/playbook.yml",
  "galaxy_file": "{{ user `ansible_path` }}/requirements.yml",
  "extra_arguments": [ "--extra-vars \"@host_vars/vars.json\"" ]
}

Pruebas con Vagrant

Se incluye un Vagrantfile para ayudar a probar el rol localmente.

Se requiere Vagrant > 2.0.

Iniciar el Vagrant

La primera vez que hagas esto, se ejecutará Ansible.

flask-uwsgi-nginx$ vagrant up

El Vagrant debería provisionarse correctamente.

Reprovisionar el Vagrant

Puedes ejecutar el rol nuevamente con:

flask-uwsgi-nginx/tests $ vagrant provision

Licencia

MIT

Acerca del proyecto

Deploy Flask from a git source repository

Instalar
ansible-galaxy install lex00.flask-uwsgi-nginx
Licencia
mit
Descargas
76
Propietario