Quelles améliorations peut-on apporter à l'infrastructure actuelle ?¶
La problématique : le fonctionnement actuel, et mis en place il y a un moment, présente de nombreux soucis. Comment améliorer ce système sans en bouleverser l'organisation ?
I. Introduction¶
L'intranet est âgé, obsolète, et de nombreux points sont à améliorer. Le premier problème à évoquer et celui de l'architecture complexe de l'intranet. En effet, en plus de ne pas respecter les normes de nommage des fichiers, sa complexité pose des difficultés directes quant à la pérennité des sites hébergés par Insercall. La compréhension de leurs fonctionnements et la maintenance de ceux-ci en deviennent compliquées. Les sauvegardes sont redondantes, couteuses et volumineuses. Par exemple, de nombreux sites n'étant plus en développement sont encore enregistrés toutes les 20 minutes. De plus, l'efficacité de ces sauvegardes est douteuse et complexe à prendre en main alors que la mise en place d'une restauration devrait être immédiate et simple en cas de difficulté majeure.
II. Amélioration¶
1. Simplification¶
Un premier point à corriger serait la simplification du système. La lisibilité et la compréhension de ce dernier sont indispensables, puisqu'impactant directement le suivi, la prise en main et la maintenance du dispositif en place. Dissocier les sites en évolution constante des sites figés réduirait le coût général des enregistrements en modernisant plusieurs modèles de sauvegardes (plus adaptés à leurs applications).
2. Pérennité¶
Comme évoqué plus tôt, il est important que les enregistrements soient faciles et rapides à organiser. Il apparait également que le dispositif de sauvegarde actuel est couteux. La mise en place de nouveaux outils (par exemple un système de versionning) est compliquée, et ne permet pas l'implémentation facile de nouvelles fonctionnalités. Mettre en place un contexte de travail reflétant l'environnement de production clarifierait la maintenance et faciliterait l'implémentation future. À chaque version majeure d'un projet, il serait bon de publier une "release", un patch qui nous servirait de point de repère.
III. Solutions et technologies¶
1. Git¶
Cet outil de versionning populaire et largement utilisé est simple à prendre en main et allège la maintenance des sites. Il agrée aussi la mise en place de branche de travail, favorisant et simplifiant grandement la collaboration sur plusieurs projets (reprise ou création). Il rend également la récupération/sauvegarde des différentes versions plus accommodantes et en réduit la charge et le coût.
2. Gogs¶
Gogs est un dispositif d'hébergement de git, il met en ordre et présente les fonctionnalités de Git à l'aide d'une interface claire et dégagée. L'assemblage de Gogs et de Git permet aux utilisateurs de suivre et de prendre en main les différentes versions, la liste et l'état d'avancement des tickets, la présentation et le listing des projets en cours (sites hébergés).
3. Apache¶
Concernant apache2 (serveur web), revoir les noms de domaine pourrait en clarifier la gestion, il est même envisageable de créer ensuite un script qui génèrerait automatiquement la configuration des certificats SSL.
Architecture conseillée pour les DNS des sites hébergés :
- gogs.insercall.com : Contiens tous les projets Web (certains droits seront affectés si retenu, exemple : Équipe TC : Accès en lecture, Équipe multimédia Accès en écrire/Lecture).
- devs.insercall.com : (permet de suivre l'avancement des développements en cours) (utile également pour tester son travail en temps réel sans besoin d'envoyer un fichier après l'autre via FTP).
4. Base de données¶
Pour les systèmes de base de données, on pourrait en clarifier la structure en renommant les bases (titre de projet git apache et base de données éponyme). Il existe également de nombreux points plus complexes à négocier, mais étant donné qu'il s'agit de cas compliqués, ils seront abordés dans la partie technique de ce document. Actuellement, l'accès au phpMyAdmin et référencé et atteignable via Google, il est nécessaire de remédier à cela.
5. Sauvegardes¶
Les outils de sauvegarde actuels sont lourds, et ne permettent pas de récupérer facilement à un point/un état précis. Là encore, l'amélioration et la clarification du/des système(s) en place paraissent être bénéfiques.
IV. Quelques avantages¶
L'un des principaux avantages est la gestion de branches, ce processus facilite l'implémentation du travail en collaboration sur un même ou sur différentes ébauches. Elle permet la mise en place de patch, tout en donnant un suivi efficace des différentes avancées sur chacun des projets. Une fonctionnalité intéressante et celle des tickets, en ouvrant un celui-ci, on fait l'état d'un incident, d'un bug, d'une mise à jour à effectuer, ou d'une amélioration à instaurer. Ce billet est a posteriori affectable à une ou plusieurs personnes, qui prendront en charge la gestion de celui-ci, simplifiant donc la traçabilité et l'avancée du dit ticket.
Git et Gogs permet aussi la sauvegarde et la restauration sous des formes bien plus intéressantes qu'actuellement, gain d'espace, possibilité de récupération à un état particulier, facilité d'utilisation... Les nouveaux outils à organiser sont tous deux sous licence GNU (General Public License), ils sont très largement suivis et sont régulièrement mis à jour. Les atouts majeurs sont la rapidité, la souplesse et la légèreté de ces systèmes.
La mise à jour de l'architecture Apache présenterait plusieurs bienfaits : gain de temps en exécution, gain de place considérable (36 Go contre 2Go estimés), gain de performance, lisibilité, etc.
Ci-dessous, l'exemple de la place allouée aux systèmes de sauvegarde :
1. Actuels¶
- Serveur Principale (Online) :
163-172-32-1.rev.poneytelecom.eu
(163.172.32.1) A retirer car trop volumineuse. - Serveur Insercall (Livebox) :
92.154.37.221
(192.168.1.1)51 Go - 610 133 fichiers
- Disque dur externe :
51 Go - 610 133 fichiers
2. Proposés¶
On passerait de 543 Go (SQL + SITES) à environ 8 Go de données (SITES : 2 Go quant au SQL 153 Mo), soit un poids total de 10 Go en comptant les redondances des projets (sur le serveur d'insercall et sur le disque dur externe).
Gain estimé : 98.158 %
V. Aspects techniques¶
1. Utilisation de GIT¶
Idées :
- Intranet
master
develop
branche N
- OGA
master
develop
branche N
note : - La branche master correspond au dossier contenant le code source en production. - La branche develop correspond au dossier contenant le code source en développement. - La branche N. correspond au dossier contenant le code source en développement d'un patch, d'une fontionnalité ou encore d'une réparation/amélioration.
2. Utilisation de GOGS¶
Exemple d'URL pour gogs :
https://gogs.insercall.com/projets/intranet
3. Architecture¶
a. Architecture actuelle¶
www/SITES ├── AG-INSERCALL ├── AIST ├── bleudazur_ps_1_7 ├── BOITEACULTURE ├── branches ├── CANCRES ├── CONSOMMEZLEVAUCLUSE ├── dev ├── develop ├── DEV-INTRANET ├── DEV-INTRANET-HTTP ├── Dominique-bottant ├── flyspray ├── Formation ├── IFRIA-PACA ├── Insercall ├── INSERCALL ├── Insercall_Vitrine ├── Insercall_Vitrine_TMP ├── INTRANET ├── INTRANET_BAK ├── INTRANET-OLD ├── INTRANET_TEST ├── JEVOTE ├── JE-VOTE ├── LABOITACV ├── LivreDor ├── prod ├── QUALIPUBLIC ├── QUALIPUBLIC_TST ├── QUALISON2 ├── RENAULT ├── SEPH2017 ├── SILMEE ├── Tchad -> /home/administrateur/SVN/Tchad ├── testclient └── teston 37 directories Total Size : 36 Go
Note : les dossiers en majuscules ne respectent aucune norme de nommage.
b. Noms de domaines et sous-domaines¶
Le préfixe URL nomine alors une partie d'Insercall.
Exemple : Gogs
- Gogs :
gogs.insercall.com
(SSL)
Contient tous les projets, y compris chaque version de chaque ébauche, avec différentes branches (production (master), develop, etc.).
Exemple : Projet : Intranet
- URL de la partie en dev : http://devs.insercall.com/intranet/ (redirige automatiquement vers la branche développe).
- URL d'une branche en cours de dev : http://devs.insercall.com/intranet/develop/hotfix-284/ (théorique) Ici on est sur la partie développement d'Insercall (préfixe devs).
c. Arborescence GIT & APACHE¶
/var/git/
:
git/ ├── assemblée générale ├── association-interentreprises84 ├── bottant-photographe ├── cancres ├── consommez-le-Vaucluse ├── insercall-vitrine ├── intranet ├── je-vote ├── semaine-pour-emploi-personnes handicapees-2017 └── slime-rhone 10 directories Total Size : 2 Go
/var/www/
:
www/ ├── assemblee-generale │ ├── develop │ └── master ├── association-interentreprises84 │ ├── develop │ └── master ├── botany-photographe │ ├── develop │ └── master ├── cancres │ ├── develop │ └── master ├── consommez-le-Vaucluse │ ├── develop │ └── master ├── insercall-vitrine │ ├── develop │ └── master ├── intranet │ ├── develop │ └── master │ └── hotfix-254 ├── je-vote │ ├── develop │ └── master ├── semaine-pour-emploi-personnes-handicapees-2017 │ ├── develop │ └── master └── slime-rhone ├── develop └── master 31 directories Total Size : 1,2 Go
Rendre manager obsolète (contrôler les redirections DNS), étant donné que les projets seront accessibles autrement.
3. Utilisation de branches¶
-
Note : si on crée une nouvelle branche en développement nommée
hotfix-issue78
alors l'URL pour y accéder sera :branch.oga.insercall.com/hotfix-issue78/
-
Note bis : Ne pas oublier de créer un ticket par fonctionnalité, amélioration ou réparation à venir (exemple : une demande du client à propos d'un nouveau module).
2. Versionning / Sauvegardes / SQL¶
État actuel :
Nouvelles architectures SQL :
developpement ├── _assemblée générale ├── _association-interentreprises84 ├── _bottant-photographe ├── _cancres ├── _consommez-le-Vaucluse ├── _insercall-vitrine ├── _intranet ├── _je-vote ├── _semaine-pour-emploi-personnes handicapees-2017 └── _slime-rhone production ├── _assemblée générale ├── _association-interentreprises84 ├── _bottant-photographe ├── _cancres ├── _consommez-le-Vaucluse ├── _insercall-vitrine ├── _intranet ├── _je-vote ├── _semaine-pour-emploi-personnes handicapees-2017 └── _slime-rhone
À chaque version majeure d'un projet, il faut publier une "release" qui nous dépannerait de sauvegarde en cas de panne. Celle-ci servirait de point de repère pour une quelconque récupération (plus besoin de faire des enregistrements tous les jours pour un site mis en production il y a huit ans).
Exemple : Projet Silme, une fois le projet fini on sort une version nommée : silme-v1.2.3.zip
il suffit donc de mettre le fichier zip dans un dossier (à définir).
Notes : la mouture du projet sera toujours conservée sur le serveur avec notre outil de version (Gogs); redondance de sauvegarde; on peut même envisager de stocker les sites en production sur un cloud pour éviter tout souci ou d'utiliser plusieurs serveurs miroir.
3. git commands (for advanced developers)¶
- Switch to branches "contact form"
git checkout -b contact form
- Show working tree status
git status
- Record changes to the repository with the message
git commit -am "Updated form in contact modules"
- Switch to branches "master"
git checkout master
- Join two or more development histories together
git merge --no-f contact form
- Remove branch "contact form"
git branch -d contact form
- Update remote refs along with associated objects
git push origin master
- Remove remote branch
git push origin :hotfix-254
- Create a tag object signed with GPG
git tag -a 1.2
(- Create tag object with united message)git tag -a v1.4 -m "my version 1.4"
- Push tag to remote
git push origin 1.2
- Remove tag
git push origin :tag name
4. Gogs script¶
post-receive :
#!/bin/sh # Exemple pour le client OGA while read old rev new rev ref does branch=`echo $ref | cut -d/ -f3` if [ "master" = "$branch" ]; then git --work-tree=/var/www/oga/master/ checkout -f $branch elif ["develop" = "$branch" ]; then git --work-tree=/var/www/oga/develop/ checkout -f $branch else git --work-tree=/var/www/oga/develop/"${branch}" checkout -f $branch fi done
5. SQL backup script¶
Commands :
mysqldump -u root -h localhost -pgy92sql3o3 --all-databases | gzip > dump.sql.gz
153M dump.sql.gz
Scripts :
#!/bin/bash # Scripts de récupération des tables SQL. # Cron : Everyday at 19h. # Written by ArturiaPendragon cd /var/git/sql-backup/ git checkout master TIMESTAMP=$(date +"%d-%m-%Y") BACKUP_DIR="/var/git/sql-backup/$TIMESTAMP/" MYSQL_USER="root" MYSQL=mysql MYSQL_PASSWORD="xxxxxx" MYSQLDUMP=mysqldump mkdir -p "$BACKUP_DIR/" #databases=`$MYSQL --user=$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema)"` databases="developpement_intranet production_assemblee-generale-2017 production_bottani-photographe production_cancres production_gogs production_insercall-vitrine production_intranet production_je-vote production_semaine-pour-emploi-personnes-handicapees-2017 production_silmee-rhone" for db in $databases; do $MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db | gzip > "$BACKUP_DIR/$db.gz" done # Suppréssion de la sauvegardes d'il y a 7 jours test=$(date -d "-7days" +"%d-%m-%Y") rm -rf "/var/git/sql-backup/${test}" #cd /var/git/sql-backup/ # On push sur git :) #git init #git checkout master git add . git commit -m "Sauvegardes du $TIMESTAMP" git gc #git push origin master git tag -a "$TIMESTAMP" -m "$TIMESTAMP" #git push origin "$TIMESTAMP" #git remote add origin https://gogs.insercall.com/archives/sql-backup.git #git gc #git push -u origin master
#!/bin/bash # Scripts de récupération des tables SQL. (Cron toutes les 10 minutes ). # Written by ArturiaPendragon cd /var/git/sql-backup/ git checkout develop TIMESTAMP=$(date +"%d-%m-%Y @ %H:%M:%S") BACKUP_DIR="/var/git/sql-backup/" MYSQL_USER="root" MYSQL=mysql MYSQL_PASSWORD="xxxxxx" MYSQLDUMP=mysqldump databases="developpement_intranet production_assemblee-generale-2017 production_bottani-photographe production_cancres production_gogs production_insercall-vitrine production_intranet production_je-vote production_semaine-pour-emploi-personnes-handicapees-2017 production_silmee-rhone" #databases=`$MYSQL --user=$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema)"` for db in $databases; do $MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --skip-extended-insert $db | gzip > "$BACKUP_DIR/$db.gz" done # Suppréssion de la sauvegardes d'il y a 7 jours #test=$(date -d "-7days" +"%d-%m-%Y") #rm -rf "/var/git/sql-backup/${test}" TIME=$(date +"%d-%m-%Y-%Hh%M") # On push sur git :) #git init #cd /var/git/sql-backup/ #git checkout develop git add . git commit -am "Mise à jour des fichiers (SQL)" git gc git tag -a "$TIME" -m "$TIME" #git push origin develop #git push origin "$TIME" #git remote add origin https://gogs.insercall.com/archives/sql-backup.git #git push -u origin master
commit a0b994fbf8f374b08768a3f722b06df8c0ca18a9 Author: Arturia Pendragon <[email protected]> Date: Tue Dec 5 10:00:18 2017 +0100 Mise à jour des fichiers (SQL) commit 340665758dc428b2c447defe5a245ababf87eb0a Author: Arturia Pendragon <[email protected]> Date: Tue Dec 5 09:00:17 2017 +0100 Mise à jour des fichiers (SQL) commit a91ed3c86cb020054be0c54397bf52ffb9295a16 Author: Arturia Pendragon <[email protected]> Date: Tue Dec 5 08:00:17 2017 +0100 Mise à jour des fichiers (SQL)