Vers des applications
twelve-factor
Avec Symfony et Docker
Geoffrey Bachelet
geoffrey.io / @ubermuda
Slide 2
Slide 2 text
12factor.net
Slide 3
Slide 3 text
No content
Slide 4
Slide 4 text
Use declarative formats for setup automation
Clean contract with the underlying operating system
Suitable for deployment on modern cloud platforms
Minimize divergence between development and production
Can scale up without significant changes
”
Slide 5
Slide 5 text
Codebase
Dependencies
Config
Backing services
Build, release, run
Processes
Port binding
Concurrency
Disposability
Dev/prod parity
Logs
Admin processes
Slide 6
Slide 6 text
Codebase
Slide 7
Slide 7 text
Codebase
Question de vocabulaire
Slide 8
Slide 8 text
Codebase
une app = une base de code
("codebase")
Slide 9
Slide 9 text
Codebase
= un repo git/hg/svn
Slide 10
Slide 10 text
Codebase
2 codebases =! un app
Slide 11
Slide 11 text
Codebase
= un système distribué
("distributed system")
Slide 12
Slide 12 text
Distributed System
Web WS Worker
Slide 13
Slide 13 text
Codebase
1 codebase -> plusieurs déploiements
("deploy")
Slide 14
Slide 14 text
Codebase
Prod
Pré-prod
Dev
C.I.
Slide 15
Slide 15 text
Codebase
one app = one codebase
multiple codebases = a distributed system
one codebase -> many deploys
Pas de "shell out" !
si obligatoire, inclure le binaire dans les dépendances
Slide 23
Slide 23 text
Config
Slide 24
Slide 24 text
Resource handles to the database, Memcached
Credentials to external services such as Amazon S3 or Twitter
Per-deploy values such as the canonical hostname for the deploy
”
Slide 25
Slide 25 text
Séparation stricte de la config et du code.
Slide 26
Slide 26 text
app/config/parameters.yml
Slide 27
Slide 27 text
Il est possible de créer d'autres fichiers !
app/config/apis.yml
Slide 28
Slide 28 text
12 factor recommande
les variables d'environnement
Slide 29
Slide 29 text
Incenteev/ParameterHandler
env-map
Slide 30
Slide 30 text
docker run -e FOO=bar -e TOTO
Docker
Slide 31
Slide 31 text
web:
image: debian:wheezy
environnement:
- FOO=bar
- TOTO
Fig
Slide 32
Slide 32 text
Backing services
Slide 33
Slide 33 text
A backing service is any service the app consumes over the
network as part of its normal operation.
”
Fig
Pas (encore) d'orchestration "remote".
Outils tierce (Flocker, Panamax, etc.)
Slide 80
Slide 80 text
Logs
Slide 81
Slide 81 text
A twelve-factor app never concerns
itself with routing or storage of its output stream.
”
Slide 82
Slide 82 text
...each running process writes its event stream,
unbuffered, to stdout
”
Slide 83
Slide 83 text
Difficile d'être twelve-factor avec Symfony.
Slide 84
Slide 84 text
ELK
Elasticsearch + Logstash + Kibana
Slide 85
Slide 85 text
David Pilato
@dadoonet
Atelier : Hands on Elasticsearch & Kibana
Slide 86
Slide 86 text
David Pilato
@dadoonet
Atelier : Hands on Elasticsearch & Kibana
HIER
Slide 87
Slide 87 text
Olivier Dolbeau
@odolbeau
Talk : Laisse pas trainer ton log !
Slide 88
Slide 88 text
Olivier Dolbeau
@odolbeau
Talk : Laisse pas trainer ton log !
HIER
Slide 89
Slide 89 text
Olivier Dolbeau
@odolbeau
http://odolbeau.fr/blog/when-monolog-meet-elk.html
When Monolog meet ELK
Slide 90
Slide 90 text
Admin processes
Slide 91
Slide 91 text
One-off admin processes should be run in an identical
environment as the regular long-running processes of the app.
”
Slide 92
Slide 92 text
Container spécialisé ?
docker run acme/cli ...
Slide 93
Slide 93 text
docker exec
docker exec acme_web ...
1.3
Slide 94
Slide 94 text
Fig
fig run
Slide 95
Slide 95 text
Run a one-off command on a service.
For example:
$ fig run web python manage.py shell
By default, linked services will be started,
unless they are already
running. If you do not want to start linked
services, use
`fig run --no-deps SERVICE COMMAND [ARGS...]`.
fig.yml