ansible.cfg | ||
archi-project.png | ||
readme.md | ||
vhost.conf |
PROJET
Objectif: Automatisation de déploiement
L'objectif est d'automatiser des déploiements à l'aide de playbook Ansible et de son écosystème
Ce projet devra comprendre un :
- Déploiement serveur (nginx, mariadb, php, composer, nodejs)
- Déploiement applicatif (Symfony blog)
- https://forge.univ-lyon1.fr/iut-lyon-lp-devops-ansible/symfony-blog
Groupe ou individuel:
Ce projet peut se faire en binôme ou individuellement
Consignes:
-
Le projet doit être mis sur un repository dans le gitlab de l'université.
- Le professeur doit être ajouté en tant que
owner
aux membres du repository
- Le professeur doit être ajouté en tant que
-
Un readme doit être présent dans le projet avec les rubriques suivantes :
- Liste des étudiants.
- Comportant: nom - prénom - numéro étudiant
- Les clés ssh de connexion :
- aux serveurs openstack (VM)
- aux repositories gitlab
- La liste des
roles
(si utilisés). - La liste des commandes à utiliser.
Ceux-ci pourront aussi être présents dans un makefile - Une présentation de l'architecture mise en place
- Liste des étudiants.
Architecture/Environnement
L'architecture doit permettre le déploiement sur des environnements de :
- preprod
- prod
Serveur
Il doit être possible de déployer les parties suivantes (séparément ou "all-in-one") :
- serveur web (nginx)
- Configuration: Activer le Gzip (https://www.digitalocean.com/community/tools/nginx)
- Vhost pour Symfony: [https://symfony.com/doc/current/setup/web_server_configuration.html#nginx]
- base de données (mariadb)
- (?TODO Check timeout sur installation de la clé) Installer la version : 10.5
- config: create database / create user and password
- applicatif (php / composer / git / npm )
- php
- version 7.4
- Extensions: JSON, zip, mysql, intl, fpm, xml
- config:
- max_execution_time: 60
- memory_limit: 256M
- composer:
- version 2.*
- https://getcomposer.org/download/
- php
Applicatif
!! ATTENTION !!! PAS DE ROLE PROVENANT DE LA COMMUNAUTÉ GALAXY POUR LA PARTIE APPLICATIF
La stratégie de déploiement doit permettre du atomic deployments
Atomic deployments are a style of code deployment that symlink the most recent version of the code so it’s available to the web server to serve.
Atomic deployment – Make updates available only when they are complete and totally in place.
-
Ressource pour en savoir plus sur l'atomic deployment
- https://deploybot.com/blog/deploy-complex-apps-with-atomic-sftp-deployments (lire les 3 premières parties)
- https://www.ewaldvanderveken.dev/zero-downtime-deployment-of-your-symfony-project-using-capistrano-and-gitlab-ci/ (lire la première partie)
-
Module ansible utilisable:
-- /var/www/html/my-app.com
|-- current -> /var/www/html/my-app.com/releases/20200512131539
|-- releases
| |-- 20200512131539
| |-- 20200509150741
| |-- 20200509145325
|-- shared
-
Le chemin de base pour l'installation de l'applicatif sera différent en fonction du serveur
- preprod: /var/www/html/preprod/symfony_blog/...
- prod: /var/www/html/prod/symfony_blog/...
-
L'applicatif doit comporter une connexion à la base de données
Chaque environnement doit avoir sa propre base de données avec un user et un mot de passe différent.
Exemple:
- preprod:
- user: symfony_preprod
- pwd: symfony_preprod
- prod:
- user: symfony_prod
- pwd: symfony_prod
-
Install les dépendances PHP:
- composer install
-
L'applicatif doit permet d'afficher un titre de blog différent par environnement.
Exemple:
Symfony blog - preprod -
Variable d'environnement du projet symfony dans le ficher
.env
du projet Symfony blog:- DATABASE_URL=
- APP_ENV=
- server preprod => dev
- server prod => prod
- APP_SECRET = doit être unique par environnement
- PROJECT_TITLE=
- server preprod => Symfony blog - preprod
- server prod => Symfony blog - prod
Commande pour compiler les variables d'environment:
- server preprod :composer dump-env dev
- server prod :composer dump-env prod
-
Mise à jours de la base de données:
bin/console doctrine:migration:migrate -n
-
Install et Compiler le JS et SCSS:
- npm install
- npm run build
-
Pour la preprod:
- Ajouter les données de test (fixtures)
bin/console hautelook:fixtures:load
- Ajouter les données de test (fixtures)
Conseils
- Un code organiser/structurer, tu feras
- Sur une/des nouvelle(s) machine(s) (hôte/VM), le professeur lancera - sans erreur, les playbooks seront
Bonus
- Des tests applicatifs pourront être lancés via un playbook (phpunit)
- Si des
roles
ont été créés ceux-ci pourront être testés avec Molecule