by Victor Aguilar - @vicobits
Fullstack developer
android / python / javascript
victor@xiberty.com
Es una forma de distribución de software
Es una metodología para el desarrollo de aplicaciones SAAS
http://12factor.net/
escrito por Adam Wiggins en 2011
Production
Test
Developer 1
Developer 2
Declarar y aislar explícitamente las dependencias
DEPENDENCIAS
$ virtualenv env
$ source env/bin/activate
$ (env) pip install requirements.txt
Manifiesto para las dependencias
Herramienta de aislamiento
requirements.txt
django==1.9.6
djangorestframework==3.3.3
markdown==2.6.6
{
La configuración es la información necesaria para desplegar el código base
Nunca guardar información sensible en el código
Bases de datos
Credenciales
Direcciones, urls, etc
Archivo de configuración
Variables de entorno
GOOD
GOOD
BAD
BAD
GOOD
GOOD
RECOMENDADO
Tratar a los servicios de tratados como recursos adjuntos
¿Cuales son?
Bases de datos
Servidores de correo
Cache
Otro servicio
Sin distinción entre servicios locales o de terceros
Production deploy
Postgres
Mailgun / postfix
Redis
Amazon S3
La ejecución del ultimo lanzamiento:
Aplicación de reservas
Aplicación de catalogos
https://196.168.1.10:5555
https://196.168.1.10:8850
El escalamiento deberá ser horizontal
WEB 1
WEB 1
WORKER 1
WORKER 2
WORKER 3
DB 1
CONCURRENCIA
$ supervisorctl update
$ supervisorctl start test_project
$ supervisorctl stop test_project
Configuración
Administración
sudo nano /etc/supervisor/conf.d/site.conf
[program:test_project]
command = /apps/test_project/start.sh
redirect_stderr = true
environment=LANG=en_US.UTF-8,LC_ALL=en_US.UTF-8
{
Instalación
sudo apt-get install supervisor
Los procesos son desechables
Los entornos de desarrollo, producción, pruebas deben ser lo más similares posible.
Diferencias comunes entre entornos:
INTEGRACION CONTINUA
QUE LOS DESARROLLADORES DESPLIEGUEN
USAR EL MISMO STACK EN TODOS LOS ENTORNOS
LA TENTACIÓN MÁS COMÚN
DEBEMOS RESISTIRNOS A HACER ESTO
Tratar a los historiales como una transmisión de eventos
No guardar los historiales en la base de datos
Capturar los historiales y redirigirlo a un servicio local o de terceros
Hay procesos que solo necesitamos ejecutarlos una vez, procesos como:
Estos procesos deben estar en el código base
ADMINISTRACION DE PROCESOS
$ python manage.py makemigrations
$ python manage.py migrate
En django
$ python manage.py makemigrations
$ python manage.py migrate
$ python manage.py makemigrations
$ python manage.py migrate
1. Código base
2. Dependencias
3. Configuración
4. Servicios
5. Preparación lanzamiento y ejecución
6. Procesos
7. Puertos
8. Concurrencia
9. Indisponibilidad
10. Igualdad entre desarrollo y producción
11. Historiales
12. Administración de procesos
victor@xiberty.com