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
Deploy Flask from a git source repository
ansible-galaxy install lex00.flask-uwsgi-nginx