ansible.cfg | ||
archi-project.png | ||
my.cnf.j2 | ||
playbook-example.yaml | ||
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 1.*
- la commande suivante suffit normalement:
apt install install
- 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
Tips
Playbook
Afin de bypass le proxy sur l'execution d'un playbook, vous pouvez ajouter au debut de vos playbooks les élements suivants (pour un exemple complet: playbook-example.yaml):
vars:
proxy: "http://proxy.univ-lyon1.fr:3128/"
environment:
http_proxy: "{{proxy}}"
https_proxy: "{{proxy}}"
APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE: DontWarn
Mariadb
Pour executer les commandes en rapport avec mariadb (database et user), vous pouvez soit:
- changer de user pour devenir root (
become_user
) - ajouter via un template la config dans le fichier
.my.cnf
au user root (/root/.my.cnf
)