2020-04-15 17:01:06 +02:00
< center > < h1 > PROJET< / h1 > < / center >
2020-04-15 17:21:19 +02:00
#### Objectif: Automatisation de déploiement
2021-04-07 11:45:58 +02:00
L'objectif est d'automatiser des déploiements à l'aide de playbook Ansible et de son écosystème
2020-04-15 17:21:19 +02:00
2021-04-07 11:45:58 +02:00
Ce projet devra comprendre un :
2022-03-24 14:49:31 +01:00
- Déploiement serveur (nginx, mysql, php, composer, nodejs)
- Déploiement applicatif (ProjectSend)
- https://github.com/projectsend/projectsend
2020-04-15 17:01:06 +02:00
#### Groupe ou individuel:
2021-04-07 11:45:58 +02:00
Ce projet peut se faire en binôme ou individuellement
2020-04-15 17:01:06 +02:00
#### Consignes:
2021-04-07 11:45:58 +02:00
- Le projet doit être mis sur un repository dans le [gitlab ](https://forge.univ-lyon1.fr ) de l'université.
2021-06-16 14:15:43 +02:00
- Le professeur doit être ajouté en tant que `owner` aux membres du repository (@yohann.valentin)
2020-04-15 17:01:06 +02:00
2021-04-07 11:45:58 +02:00
- Un readme doit être présent dans le projet avec les rubriques suivantes :
2020-04-15 17:01:06 +02:00
- Liste des étudiants.
- Comportant: nom - prénom - numéro étudiant
2021-04-07 11:45:58 +02:00
- Les clés ssh de connexion :
- aux serveurs openstack (VM)
2020-04-15 17:01:06 +02:00
- 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
#### Architecture/Environnement
2021-04-07 11:45:58 +02:00
L'architecture doit permettre le déploiement sur des environnements de :
2020-04-15 17:01:06 +02:00
- preprod
2021-04-07 11:45:58 +02:00
- prod
2020-04-15 17:01:06 +02:00
#### Serveur
2022-03-24 14:49:31 +01:00
**!! ATTENTION !!! PAS DE ROLE PROVENANT DE LA COMMUNAUTÉ GALAXY POUR LA PARTIE APPLICATIF**
2021-04-07 11:45:58 +02:00
Il doit être possible de déployer les parties suivantes (séparément ou "all-in-one") :
2022-03-24 14:49:31 +01:00
- apt:
- zip
- unzip
2021-04-07 11:45:58 +02:00
- serveur web (nginx)
2021-05-05 19:25:42 +02:00
- 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]
2022-03-24 14:49:31 +01:00
- base de données (mysql)
2021-05-05 19:25:42 +02:00
- config: create database / create user and password
2021-05-12 16:59:16 +02:00
- applicatif (php / composer / git / npm )
2021-05-26 15:25:11 +02:00
- php
- version 7.4
2022-03-24 14:49:31 +01:00
- Extensions: php7.4-mysql php7.4-mbstring php7.4-gd php7.4-xml php-7.4-gmp php-7.4-zip
2021-05-26 15:25:11 +02:00
- config:
- max_execution_time: 60
- memory_limit: 256M
2021-05-26 17:49:02 +02:00
- composer:
2021-06-09 16:29:58 +02:00
- version 1.*
2022-03-24 14:49:31 +01:00
- la commande suivante suffit normalement: `apt install composer`
- nodejs / npm
2020-04-15 17:01:06 +02:00
#### Applicatif
2022-03-24 14:49:31 +01:00
** Possibilité d'utiliser le role suivant : https://github.com/ansistrano/deploy**
2020-04-15 17:01:06 +02:00
La stratégie de déploiement doit permettre du `atomic deployments`
2021-04-07 11:45:58 +02:00
> **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.
2021-05-05 19:25:42 +02:00
- Ressource pour en savoir plus sur l'atomic deployment
2021-04-07 11:45:58 +02:00
- 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)
2020-04-15 17:01:06 +02:00
```
2022-03-24 14:50:44 +01:00
-- /var/www/html/projectsend
|-- current -> /var/www/html/projectsend/releases/20200512131539
2020-04-15 17:01:06 +02:00
|-- releases
| |-- 20200512131539
| |-- 20200509150741
| |-- 20200509145325
|-- shared
```
2022-03-24 14:49:31 +01:00
- Le déploiement de l'applicatif doit prendre en compte la version (release) de l'applicatif (https://github.com/projectsend/projectsend/releases)
2021-05-18 15:50:11 +02:00
- Le chemin de base pour l'installation de l'applicatif sera différent en fonction du serveur
2022-03-24 14:49:31 +01:00
- preprod: /var/www/html/preprod/project_send/...
- prod: /var/www/html/prod/project_send/...
2021-05-05 19:25:42 +02:00
2021-05-18 15:50:11 +02:00
- L'applicatif doit comporter une connexion à la base de données
2022-03-24 14:49:31 +01:00
**Chaque environnement doit avoir sa propre base de données avec un user et un mot de passe différent.**
2020-06-03 16:59:05 +02:00
2021-05-05 19:25:42 +02:00
Exemple:
2021-05-18 15:53:09 +02:00
2021-05-18 15:51:22 +02:00
- preprod:
2022-03-24 14:49:31 +01:00
- user: project_send_preprod
- pwd: project_send_preprod
2021-05-18 15:51:22 +02:00
- prod:
2022-03-24 14:49:31 +01:00
- user: project_send_prod
- pwd: project_send_prod
2021-05-05 19:25:42 +02:00
2021-05-26 17:49:02 +02:00
- Install les dépendances PHP:
- composer install
2022-03-24 14:49:31 +01:00
- Variable d'environnement du projet project_send pour la configuration de la base de données dans le ficher `sys.config.php` (fichier d'origine: `includes/sys.config.sample.php` )
2021-05-05 19:25:42 +02:00
2021-05-26 17:49:02 +02:00
- Install et Compiler le JS et SCSS:
- npm install
2022-03-24 14:49:31 +01:00
- run gulp: `./node_modules/gulp/bin/gulp.js`
2021-05-05 19:25:42 +02:00
2022-03-24 14:49:31 +01:00
- Le dossier `upload` dans projectSend doit être partagé (shared) entre les différentes versions de déploiement
2020-04-15 17:01:06 +02:00
#### 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
2021-04-07 11:45:58 +02:00
- Des tests applicatifs pourront être lancés via un playbook (phpunit)
2021-06-08 18:43:24 +02:00
- Si des `roles` ont été créés ceux-ci pourront être testés avec [Molecule ](https://molecule.readthedocs.io/en/latest/ )
#### 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 ](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
```