Développement
Objectifs
- Connaître les twelve-factor app
- Créer un environnement de développement avec Docker Compose
Cours
DéveloppementDevOps
The twelve-factor app
Pour concevoir des applications
Facile à déployer sur le cloud
Portables entre les environnements
Scalables sans changement d'architecture
Pour le cloud, mais compatible DevOps
I. Base de code
https://12factor.net/fr/codebase
Plusieurs déploiements, un même code versionné
Factorisation du code en dépendance externe
II. Dépendances
Déclaration explicite des dépendances externes avec leur version
Utilisation d'un gestionnaire de dépendances
III. Configuration
Séparation de la configuration de l'application
Paramétrage par des variables d'environnement
Même code en production et en développement, mais configuration différente
IV. Services
Les ressources externes sont des services remplaçables
Base de données, serveur mail, cache, etc.
Connexion aux services par des variables d'environnement
V. Assemblez, publiez, exécutez (Build, release, run)
https://12factor.net/fr/build-release-run
Séparation des trois étapes
VI. Processus
L'application est sans état (stateless)
Les états sont stockées dans des services externes (base de données, cache, etc.)
VII. Associations de ports
L'application est accessible uniquement par des ports
Peut devenir un service externe d'une autre application
VIII. Concurrence
https://12factor.net/fr/concurrency
Scalabilité par duplication des processus indépendants
IX. Jetable
Démarrage et arrêt rapide
Redémarrage sans perte de données
X. Parité dev/prod
Proximité des environnements de développement et de production
Temporelle : dernière version rapidement déployée
Humaine : même équipe pour les deux environnements
Technique : mêmes outils/technologies/versions (OS, DB, etc.)
XI. Logs
Logs traités comme des flux d'événements (pas de fichiers)
Logs envoyés à la sortie standard (stdout)
Logs agrégés et indexés par un service externe
XII. Processus d’administration
Exécution des commandes d'administration/maintenance dans un processus ponctuel
Par exemple : migration de la base de données
Livrées avec le code de l'application
Environnement local
Déployer l'application sur sa machine
similaire à la production
Docker : virtualise une machine
Docker Compose : virtualise un réseau de machines (avec des sous-réseaux)
Docker Compose
Définition des services dans un fichier YAML
compose.yml
Actions groupées
docker compose up
,docker compose down
, etc.
Préconfiguration des containers
variables d'environnement, ports, volumes, réseaux, etc.
Docker Compose : Exemple
services:
db:
image: postgres
environment:
POSTGRES_PASSWORD: password
web:
build: .
command: python serve.py
environment:
DATABASE_URL: "postgres://postgres:password@db/postgres"
ports:
- "8000:8000"
Docker Compose : Utilisation
environment de développement (local)
tests d'intégration
poc (proof of concept) avec des réseaux
Versions sans animation, plein écran, imprimable.