CEO-Vision Documentation Interne¶
PROC - Accès et outils¶
Rédacteur | Date de modification | Version |
---|---|---|
JLE | 30/12/2022 | V1.0 |
Outils¶
Outils obligatoires¶
Les outils ou applications suivants sont obligatoires sur chaque postes développeur
- Poste de travail
- Mise à jour régulière du poste
- Nommage du poste : CEOV-GROUP-TYPE-ID => Demander un identifiant à votre N+1
- Nommage des comptes
- Un compte Administrateur nommé « admin » pour Windows et « root » pour Linux et MacOS
- Un compte utilisateur non Administrateur avec votre nom d’utilisateur entreprise (1ère lettre du prénom + nom)
- Installation de l’antivirus Bitdefender
- Windows : https://cloudgz.gravityzone.bitdefender.com/Packages/BSTWIN/0/setupdownloader_[aHR0cHM6Ly9jbG91ZGd6LWVjcy5ncmF2aXR5em9uZS5iaXRkZWZlbmRlci5jb20vUGFja2FnZXMvQlNUV0lOLzAvczhxUlNQL2luc3RhbGxlci54bWw-bGFuZz1mci1GUg==].exe
- Mac : https://cloudgz.gravityzone.bitdefender.com/Packages/MAC/0/s8qRSP/setup_downloader.dmg
- Linux : https://cloudgz.gravityzone.bitdefender.com/Packages/NIX/0/s8qRSP/setup_downloader.tar
- Installation de la politique de sécurité
- Windows
- Télécharger https://gofast.ceo-vision.com/node/151138
- Dézipper dans « C:WindowsSystem32GroupPolicy »
- Télécharger https://gofast.ceo-vision.com/node/150847 et placer dans « C:UsersUSER_IDDocumentsSecurityTemplates »
- Executez la commande « gpupdate /force »
- Windows
- GitKraken => TODO : Documenter l’intégration de la licence
Outils conseillés¶
- IDE : Visual Studio Code, PHPStorm, Netbeans
Accès¶
En attente de l’interface de gestion de comptes (account), demandez vos accès à votre N+1 :
- Annuaire interne
- GoFAST
- Messagerie Bluemind
- Jira
- Teampass
- Gitlab
TODO : A documenter une fois l’interface https://account.ceo-vision.com mise en production.
PROC - Time Log (Tempo)¶
Rédacteur | Date de modification | Version |
---|---|---|
JLE | 03/01/2023 | V1.0 |
Utiliser tempo¶
Tous les membres de l’équipe IT de CEO-Vision enregistrent leur temps passé sur chaque tâche. Pour ce faire, nous utilisons le Plugin “Tempo” de Jira, ce qui nous permet de lier les tickets aux enregistrements.
Enregistrer son temps¶
L’accès à Tempo se fait depuis les applications de Jira :

Voici comment se compose l’interface de Tempo :

- Suivi du temps passé par tâche
- Utilisez ce bouton pour enregistrer un temps sur une tâche
- Il est possible de changer de vue et de passer en mode calendrier, à la semaine par exemple
- Ce bouton sert à envoyer ses timelog, il doit être utilisé à la fin du mois
- En cliquant sur chaque case il est possible d’y renseigner un temps
Une fois que toutes les tâches ont été loggués sur un mois, le système propose de soumettre la feuille de temps pour approbation :

Avertissement
Les feuilles de temps doivent être soumises au plus tard le 10 de chaque mois pour la période précédente
Jira spécifiques pour enregistrer un temps¶
Parfois, certaines tâches ne concernent pas directement un Jira. Pour ces cas, il est possible d’enregistrer son temps sur des tickets spécifiques :
- CEOVIS-535 : Support client, interventions en production, ticketing, réponses e-mail…
- CEOVIS-585 Tâches techniques interne (Intervention sur les serveurs CEO-Vision, hébergement etc)
- CEOVIS-554 Tâches non techniques interne (RH/Mgt/Formation/Administratif). Attention : Certaines tâches techniques de management comme la validation de PR ou la review de code peuvent entrer dans cette catégorie
- GFQAS-67 : Tâches relatives à la partie qualité n’entrant pas dans le cadre d’un Jira qualité (réunions, ..)
- PRJ-XXX Tâches X.X.X (Exemple CEOVIS-548 Taches 4.0.X) : Tâches relatives à la production d’une release (Build, réunions GF4, MER/MEP sur environnements internes…)
- CEOVIS-210 : Autre, ne pouvant être classé (à utiliser le moins possible)
Synchronisation avec le calendrier¶
Cette procédure détaille les étapes de synchronisation du calendrier BlueMind avec l’application Tempo de Jira.
Attention : Cette procédure nécessite d’envoyer les données de notre calendrier à google calendar ce qui n’est pas souhaité mais malheureusement nécessaire pour l’intégration.
Renseigner l’agenda¶
La première chose à faire est de renseigner correctement son agenda avec ses évènements de la journée de la manière suivante : NUM-XXX DESCRIPTION
- NUM-XXX Corespond au numéro de Jira
- DESCRIPTION Correspond à la description de la tâche

Export de l’agenda au format iCal¶
Sur l’interface Bluemind (https ://bluemind.ceo-vision.com), aller dans son agendaet dans la partie “Calendriers’ ne garder actif que son calendrier :

Puis dans le menu en haut à droite, exporter le calendrier :

Import de l’agenda dans Google Calendar¶
Sur Google Calendar dans « Autres agendas » cliquer sur importer :

Séléctionner le fichier exporté depuis Bluemind et cliquer sur « Importer »

Synchronisation avec Tempo¶
Dans l’application Tempo, cliquer sur le bouton « Apps » dans le menu de gauche

Choisir « Google Calendar »

Important : Choisir « Basic calendar connection », la connexion améliorée ne fonctionne pas bien.

Renseigner Tempo¶
Ouvrir la vue « Calendar » en haut à droite

Si le calendrier est correctement renseigné, il suffit de valider les différents évènements

Sinon on peut aussi cliquer dessus pour faire des modifications avec les données pré remplies

DOC - Theme GoFAST 4 : Keen¶
Installation du thème Keen¶
Téléchargez le thème Keen depuis la page WordPress Themes & Website Templates from ThemeForest
Dans le dossier, il y a 3 sous-dossiers, le premier est l’endroit où viennent les fichiers de conception (dans Sketch - éditeur graphique pour macOS), le second est la documentation et le troisième est le code source du theme. A l’intérieur du dossier thème on trouve plusieurs dossiers avec le nom “demo” et un numéro, cela fait référence aux différents styles disponibles par Keen, on trouve aussi le dossier “tools” qui est la base des autres styles. Nous pour travailler on a choisi le Demo1
Faire “Build” du theme en suivant la documentation keen, on a fait la implementation avec webpack en nodejs Premium Bootstrap Admin Dashboard Themes
Une fois que nous avons notre dossier “bundle”, nous le mettons à la racine de notre thème Drupal appelé “bootstrap-keen”
Importer les fichiers scripts.bundle.js prismjs.bundle.js plugins.bundle.js plugins.bundle.css prismjs.bundle.css style.bundle.css dans le fichier “bootstrap-keen.info“
Pour mettre à jour les bibliothèques du thème Keen, vous devez suivre la documentation keen et faire un « rebuild » du theme Premium Bootstrap Admin Dashboard Themes
Mise en page principale¶
Dans le fichier page.tpl.php on a mit le coeur de notre layout, il est responsable du rendu de toutes les pages principales de l’application, cela signifie que c’est le modèle qui est toujours utilisé dans toute l’application. Le modèle est l’endroit où nous avons construit le système de navigation de notre application. Pour rendre le contenu des pages Drupal utilise la variable $ page [“content”] au sein du template page.tpl.php, qui est en fait une région où les pages sont rendues sous forme de blocs, pour le moment on utilise plus le sisteme des régions Drupal.
On créé une solution avec des functions et des hooks Drupal pour faciliter le rendu de notre contenu car actuellement dans l’application il y a des pages avec des mises en page différentes, on peut généralement trouver 3 styles de page, ce sont :
- Page entière
- Page avec bloc à droite
- Page avec bloc à gauche
Structure de la page page.tpl.php:¶

Creation du contenu de la page:¶
Pour résoudre et faciliter le rendu de toutes nos pages, nous avons créé une fonction appelée gofast_create_page_content() dans le ficher gofast.module du module gofast, cette fonction est en charge de créer le framework global où nous allons visualiser le contenu. Pour cela, nous avons créé 5 templates auxiliaires dans le meme module gofast qui nous permettent de vous donner de la flexibilité et ainsi de prendre en charge toutes les pages qui ont une mise en page spécifique.

Cette fonction reçoit doit recevoir en paramètre le contenu à restituer et peut également recevoir en paramètres optionnels, le type de page et le bloc de contenu latéral pour les pages qui doivent afficher un bloc à gauche ou à droite.

Exemple¶
Pour rendre une page spécifique lorsqu’un utilisateur clique sur n’importe quelle URL, le moteur Drupal recherchera tout le hook_menu de l’application et exécutera la fonction associée qui devrait renvoyer le contenu à rendre par Drupal. Ce que nous avons décidé de faire, c’est qu’avant de rendre le contenu directement, nous allons passer par la fonction gofast_create_page_content () pour créer le cadre idéal où vivra notre contenu, de cette manière il est plus facile de gérer et de prendre en charge la mise en page globale du application.

Pour gérer l’affichage de notre conteneur principal, nous avons utilisé le système Grid dans notre ficher ‘gofast-content.tpl.php” que c’est le container principale ou on va visualiser nos pages, cela nous permet de sélectionner notre page et de localiser les blocs internes avec une plus grande flexibilité.

Avec ce système de grille et à l’aide du media queries en scss (@media), nous pouvons gérer les dimensions des blocs latéraux pour chaque résolution, en plus quand nous pourrions également gérer lorsqu’il n’y a pas de blocs supplémentaires, ce qui permet de rendre toutes les pages avec ce composant simple.


Gestion des styles¶
Pour la gestion des styles nous utilisons le processeur “SASS” que nous compilons ensuite à l’aide de webpack et node js pour faciliter la compilation et l’écriture de feuilles de style CSS.
Installation¶
- Add NodeSource yum repository
- Install Node.js and npm
- Create gofast4-bundle in bootstrap-keen theme
- Inside gofast4-bundle create a package.json file (Generate it without having it ask any questions)
- Instal webpack and others dependencies
« css-loader »: « ^6.2.0 »
« file-loader »: « ^6.2.0 »
« sass »: « ^1.38.0 »
« sass-loader »: « ^12.1.0 »
« style-loader »: « ^3.2.1 »
« url-loader »: « ^4.1.1 »
« webpack »: « ^5.50.0 »
« webpack-cli »: « ^4.8.0 »
- Create folder src inside gofast4-bundle, copy and paste scss folder into src
- Create configuration webpack - webpack.confing.js in the same level of package.json
- Add build command in package.json
- Build
Avertissement
Il faut importer seulement le fichier style.min.css qui est dans le dossier ‘dist”….. Il faut faire attention de pas déployé le dossier node_modules (A l’intérieur du sous-dossier ‘src”, nous trouverons un fichier appelé “style.scss” à la racine, c’est dans ce fichier que nous allons importer toutes les feuilles de style de nos composants. Webpack est configuré pour lire ce fichier et créer la compilation en “CSS” dans un nouveau dossier à la racine de “bundle-gofast4” appelé “dist” dans lequel on retrouve le fichier “style.css.min” qu’il faut importer dans le fichier “bootstrap-keen.info”)
Structure “bundle-gofast4”¶
C’est dans ce dossier que nous allons gérer les feuilles de style scss et les fichiers package.json et la configuration du pack web. A l’intérieur du sous-dossier “src”, nous trouverons un fichier appelé “style.scss” à la racine, c’est dans ce fichier que nous allons importer toutes les feuilles de style de nos composants. Webpack est configuré pour lire ce fichier et créer la compilation en “CSS” dans un nouveau dossier à la racine de “bundle-gofast4” appelé “dist” dans lequel on retrouve le fichier “style.css.min” dans lequel il faut importer le fichier “bootstrap-keen.info”.


Gestion des variables (Variables.scss)¶
Important
Ce fichier est l’endroit où nous allons gérer toutes les variables de style telles que la typographie, les points d’arrêt pour les tailles d’écran, les couleurs, etc.. Pour plus d’informations sur l’utilisation et la création de variables lisez la documentation ci-dessous


Resolutions d’ecrans pris en charge
Nous définissons 5 types de résolutions que l’application prendra en charge (exclusivement laptop), ce sont les résolutions en pixels :
- petits appareils : 1280 x 768 (résolution minimale)
- appareils moyens : 1366 x 800
- gros appareils : 1440 x 900
- appareils xlarge : 1600 x 1080
- xxlarge-devices :> 1920 x 1080
DOC - Jira : Gestion des tâches¶
Rédacteur | Date de modification | Version |
---|---|---|
JLE | 05/01/2023 | V1.1 |
Workflow de développement¶
Cette documentation décrit le Workflow de développement JIRA de CEO-Vision pour GoFAST

Proposition¶
Cet état est l’état initial d’un Jira nouvellement crée. Le but de cet état est de receuillir sufisament de spécifications et d’être approuvé pour passer à la phase suivante.
Avertissement
05.01.2023 : “Proposition” est actuellement un état qui sert de Backlog depuis le début et n’est pas revu en comité régulier. En 2023 il est prévu de créer ce comité et de ne plus se servir de l’état “Proposition” comme Backlog définitif.
aaa¶
Phase de développement¶
Phase de production¶
DOC - Chaînes techniques : Utiliser des chaînes techniques dans GoFAST¶
Par défaut, Drupal 7 part du principe que la langue source est l’anglais. Ce paramètre est modifiable mais des milliers de chaînes traduites plus tard il est à présent trop tard pour rétropédaler.
Dans certaines situations, nous avons besoin de traduire depuis des chaînes techniques et non pas depuis l’anglais. En effet, si une personne autre qu’un développeur veut modifier des chaînes de GoFAST depuis un outil graphique tel que Weblate, par défaut la personne ne pourra modifier que la traduction française, mais pas la chaîne d’origine en anglais. En revanche, si la chaîne d’origine est « neutre » (chaîne technique), la personne pourra modifier la chaîne dans toutes les langues y compris l’anglais. Cela permet de décharger les développeurs des sollicitations liées aux changements de chaînes.
Rédacteur | Date de modification | Version |
---|---|---|
RBA | 30/01/2023 | V1.0 |
Pré-requis :¶
Avertissement
Cette documentation est conçue pour GoFAST 4.1.0 à 4.9.9.
Implémentation dans le code :¶
Mécanisme¶
Une langue factice, le « GoFAST English » (gfen) a été ajoutée. Cette langue sert de langue source pour la traduction en anglais lorsque la chaîne source est une chaîne technique. Dans la mesure où Drupal considère toujours la chaîne source comme de l’anglais, lorsqu’une chaîne technique est utilisée, il faut appeler d’autres fonctions que celles proposées en natif par Drupal.
Appels et conventions¶
Les fonctions à utiliser pour afficher la traduction d’une chaîne technique sont gft
(en PHP) et Drupal.gft
(en JS). Elles prennent les mêmes arguments que leurs équivalent natifs. Attention, ces fonctions exigent :
- que la chaîne ait un contexte
- que ce contexte soit formaté ainsi :
gofast_technical:CONTEXT
; si le contexte n’est pas préfixé pargofast_technical:
, les commandes d’import et d’export ne feront pas passer la chaîne
Import et export¶
Des commandes drush ont été ajoutées pour importer et exporter des chaînes techniques.
Pour exporter les chaînes techniques actuellement présentes sur le serveur, il faut taper la commande drush :
drush @d7 export-technical-translations LANGCODE CONTEXT
par exemple :
drush @d7 export-technical-translations gfen gofast_tour
pour exporter les traductions anglaises de toutes les chaînes techniques ayant le contexte gofast_technical:gofast_tour
. Il n’y a volontairement pas de commande permettant d’exporter tous les contextes d’un coup étant donné que dans Weblate, les traductions sont silotées par contexte.
Note
Le fichier sera exporté dans /var/www/d7/sites/all/modules/gofast/po/
avec le nom LANGCODE_gofast_technical_CONTEXT.po
. Exemple : gfen_gofast_technical_gofast_tour.po
.
La commande d’import est symétrique de la commande d’export. Ainsi, la commande suivante :
drush @d7 import-technical-translations gfen gofast_tour
importera le contenu du fichier /var/www/d7/sites/all/modules/gofast/po/gfen_gofast_technical_gofast_tour.po.
Avertissement
La commande d’import fait le ménage avant d’importer en supprimant toutes les chaînes précédentes associées au contexte et à la langue cibles. Assurez-vous que votre fichier .po soit complet avant de procéder à l’import.
Export dans Weblate :¶
Dépôt git¶
Weblate a besoin d’un dépôt git lorsqu’il faut créer un nouveau composant de traductions. Le dépôt est publiquement accessible à l’adresse suivante :
https://gitlab.com/ceovision/gofast-technical-weblate
Les chaînes d’un contexte donné doivent être commit dans le dossier correspondant, p. ex. si le contexte est « gofast_technical:gofast_tour », les fichiers .po correspondants doivent être copiées dans le dossier « gofast_tour » sans modifier leur nom.
Accès à Weblate¶
Weblate est accessible à l’adresse suivante :
http://translate.ceo-vision.com/
Si vous n’avez pas de compte Weblate, vous pouvez demander à quelqu’un de l’équipe Support/Production de vous en créer un.
Le projet dédié aux chaînes techniques est « Gofast APP Technical Strings » :

Créer un nouveau composant Weblate¶
Weblate organise chaque projet en « composants ». Dans le projet « GoFAST App Technical Strings », le découpage des composants doit correspondre aux contextes de traduction de Drupal. P. ex. un contexte « gofast_technical:gofast_tour » doit être associé à un composant « GoFAST Tour ». Si le contexte de vos chaînes n’existe pas dans Weblate, vous devez créer un nouveau composant en cliquant sur « Ajouter un nouveau composant de traduction ».

Le contrôle de version doit être configuré de la manière suivante :

On souhaite ensuite préciser nous-même quels .po doivent être importés à partir du dépôt :

Le champ à modifier avant d’enregistrer est « Motif de fichier », qui doit prendre la valeur context/*.po
, p. ex. gofast_admin/*.po
si le contexte est gofast_technical:gofast_admin
.

Mettre à jour un composant existant¶
Avertissement
Avant de mettre à jour les traductions, assurez-vous qu’elles soient bien à jour dans le dépôt git weblate-technical.
L’idée est de réimporter les chaînes à zéro en écrasant tout ce qui existait au préalable pour éviter de cumuler à travers le temps des chaînes obsolètes.
Allez dans la page de la langue cible, puis cliquez sur Gérer => Maintenance du dépôt :

L’option qui nous intéresse dans les Outils du dépôt est « Réinitialiser » :

That’s all for today, folks!
DOC - Drupal : Mise à jour du coeur de Drupal¶
Pour mettre à jour Drupal, nous devons faire plus que simplement exécuter une commande étant donné que nous avons patché à la main certains fichiers et que nous devons donc nous assurer que ces modifications survivent à travers les différentes mises à jour de Drupal.
Rédacteur | Date de modification | Version |
---|---|---|
RBA | 03/02/2023 | V1.0 |
Pré-requis :¶
Avertissement
Cette documentation est conçue pour GoFAST 4.1.0 à 4.9.9.
Mise à jour de la base de code GoFAST :¶
- En ssh sur un serveur de développement (serveur MAIN), mettre à jour Drupal avec la commande suivante :
drush @d7 pm-update drupal-X.XX -y
Note
Il est important d’expliciter la version de Drupal (p. ex. remplacer X.XX par 7.92 si la version cible est la v7.92), sans quoi le suivi strict des versions sera rendu impossible.
- Télécharger la totalité du dossier Drupal
/var/wwww/d7
suite à la mise à jour. - Chercher la totalité des occurrences de « @patch ceo-vision » dans le dépôt git gofast.
Avertissement
Il y a des variations. Parfois CEO est écrit en majuscule, parfois il n’y a pas de tiret. Le mieux est tout d’abord de vérifier les fichiers présents dans le dossier « core-patch » du dépôt gofast-install : ils ont tous au moins un patch CEO-Vision. Puis de chercher dans le dépôt gofast toutes les occurrences de patch.*ceo
MAIS AUSSI de ceo.*patch
(en regex) de manière case-insensitive pour être sûr de ne rien rater.
- Réappliquer tous les patches ceo-vision.
- Commit les changements dans le dépôt gofast.
Script d’installation :¶
- Le script de mise à jour doit comporter la commande de mise à jour Drupal :
drush @d7 pm-update drupal-X.XX -y
- Regarder les fichiers répertoriés dans le dossier « core_patch » : si l’un des fichiers a été modifié par la mise à jour de Drupal, il faudra écraser le fichier par sa version mise à jour dans le dépôt gofast.
- Mettre à jour le numéro de version de Drupal dans le fichier « gofast_makefile.mk ».
- Boire le café de la récompense :-)
DOC - Git : Spécifications générales des entrepôts¶
Rédacteur | Date de modification | Version |
---|---|---|
JLE | 30/12/2022 | V1.0 |
Dépôts¶
Compte GitHub (Dépôts publiques) : https://github.com/CEO-Vision
Note
Ce compte n’est plus activement utilisé et les dépôts sont progressivement migrés vers GitLab
Groupe de dépôts Publiques : https://gitlab.com/ceovision
Groupe de dépôts Privés : https://gitlab.com/ceo-vision
GoFAST V3¶
Localisation : https://gitlab.com/ceo-vision/gofast3
Ce dépôt est le dépôt principal des développeurs, il contient le code source de Drupal avec tous nos modules.
Se référer aux documentations de la section « Documentation développeur » pour l’usage.
GoFAST Install¶
Localisation : https://gitlab.com/ceo-vision/gofast-install
Ce dépôt contient tous les scripts, toutes les sources et les configurations servant à déployer ou mettre à jour GoFAST
Avertissement
Ce dépôt deviendra obsolète en 2023/2024 une fois que les plateformes GoFAST auront migrés vers l’architecture NG De ce fait, peu de documentation sera fournie à ce sujet
TODO : Faire une documentation minimale au besoin
GoFAST NG APP¶
« APP » étant de le nom de l’application concernée (Alfresco, Drupal, …).
Il s’agit de dépôts de containers GoFAST en architecture NG.
Avertissement
Ces dépôts font partie de la nouvelle architecture de GoFAST et possèdent des conventions plus strictes que les dépôts historiques
Se référer a la documentation « Architecture NG » de la section « Documentation CI/CD ».
TODO : Ecrire cette documentation depuis https://gofast.ceo-vision.com/node/171938
PROC - Git : Gestion des branches¶
Rédacteur | Date de modification | Version |
---|---|---|
JLE | 30/12/2022 | V1.1 |
JLE | 21/08/2020 | V1.0 |
Documentation Développeur¶
Démarrer un nouveau développement localement¶
La première chose à faire pour démarrer un nouveau développement est de savoir dans quelle version ce développement est prévu. Cette information se trouve dans le ticket Jira associé.
Une fois cette information disponible, je checkout la branche concernée, portant le nom dev/x.x.x.
Par exemple ici je souhaite démarrer une développement pour la version 4.1.0 :

Attention à bien être à jour sur la branche de développement (Faire un pull).
Créer une branche correspondant à son développement : type/NUM_JIRA
Type peut prendre une des valeurs suivantes :
- bug => Il s’agit d’un développement pour corriger un bug de l’application
- feat => Il s’agit d’un développement pour améliorer ou créer une fonctionnalité
Dans mon exemple, je vais créer un correctif de bug pour la version 4.1.0 avec le Numéro de Jira : GOFAST-9999
Ma branche se nommera donc bug/GOFAST-9999

A partir d’ici je peux commencer à développer ma fonctionnalitée.
Commit mes développements¶
Il y a quelques règles de base à suivre pour faire de bons commits :
- Un commit doit dans la mesure du possible constituer une modification simple et facilement lisible avec un message de commit clair.
- Un commit doit pouvoir être revert facilement en cas de besoin, c’est un bon moyen de savoir si il s’agit ou non d’un bon commit
- Un message de commit doit être sous la forme « NUM_JIRA Message de commit »
- Les modifications de mise en forme d’un fichier doivent se faire dans des branches séparés. Ne jamais reformater tout ou grande partie d’un fichier dans un de vos développements.
- Un commit ne dois jamais embarquer de modifications d’un autre développeur si vous travaillez sur un serveur partagé
Pour ce dernier point en particulier, attention à soigneusement étudier chaque modifications apportés et à séléctionner uniquement les votres. Les autres modifications peuvent être discard.

Il est capital d’être à l’aise avec les modifications que vous allez envoyer, d’en comprendre conséquences et vérifier chaque étape.
Egalement, n’hésitez pas à faire plusieurs commits si vous avez modifié des éléments séparés.
Note
Certaines politiques de développement imposent un nombre maximal de caractères ou d’écraser tous les commits d’une branch pour n’en faire qu’un seul. Nous n’appliquons cette politique en aucun cas par soucis de tracage de chaque changement.
Vous pouvez savoir qu’un développement est correctement poussé sur le serveur distant quand les deux icones « PC » et « GitLab » sont présentes sur l’étiquette de la branche.

Faire une Merge Request¶
Une fois votre développement terminé et testé sur une plateforme de développement, il est temps de demander une intégration à la branche de développement ciblée.
Pour ce faire il existe deux méthodes, soit depuis GitKraken dans la partie « Remote » en effectuant un glissé déposer de votre branche vers la branche cible :

Vous pouvez alors remplir les champs comme ceci et valider votre Merge Request :

Ou soit directement depuis GitLab :

Une fois votre Merge Request enregistrée, ce n’est pas terminé ! Il faut absolument penser à aller sur la page de votre Merge Request pour vérifier son contenu.
Vous pouvez y accéder directement depuis GitKraken :

Tout particulièrement dans la partie « Changes », vous ne devez voir que vos changements.

Avertissement
Une merge request est la dernière étape avant qu’un développement soit accepté pour être intégrée à la version qui sera mise en recette.
Documentation Maintainer¶
Créer une nouvelle version¶
- La branche doit être crée depuis master
- La branche porte le nom dev/x.x.x
- Créer les scripts d’update directement sur la branch de dev. (OBSOLETE quand GoFAST NG)
- Attention a bien repartir du dernier script d’update et à vérifier si il n’y a pas de TODO à l’interieur
- Attention aux branches de développements en parallèle qui pourraient intégrer d’autres modifications dans les parties COMMON des scripts
Créer un hotfix¶
- La branche doit être crée depuis master
- La branche porte le nom hotfix/x.x.x
- Créer les scripts d’update directement sur la branch de dev. (OBSOLETE quand GoFAST NG)
- Attention a bien repartir du dernier script d’update et à vérifier si il n’y a pas de TODO à l’interieur
- Attention aux branches de développements en parallèle qui pourraient intégrer d’autres modifications dans les parties COMMON des scripts
Préparer une Release Candidate¶
- Vérifier qu’il ne reste pas des branches ouvertes sur cette version en utilisant l’écran de merge request de Gitlab (vérifier également sur master en cas d’erreur de développeurs)
- Exporter les traductions (.po) et build les scss pour tout mettre à jour
- Modifier en masse les fichiers .install avec la nouvelle version
- Merge la branche de développement dans master
- Attention Les messages de commit sont conventionnés au niveau du message : « RELEASE x.x.x RCY Merge dev/x.x.x into “master” »

- Tag le commit qui va être déployé
Avertissement
Cette étape est primordiale pour les opérations de suivi et de production. Merci de respécter cette procédure scrupuleusement.

Fermer une version en validant une Release Candidate¶
- Tag sur le dernier commit RC

- Suppression de la branch de développement
DOC - Installation GoFAST¶
Informations nécessaires¶
- URL (pour la MAIN, MOBILE et la COMM)
- Adresses IP pour les deux machines (si ESXi)
- Les informations sur les certificats (wildcard ou let’s encrypt)
- Serveur SMTP (mail)
Partitionnement Machines¶
FREE | /var |
4Go | /tmp |
2Go | /var/log/audit |
10Go | /var/log |
1Go | /var/tmp |
8Go | SWAP |
10Go | /root |
FREE = espace libre variable en fonction de la place restante sur le disque (après partitionnement de toutes les autres partitions)
Assignation IP/MAC¶
assignation ip sur esx : https://ceovision.atlassian.net/browse/CEOVIS-398
Besoin :
- @IP
- @MAC (associé à l’IP)
- Gateway (ESX)

Nous allons commencé par l’assignation de l’adresse MAC à la machine virtuelle voulue. (machine éteinte)
Rendez-vous sur la machine et cliquer sur l’onglet « modifier » puis scrollez jusqu’à voir « adaptateur réseau 1 ».
Déroulé ensuite le menu et passé l’adresse MAC en manuel et venait y coller votre nouvelle @MAC (celle assignée à votre IP)

Vous pouvez donc ensuite démarrer votre machine virtuelle, nous allons lui mettre son adresse IP.
Entrez la commande « nmtui » qui vous ouvrira une interface pour configurer l’adresse IP de votre machine.
nmtui


Vous pouvez désormais changer votre adresse IP, gateway ainsi que votre serveur DNS (8.8.8.8).
Cependant, votre machine ne sera pour le moment pas apte à communiquer avec l’extérieur.
Effectuez donc cette commande :
vi /etc/sysconfig/network-scripts/ifcfg-ens192
Et passez la partie « ONBOOT » de « no » à « yes »

( « :wq » pour quitter vi en sauvegardant)
puis pour finir :
systemctl restart network
Désormais la machine est censée pouvoir ping l’extérieur.
ping google.fr
Installation GoFAST¶
Variables pour l’exécution du script d’install :
Script MAIN :
- $1 = version de GoFAST (que l’on souhaite installer, attention à être sur la bonne branche du git d’install pour avoir le bon script voulu)
- $2 = « enterprise » ou « community »
- $3 = enterprise key main (si installation « enterprise) http://dev2.ceo-vision.com/monitoring/manage_customers.php
Script COMM :
- $1 = version de GoFAST
- $2 = enterprise key comm
Aller déposer en FTP dans le /opt de chaque machine les fichiers/dossiers nécessaires à l’installation de GoFAST.
MAIN :

à déposer dans /opt de la machine virtuelle
cd /opt
yum install -y dos2unix
chmod +x *.sh
dos2unix *.sh
COMM :

à déposer dans /opt de la machine virtuelle
cd /opt/gofast-comm
yum install -y dos2unix
chmod +x *.sh
dos2unix *.sh
Choix du mot de passe¶
Avertissement
ATTENTION, prendre un mot de passe contenant :
- minimum 1 chiffre
- minimum 1 lettre minuscule
- minimum 1 lettre majuscule
- minimum 1 caractère spécial (ne pas prendre : % “ $ » )
Il nous faudra trois mots de passes :
- mot de passe « root, admin, bdd… » MAIN
- mot de passe « root, jitsi » COMM
- mot de passe « adm »
(bien les renseigner dans TeamPass avant de les perdres)
Execution script d’installation/configuration¶
Il ne vous reste plus qu’à lancer le script d’installation pour la machine.
MAIN :
cd /opt
./gofast-3.x-install.sh 3.10.0 enterprise enterprise_key_main
Avertissement
ATTENTION : n’oubliez pas de changer les trois variables (version, « enterprise » ou « community » et la clef enterprise)
COMM :
cd /opt/gofast-comm
./gofast-comm-install.sh 3.10.0 enterprise_key_comm
Avertissement
ATTENTION : n’oubliez pas de changer les variables de version et clef enterprise comm.
Une fois le script d’install fini pour la COMM, lancé le script de configuration.
cd /opt/gofast-comm
chmod +x *.sh
dos2unix *.sh
./gofast-comm-config.sh
Lorsque ce script vous demande les certificats, si vous les avez, collez les, sinon prennez ceux d’une plateforme comme notre Cloud (pas permanent).
Correctifs à effectuer¶
vi /var/www/d7/sites/default/settings.php
Rendez-vous tout en bas de ce fichier ( « :9999999 » pour aller tout en bas avec vi)
Et changez cela avec le prefix « mobile » ainsi qu’en rajoutant l’URL de votre COMM.

rajoutez également ceci tout en bas de votre fichier (en changeant les variables bien sur) :
$conf['enterprise-key'] = "$enterprise_key_main";
$conf['gofast-server-key'] = 'PRD-$quadigrame-GF-MAIN';
Exemple :
$conf['enterprise-key'] = "gofast-enterprise-e8c9cb3f-8ccf-4d02-a823-51c47d292f84";
$conf['gofast-server-key'] = 'DEV-CEOV-GF-MAIN';
Déploiement Certificats¶
Wildcards :¶
MAIN :
déposez le dossier contenant les certificats dans /opt
- copiez le certificat vers /etc/pki/tls/certs/localhost.crt
- copiez la clef vers /etc/pki/tls/private/localhost.key
- copiez le server-chain vers /etc/pki/tls/certs/server-chain.crt
Vérifier les mappings des certificats dans les fichiers de configuration NGINX et APACHE :
/etc/nginx/nginx.conf /etc/httpd/conf.d/ssl.conf
COMM :
- copiez le certificat vers /etc/pki/tls/certs/gofast.crt
- copiez la clef vers /etc/pki/tls/private/gofast.key
Tester les services (coo-édition, cadenas coo-édition, visio, chat Element), corriger si ceux-ci ne fonctionnent plus.
Let’s Encrypt :¶
Installation du paquet pour la génération des certificats (à faire sur les deux machines) :
yum install -y certbot
MAIN :
Stop du service HTTPD + ouverture port 80 firewalld
systemctl stop httpd
systemctl stop nginx
firewall-cmd --permanent --add-port=80/tcp # ouverture
firewall-cmd --reload
Test génération certificats (changer l’URL de la plateforme) :
read url_main
read url_mobile
certbot certonly --non-interactive --email support@ceo-vision.fr \
--preferred-challenges http --standalone --agree-tos --renew-by-default \
--webroot-path /var/www/html -d $url_main --dry-run
certbot certonly --non-interactive --email support@ceo-vision.fr \
--preferred-challenges http --standalone --agree-tos --renew-by-default \
--webroot-path /var/www/html -d $url_mobile --dry-run
Si ce test réussi, vous pouvez alors éxécuter ce code :
read url_main
read url_mobile
certbot certonly --non-interactive --email support@ceo-vision.fr \
--preferred-challenges http --standalone --agree-tos --renew-by-default \
--webroot-path /var/www/html -d $url_main
certbot certonly --non-interactive --email support@ceo-vision.fr \
--preferred-challenges http --standalone --agree-tos --renew-by-default \
--webroot-path /var/www/html -d $url_mobile --dry-run
Copie des certificats aux bons emplacements :
read url_main
read url_mobile
cp /etc/letsencrypt/live/$url_main/privkey.pem /etc/pki/tls/private/localhost.key
cp /etc/letsencrypt/live/$url_main/cert.pem /etc/pki/tls/certs/localhost.crt
cp /etc/letsencrypt/live/$url_main/fullchain.pem /etc/pki/tls/certs/server-chain.crt
cp /etc/letsencrypt/live/$url_mobile/privkey.pem /etc/pki/tls/private/localhost_mobile.key
cp /etc/letsencrypt/live/$url_mobile/cert.pem /etc/pki/tls/certs/localhost_mobile.crt
firewall-cmd --permanent --remove-port=80/tcp → ouverture
firewall-cmd --reload → reload
systemctl start nginx
systemctl start httpd
COMM :
Stop service coturn :
systemctl stop coturn
Test génération certificats (changer l’URL de la plateforme) :
read url_comm
mkdir /var/www/html
certbot certonly --non-interactive --email support@ceo-vision.fr \
--preferred-challenges http --standalone --agree-tos --renew-by-default \
--webroot-path /var/www/html -d $url_comm --dry-run
Si ce test réussi, vous pouvez alors éxécuter ce code :
read url_comm
mkdir /var/www/html
certbot certonly --non-interactive --email support@ceo-vision.fr \
--preferred-challenges http --standalone --agree-tos --renew-by-default \
--webroot-path /var/www/html -d $url_comm
Copie des certificats aux bons emplacements :
read url_comm
cp /etc/letsencrypt/live/$url_comm/privkey.pem /etc/pki/tls/private/gofast.key
cp /etc/letsencrypt/live/$url_comm/cert.pem /etc/pki/tls/certs/gofast.crt
cat /etc/pki/tls/certs/gofast.crt /etc/pki/tls/private/gofast.key > /etc/pki/tls/certs/gofast.pem
systemctl restart nginx
sleep 2
systemctl stat coturn
Tester les services (coo-édition, cadenas coo-édition, visio, chat), corriger si ceux-ci ne fonctionnent plus.
Potentiels problèmes et comment les résoudres¶
ERREUR 500 BONITA (MAIN) :¶
# Deploy userlists menu
drush @d7 php-eval "include_once '/var/www/d7/sites/all/modules/gofast/gofast_userlist/gofast_userlist.install';usurp(1);gofast_userlist_create_menus();"
#Change length of locations fields
drush @d7 php-eval 'include_once "/var/www/d7/sites/all/modules/gofast/gofast_cmis/gofast_cmis.install"; gofast_cmis_update_7706();'
#Deploy REST API Extensions
drush @d7 php-eval "gofast_workflows_deploy_rest_api_extension('archived_variables.zip')"
drush @d7 php-eval "gofast_workflows_deploy_rest_api_extension('get_cases_from_nid.zip')"
drush @d7 php-eval "gofast_workflows_deploy_rest_api_extension('tasks_assigned_other.zip')"
drush @d7 php-eval "gofast_workflows_deploy_rest_api_extension('get_tasks_all_infos.zip')"
drush @d7 php-eval "gofast_workflows_deploy_rest_api_extension('get_tasks_from_caseids.zip')"
drush @d7 php-eval "gofast_workflows_deploy_rest_api_extension('process_search.zip')"
drush @d7 php-eval "gofast_workflows_deploy_rest_api_extension('tasks_in_process.zip')"
#Deploy pages
drush @d7 php-eval "gofast_workflows_deploy_page('page-LightDashboard.zip')"
drush @d7 php-eval "gofast_workflows_deploy_page('page-LightDashboardDocument.zip')"
drush @d7 php-eval "gofast_workflows_deploy_page('page-HistoryBdm.zip')"
drush @d7 php-eval "gofast_workflows_deploy_page('page-BlockDashboard.zip')"
drush @d7 php-eval "gofast_workflows_deploy_page('page-FullDashboardSearch.zip')"
drush @d7 php-eval "gofast_workflows_deploy_page('page-TasksInProcess.zip')"
#Create and configure GoFAST application
drush @d7 php-eval "gofast_workflows_deploy_gofast_application()"
Mauvais déploiement Workflow (MAIN) :¶
1 : se déconnecter de la plateforme
2 : supprimer le cookie dans /var/www/d7/sites/default/files/swf
cd /var/www/d7/sites/default/files/swf
rm -Rf cookie_bonitaadm.txt
3 : se reconnecter en navigation privée
4 : passer ces commandes :
cd /opt
\cp -Rf /var/www/d7/sites/all/modules/gofast/gofast_workflows/ressources/BDM/build/bdm.zip /var/cache/tomcat/temp/bonita_portal_*/tenants/1/
chmod -R 777 /var/cache/tomcat/temp/
drush @d7 php-eval "gofast_workflows_deploy_business_data_model();"
#Deploy new standard workflow and map actors
drush @d7 php-eval "gofast_workflows_deploy_new_version_standard_process('Diffusion de document--1.13.bar', 'Document broadcast--3.4.bar');"
drush @d7 php-eval "gofast_workflows_deploy_new_version_standard_process('GoFast accuse reception de document--1.13.bar', 'Document broadcast subprocess--3.4.bar');"
#Deploy REST API Extensions
drush @d7 php-eval "gofast_workflows_deploy_rest_api_extension('archived_variables.zip')"
drush @d7 php-eval "gofast_workflows_deploy_rest_api_extension('get_cases_from_nid.zip')"
drush @d7 php-eval "gofast_workflows_deploy_rest_api_extension('tasks_assigned_other.zip')"
drush @d7 php-eval "gofast_workflows_deploy_rest_api_extension('get_tasks_all_infos.zip')"
drush @d7 php-eval "gofast_workflows_deploy_rest_api_extension('get_tasks_from_caseids.zip')"
drush @d7 php-eval "gofast_workflows_deploy_rest_api_extension('process_search.zip')"
drush @d7 php-eval "gofast_workflows_deploy_rest_api_extension('tasks_in_process.zip')"
#Deploy pages
drush @d7 php-eval "gofast_workflows_deploy_page('page-LightDashboard.zip')"
drush @d7 php-eval "gofast_workflows_deploy_page('page-LightDashboardDocument.zip')"
drush @d7 php-eval "gofast_workflows_deploy_page('page-HistoryBdm.zip')"
drush @d7 php-eval "gofast_workflows_deploy_page('page-BlockDashboard.zip')"
drush @d7 php-eval "gofast_workflows_deploy_page('page-FullDashboardSearch.zip')"
drush @d7 php-eval "gofast_workflows_deploy_page('page-TasksInProcess.zip')"
#Create and configure GoFAST application
drush @d7 php-eval "gofast_workflows_deploy_gofast_application()"
systemctl restart tomcat@bonita
Avertissement
ATTENTION CHANGER LE CHEMIN DE DESTINATION POUR LES TROIS PROCHAINES COMMANDES « /var/cache/tomcat/temp/bonita_portal_29372@gofast.ceo-vision.com//tenants/1/ »
\cp -Rf "/var/www/d7/sites/all/modules/gofast/gofast_workflows/ressources/workflows/document_broadcast/build/Document broadcast_3.4.png" "/var/www/d7/sites/default/files/"
\cp -Rf "/var/www/d7/sites/all/modules/gofast/gofast_workflows/ressources/workflows/document_broadcast/build/Document broadcast--3.4.bar" /var/cache/tomcat/temp/bonita_portal_29372\@gofast.ceo-vision.com//tenants/1/
\cp -Rf "/var/www/d7/sites/all/modules/gofast/gofast_workflows/ressources/workflows/document_broadcast/build/Document broadcast\ subprocess--3.4.bar" /var/cache/tomcat/temp/bonita_portal_29372\@gofast.ceo-vision.com//tenants/1/
chmod -R 777 /var/cache/tomcat/temp/
systemctl restart tomcat@bonita
Bcrypt (login une fois avec « adm » et après mot de passe faux) (MAIN) :¶
je créer le fichier enable-bcrypt.ldif
cd /opt
vi enable-bcrypt.ldif
coller ce code :
# Add bcrypt support
dn: cn=module{0},cn=config
add: olcmoduleload
olcmoduleload: /usr/lib64/pw-bcrypt.so
Executez ces commandes (en changeant la variable) :
ldapmodify -w $mdp_root_main -x -D cn=config -f enable-bcrypt.ldif
sealert -a /var/log/audit/audit.log
systemctl restart slapd
changer le mot de passe du compte « adm » sur GoFAST
Problème Synapse ne démarre pas (COMM):¶
cd /opt/synapse
source bin/activate
read server_name
python -m synapse.app.homeserver --server-name $server_name --config-path homeserver.yaml --generate-config --report-stats=yes
sudo curl https://raw.githubusercontent.com/ma1uta/matrix-synapse-rest-password-provider/master/rest_auth_provider.py -o /opt/synapse/lib/python3.6/site-packages/rest_auth_provider.py
synctl start
deactivate
Problème BadGateway Nginx for OnlyOffice (COMM):¶
erreur bad gateaway nginx for onlyoffice :
echo "
For Postgresql:
Host: localhost
Database: onlyoffice
User: onlyoffice
Password: onlyoffice
For RabbitMQ:
Host: localhost
User: guest
Password: guest"
cd /opt/gofast-comm
bash documentserver-configure.sh
Problème connexion non automatique au chat Element (COMM):¶
Commandes à exécuter sur la plateforme COMM (en ssh) pour corriger le problème de connexion non automatique au chat.
cd /opt/gofast-comm
echo "Enter GoFAST MAIN URL (ex: gofast.ceo-vision.com):"
read url_main
java InstallCert $url_main
\cp -Rf jssecacerts /etc/pki/ca-trust/extracted/java/cacerts
systemctl restart ma1sd
Problème Cadenas OnlyOffice (MAIN):¶
Commandes à exécuter sur la plateforme MAIN (en ssh) pour corriger le problème de cadenas qui reste fermé à la sortie d’une coédition OnlyOffice.
cd /opt
echo "Enter GoFAST COMM URL (ex: gofast-comm.ceo-vision.com):"
read url_comm
java InstallCert internal-$url_comm
\cp -Rf jssecacerts /etc/pki/ca-trust/extracted/java/cacerts
echo "Warning la GED va redémarrer"
sleep 4
systemctl restart tomcat@alfresco
Problème Certificats Visio (COMM):¶
Commandes à exécuter sur la plateforme COMM (en ssh) pour corriger le problème de visio-conférence à trois minimum impossible.
server_name=`grep -oP "(?<=domain: \').+?(?=\')" /etc/ma1sd/ma1sd.yaml`
echo "secret_key = mot de passe dans /etc/jitsi/jicofo/config "
read -s secret_key
rm -Rf /var/lib/prosody/*
cd /opt/gofast-comm/update
systemctl stop crond
prosodyctl stop
systemctl stop jibri
systemctl stop jitsi-videobridge
systemctl stop jicofo
#Generate certificates
prosodyctl cert generate auth.${server_name}
echo "
#################################################
## Entrez les informations suivantes
4096
FR
COMM
GOFAST
XMPP
auth.${server_name}
xmpp@auth.${server_name}
#################################################"
mv /var/lib/prosody/auth.$server_name.crt /var/lib/prosody/auth.crt
mv /var/lib/prosody/auth.$server_name.key /var/lib/prosody/auth.key
mv /var/lib/prosody/auth.$server_name.cnf /var/lib/prosody/auth.cnf
ln -sf /var/lib/prosody/auth.crt /etc/pki/ca-trust/source/anchors/auth.crt
update-ca-trust extract -f
prosodyctl start
prosodyctl register videobridge auth.$server_name $secret_key
prosodyctl register jibri auth.$server_name $secret_key
prosodyctl register recorder recorder.$server_name $secret_key
prosodyctl register focus auth.$server_name $secret_key
prosodyctl mod_roster_command subscribe focus.$server_name focus@auth.$server_name
systemctl start jibri
systemctl start jitsi-videobridge
sleep 30
systemctl start jicofo
systemctl start crond
og_user_node1 (MAIN):¶
Se connecter en « admin » sur GoFAST, se rendre à cette URL https://$url/admin/config/people/accounts/fields puis delete og_user_node1
Erreur Java - undefined symbol: JLI_Launch (COMM):¶
L’erreur complète est la suivante : java: symbol lookup error: java: undefined symbol: JLI_Launch Cette erreur s’est produite après une restauration de la plateforme de DEMO pour la DEV (versionde GoFAST 4.1.0).
Pas d’explication sur son apparition … Pour résoudre ce problème, voici ce que j’ai fait :
yum install -y java-1.8.0-openjdk
update-alternatives --config java # choisir la version 1.8 de Java
java -version
yum remove java-11*
yum remove -y java-1.8.0-openjdk
yum remove -y java-1.8.0-openjdk-headless
yum install -y java-11-openjdk java-11-openjdk-headless
update-alternatives --config java # chosir la version 11 de Java
java -version
Erreur LDAP - Redémarrage du service à chaque connexion utilisateur:¶
Pas d’erreur dans les logs LDAP et Drupal. Il faut vérifier si le fichier ppolicy.ldif n’est pas dupliqué.
locate 'olcOverlay={0}ppolicy.ldif' # et aller dans le répertoire
# ou
cd /etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb/
Dans ce répertoire il ne doit pas y avoir olcOverlay={1}ppolicy.ldif. Seul olcOverlay={0}ppolicy.ldif doit être présent
DOC - Update GoFAST¶
Rédacteur | Date de modification | Version |
---|---|---|
EPA | 04/10/2022 | V1.1 |
Mise à jour de GoFAST¶
$URL = URL machine client (WEB)
La procédure d’update d’une GoFAST se passe en deux étapes :
- Ouverture du ticket entre nous et le client en question pour la demande de planification (date, heure etc)
- Mise à jour
- vérification que personne n’utilise la plateforme en même temps
- suivi des logs de mise à jour MAIN
- suivi des logs de mise à jour COMM
En effet, avant de lancer quelconque mise à jour, il est important de s’assurer que personne n’est entrain d’utiliser activement la plateforme (coédition, visio etc)
Pour cela sur la MAIN vous pouvez regarder le traffic dans les logs de ce fichier :
tail -f /var/log/drupal et /var/log/alfresco/alfresco.log
Parce qu’il faut savoir qu’une mise à jour mets la plateforme en mode « maintenance » est n’est donc plus accessible durant une trentaine de minutes.
Une étape très importante également durant la mise à jour est le suivi des logs de mise à jour pour être sur que rien ne se bloque.
MAIN :
- Si avant 3.9.0 :
tail -f /var/www/d7/sites/default/files/update_report.gflog
- Si après 3.9.0
tail -f /var/www/d7/sites/default/files/logs/update_report.gflog
COMM :
tail -f /opt/gofast-comm/update_report.txt
Interface mise à jour :¶
https://$URL/admin/config/gofast/update
Il vous suffis donc de cliquer sur le bouton de mise à jour et vérifier que le script se déroule bien dans les logs présentés précédemment.
Test Migration Bonita ( 4.0.0 -> 4.0.0_r2) :¶
Avertissement
Lors du passage de GoFAST 4.0.0 -> 4.0.0_r2 bien tester la migration Bonita avant de lancer la mise à jour. Si blocage lors de ce test de migration, supprimer les « process » indiqués.
GF_VERSION=4.0.0_r2
INSTALL_TYPE="enterprise"
REPO_PATH="http://dev2.ceo-vision.com/sites/default/files/sources-3.x/${GF_VERSION}/"
#Retrieve wget authentification
enterprise_key=`grep -oP "(?<=\['enterprise-key'\] = \").+?(?=\";)" /var/www/d7/sites/default/settings.php`
hostname=$(hostname)
password=`echo -n "$hostname:$enterprise_key" | base64`
password=`echo -n $password | sed -e "s/ //g"`
credentials="--user $hostname --password $password"
admin_pass=`grep -oP "(?<=\['admin_password'\] = ').+?(?=';)" /var/www/d7/sites/default/settings.php`
root_db_pass=`grep -oP "(?<=db.password=).+" /var/lib/tomcats/alfresco/shared/classes/alfresco-global.properties`
comm_domain=`grep -oP "(?<=\['gofast-comm_domain'\] = ').+?(?=';)" /var/www/d7/sites/default/settings.php`
ldap_root_pass=`grep -oP "(?<=ldap.synchronization.java.naming.security.credentials=).+" /var/lib/tomcats/alfresco/shared/classes/alfresco-global.properties`
TOMCAT_HOME=/usr/share/tomcat
TOMCAT_BASE=/var/lib/tomcats
hostname=$(hostname)
ALF_HOST=`grep -oP "(?<=alfresco.host=).+" /var/lib/tomcats/alfresco/shared/classes/alfresco-global.properties`
BASE_URL=https://${ALF_HOST}
ldap_domain=`grep -oP "(?<=Manager,dc).+(?=,dc)" /var/lib/tomcats/alfresco/shared/classes/alfresco-global.properties | cut -c3-`
ldap_domain_count=${#ldap_domain}
ldap_tld_count=$(($ldap_domain_count+8))
ldap_tld=`grep -oP "(?<=Manager,dc).+" /var/lib/tomcats/alfresco/shared/classes/alfresco-global.properties | cut -c${ldap_tld_count}-`
cd /opt
wget ${credentials} ${REPO_PATH}sources/bonita-migration-distrib-2.55.0.zip
unzip bonita-migration-distrib-2.55.0.zip
ls
cd bonita-migration-distrib-2.55.0
ls
cd ..
root_db_pass=`grep -oP "(?<=db.password=).+" /var/lib/tomcats/alfresco/shared/classes/alfresco-global.properties`
sed -i -e "s/db.vendor=postgres/db.vendor=mysql/g" ./bonita-migration-distrib-2.55.0/Config.properties
sed -i -e "s/db.url=jdbc:postgresql:\/\/localhost:5432\/bonita/db.url=jdbc:mysql:\/\/localhost:3306\/bonita?allowMultiQueries=true\&dontTrackOpenResources=true\&useUnicode=true\&useSSL=false\&characterEncoding=UTF-8/g" ./bonita-migration-distrib-2.55.0/Config.properties
sed -i -e "s/db.driverClass=org.postgresql.Driver/db.driverClass=com.mysql.jdbc.Driver/g" ./bonita-migration-distrib-2.55.0/Config.properties
sed -i -e "s/db.password=bpm/db.password=${root_db_pass}/g" ./bonita-migration-distrib-2.55.0/Config.properties
cd ./bonita-migration-distrib-2.55.0/bin/
export BONITA_MIGRATION_DISTRIB_OPTS="-Dtarget.version=7.13.0 -Dauto.accept=true"
ls
cd check-migration-dryrun
./check-migration-dryrun
#[ERROR] Cannot create PoolableConnectionFactory (The server time zone value 'CEST' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.) :
mysql -u root -p
set GLOBAL time_zone = '+2:00';
Problèmes potentiels :¶
Erreur Deploiement « .war » :¶
cd /var/lib/tomcats/alfresco/webapps/
ls
rm -Rf alfresco
rm -Rf share
systemctl restart tomcat@alfresco
(remettre les notfound.jsp après l’update si ceux-ci n’y sont plus)
Erreur Restart Alfresco (classe : impersonnation):¶

cd /opt/update
cd tomcat/amps
\cp -Rf lib/ceo-vision.jar /var/lib/tomcats/alfresco/webapps/alfresco/WEB-INF/lib/
\cp -Rf ../webapps/alfresco/WEB-INF/classes/com /var/lib/tomcats/alfresco/webapps/alfresco/WEB-INF/classes/
chown -R tomcat:tomcat /var/lib/tomcats/alfresco/webapps/alfresco/
restorecon -vR /var/lib/tomcats/alfresco/webapps/alfresco/
cd /opt/update
systemctl restart tomcat@alfresco
Erreur « TargetSchema » (uniquement sur nos plateformes ceo-vision.com) :¶

vi /var/lib/tomcats/alfresco/webapps/alfresco/WEB-INF/classes/alfresco/module/alfresco-share-services/module-context.xml
Recherchez « targetSchema » ( « /targetSchema » sous vi)
Et rajoutez un « 0 » à la value
Erreur Mauvaise version de Java (pour Alfresco et Bonita 4.0.0 & 4.0.0_r2) :¶
#force JAVA 11
alternatives --set java /usr/lib/jvm/java-11-openjdk-11.*/bin/java
#force JAVA 1.8
alternatives --set java /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.*/jre/bin/java
Erreur Zabbix :¶
chmod -R 777 /etc/zabbix/zabbix_agentd.d/
Check fonctionnement des services¶
Services à vérifier :¶
Avertissement
bien tester chaque services
- Alfresco (gestion des fichiers/dossiers)
- Drupal (workflow)
- OnlyOffice (coédition et cadena)
- Jitsi (visio à plus de 3, et avec des partages d’écrans, caméras etc)
- Preview (prévisualisation document)
- Chat Element (connexion automatique, discussion)
Note
Si vous rencontrez des problèmes avec les différents services ci-dessus, je vous laisse les corriger avec la section correctifs de la documentation d’installation GoFAST
PROC - Restauration d’un serveur avec Veeam¶
Cette procédure décrit les étapes pour effectuer une restauration à l’aide de Veeam Backup & Replication. Celle-ci peut servir à : - Restaurer une machine virtuelle après un incident. - Cloner/déplacer une machine virtuelle.
Rédacteur | Date de modification | Version |
---|---|---|
BCR | 22/09/2022 | V1.0 |
Pré-requis¶
- Un accès admin à l’ESX où vous souhaitez restaurer la machine.
- Une adresse IP et une adresse MAC pour pouvoir joindre le serveur VEEAM depuis la machine virtuelle qui sera créé sur l’ESX.
- Le LiveCD de veeam (disponible dans les datastores).
Procédure¶
Dans l’exemple ci-dessous, la VM PRD-CEOV-APP2 va être restaurée afin de créer un serveur de préproduction.
Création d’une VM ISO de la source¶
Sur l’ESX où vous souhaitez effecteur la restauration, il faut instancier une nouvelle machine. La nouvelle machine doit posséder la même configuration pour le stockage, le CPU et la RAM peuvent différer.

Dans la partie Lecteur de CD/DVD 1, il faut ajouter le LiveCD disponible dans le datastore.

Démarrage du live LiveCD¶
Une fois la nouvelle VM configurée, vous pouvez la démarrer. Le disque veam doit se lancer et vous devez tomber sur une page vous indiquant votre configuration réseau.

Choisissez Continue, puis accepté les termes de veeam.
Note
espace - pour valider une case. tab - pour se déplacer dans le menu
Sur l’écran suivant, il faut configurer le réseau : Configure network.

Puis remplir la partie IPv4.

Vous pouvez également désactiver/activer l’interface pour être sûr que la configuration soit prise en compte, puis faire Ok.
Restauration de la VM¶
Une fois la configuration réseau effectuée, retournez sur le menu principal du CD. Choisissez Restore volumes:

Ensuite, choisir la restauration à partir d’un serveur VEEAM.

Et renseigner les Informations de connexion au serveur VEEAM (attention au clavier qui est en qwerty).

Une fois connecté, la liste des backups s’affichent, il faut choisir le backup qui correspond à la machine et à la date de restauration voulue. Dans ce cas, on choisira le dernier backup de APP2.

Pour finir, cliquez sur chaque disque et choisissez Restore from ….


L’objectif est d’obtenir la même interface à droite qu’à gauche, et faites S pour commencer la restauration.
Une fois l’opération terminée, vous pouvez redémarrer, la nouvelle machine doit démarrer à son état restauré.



Troubleshooting¶
PROC - Sécurisation ESXi¶
Cette procédure décrit les configurations applicables pour la sécurisation d’un ESXi.
Ces différentes configurations sont à appliquer à chaque nouvelle instanciation d’un ESXi et peut également servir pour la maintenance
Rédacteur | Date de modification | Version |
---|---|---|
JLE | 06/02/2023 | V1.0 |
Utilisation du SSH¶
En usage normal, le service SSH doit systématiquement être désactivé. Il peut au besoin être activé le temps de la connexion.
Si le SSH est activé, sur l’interface graphique de l’ESXi on a cette indication :

Pour l’activer ou le désactiver, il faut aller dans le menu « Hôte » => « Actions » => Services

Désactivation du service SLP¶
A l’origine de l’incident sécurité Nevada, le service SLP doit être désactivé sur nos ESXi.
Pour vérifier si le service est désactivé, utiliser les commandes :
Voici le retour attendu :

Si ce n’est pas le cas, les commandes suivantes doivent être passés en SSH sur l’Hôte :
Passage des correctifs¶
Les correctifs des ESXi doivent être passés régulièrement selon les implications sécurité.
TODO : Documenter la récupération des patchs, les derniers ayant été fournis par Kévin Gauriot
Pour cet exemple, je vais passer les derniers correctifs sur un ESXi en version 7 (Patchs I et J).
La première chose à faire est de charger ces correctifs dans le filesystem, pour ce faire il suffit de se connecter à l’interface d’administration de l’ESXi et de naviguer dans le datastore via « Explorateur de banque de données ».

Charger le correctif dans le datastore au format .zip :

Puis en SSH, passer le correctif en utilisant la commande suivante :
Pour mon exemple, étant donné que j’ai chargé mon patch dans « datastore1 » et que mon patch est nommé « « , la commande sera :
Si la mise a jour s’est bien passée, le retour doit indiquer : « The update completed successfully »

Un redémarrage de l’ESXi est neccaire (dans la pluspart des cas) pour finaliser le processus de mise à jour
Configuration du Pare-feu¶
Par défaut le pare-feu de VMWare est très permissif et écoute sur l’interface internet sur énormément de ports.
La majorité des services écoutant sur ses ports ne sont pas nécessaires au bon fonctionnement de l’ESXi. De plus, nous souhaitons filtrer et restreindre ces ports pour nos usages.

Tous les services non grisés sont activés dans le firewall, dont une proportion importante de ports entrants non utilisés
Avertissement
Via SSH, vérifier que le firewall est bien activé au niveau système en utilisant la commande “esxcli network firewall get”
La gestion du pare-feu se fait dans l’interface WEB dans le menu « Mise en réseau » => « Règles du pare-feu » OU via SSH.
Désactivation de services¶
Les services que nous souhaitons laisser opérationnels sont :
- Client DHCP
- Client DNS
- DHCPv6
- Serveur SSH
- vSphere Web Client
Cas particulier d’un montage SAN pour Scaleway :
- Client de logiciel iSCSI (Port 3260)
Tous les autres services doivent être désactivés dans le firewall (Clique droit => désactiver).
Filtrage IP¶
Les services de l’ESXi doivent être filtrés sur 3 IPs ou plages d’IPs :
- L’IP de CEO-Vision
- Le réseau « Management network »
- Une IP de secours
Avertissement
Il est probable que pour le service Client de logiciel iSCSI il faille également ajouter l’adresse IP du SAN, à vérifier sur une instance de test avant de modifier les pare-feu scaleway.
IP de CEO-Vision : 212.106.122.77 => Attention si cette IP venait à changer
Réseau « Management network » : Il s’agit du réseau de gestion de l’ESXi. La pluspart du temps il est dans l’URL d’accès à l’interface WEB, sinon il peut se trouver en allant voir les propriétés du vSwitch0

Dans cet exemple, il s’agit du réseau 135.125.9.0/24 (Voir l’URL ou la ligne soulignée dans la capture d’écran).
Une IP de secours : Je propose de prendre l’IP de notre serveur de production GoFAST chez Celeste : 80.245.17.87/32
Résumé : 212.106.122.77/32,80.245.17.87/32,URL.0/32
Pour mon exemple : 212.106.122.77/32,80.245.17.87/32,135.125.9.0/32
Il suffit donc de copier cette chaine et de la coller dans les paramètres de chaque règles qu’on a laissé activé :

PROC - Création d’un dossier dans alfresco & drupal¶
Exemple avec le ticket : https://helpdesk.ceo-vision.com/scp/tickets.php?id=7396
Rédacteur | Date de modification | Version |
---|---|---|
BCR | 11/10/2022 | V1.0 |
Contexte¶
Les dossiers extranet suivant créés par un utilisateur n’apparaissent pas dans GoFAST.
- _scd_accueil_bib
- _scd_accueil_bib2
Après avoir donné accès au compte adm, on remarque que les espaces font partie de Support. Ceux-ci ne sont pas présent dans Alfresco.
Procédure¶
Étape 1 - Créer le dossier¶
Dans Alfresco, se positionner à l’endroit où se situent le dossier. Ici, cela donne : Entrepôt> Sites>_Extranet>_Support . Puis, il faut créer un dossier. (Renseigner uniquement le « Nom »).
Ensuite, sur le dossier, il faut aller dans plus et gérer les aspects.

Verifier que undefined (gofast:nodeproperties) est présent.

Puis Éditer les propriétes, Toutes les propriéts. Remplir les parties : - node id: ID du noeud - bundle : extranet (en minuscule) ( autres valeurs: group organisation extranet public) - cocher : is group & prevent deletion

De retour sur le dossier, plus -> gerer les droits d’accès. Il faut désactiver l’héritage et ajouter les utilisateurs du noeud. (format : _#NODEID)
- _#577194
- _#577194_ADMIN
- _#577194_STANDARD

Puis attribuer les rôles suivants :
- _#577194 - Lecteur
- _#577194_ADMIN - Coordinateur
- _#577194_STANDARD - roles.standard

Enfin, on se rend sur le dossier et on ouvre celui-ci depuis le fil d’ariane. Il faut récupérer le noderef du dossier qui est dans l’URL.


Étape 2 - Référencer le dossier dans drupal¶
Cette partie s’effectue en SSH et sur la base de données d7.
Premièrement, on recherche si le dossier est déjà référencé dans la BDD.
SELECT * FROM field_data_field_folder_reference WHERE entity_id = 577194;
S’il y un résultat alors il faut mettre à jour la colonne field_folder_reference_value.
UPDATE field_data_field_folder_reference SET field_data_field_folder_reference = "workspace://SpacesStore/fe4cfc71-bd66-45a8-af7d-28d65a5d9c19" WHERE entity_id = 577194;
UPDATE field_revision_field_folder_reference SET field_data_field_folder_reference = "workspace://SpacesStore/fe4cfc71-bd66-45a8-af7d-28d65a5d9c19" WHERE entity_id = 577194;
Sinon, il faut insérer une nouvelle ligne. Il faut récupérer le revision id (vid).
SELECT * from node_revision where nid = 577194;

Et pour finir, insérer la ligne. Ici :
- 577194 - node id
- 578972 - revision id
- workspace… - node ref
INSERT INTO field_data_field_folder_reference VALUES ("node", "extranet", 0, 577194, 578972, "und", 0, "workspace://SpacesStore/fe4cfc71-bd66-45a8-af7d-28d65a5d9c19", NULL)
INSERT INTO field_revision_field_folder_reference VALUES ("node", "extranet", 0, 577194, 578972, "und", 0, "workspace://SpacesStore/fe4cfc71-bd66-45a8-af7d-28d65a5d9c19", NULL);
PROC - Update osTicket vers 1.15.8¶
Informations¶
Instance | DC | Hyperviseur | Sujet de la MAJ |
---|---|---|---|
PRD-CEOV-SRV01 | OVH/SBG3 | OVH/os-sbg6 | Mise à jour de version osTicket |
Pré-requis¶
- Accès admin à la machine
- Un snapshot VM et vérifier les backups VEEAM dans le cas d’une erreur
- Un backup des fichiers web (
tar -cvf <SOURCE> <DESTINATION>
- normalement /var/www/osticket) - Un backup de la base de données
- Serveur web apache (pas de version spécifié)
- PHP version 7.4
- MySQL version 5.5
- Les sources de la mise à jour (à télécharger sur osticket.com)
Installation¶
Backup des dossiers & fichiers¶
On commence par vérifier les versions de PHP et MySQL:
php -v
mysql -v --password
Puis, on backup le répertoire /var/www/osTicket:
cd /var/www/
tar -cvf osticket_backup.tar.gz osticket/
On récupère également le fichier de configuration ost-config.php situé dans osticket/include.
cp ./osticket/include/ost-config.php /tmp
Mise à jour de PHP¶
PHP est en version 7.1.33, il faut le passer en version 7.4.

Voici les commandes à passer:
# ajout des repos
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
wget https://rpms.remirepo.net/enterprise/remi-release-7.rpm --no-check-certificate
rpm -Uvh remi-release-7.rpm epel-release-latest-7.noarch.rpm
#disable php 7.1 et enable php 7.4
yum-config-manager --enable remi-php74
yum-config-manager --disable remi-php71
# delete de php 7.1
yum -y remove php71*
# install de la version 7.4
yum -y install php php-cli php-fpm php-mysqlnd php-zip php-devel php-gd php-mcrypt php-mbstring php-curl php-xml php-pear php-bcmath php-json php-opcache php-xdebug php-memcache php-ldap
# restart des services
systemctl enable php-fpm
systemctl start php-fpm
systemctl restart httpd
Note
Si tout est ok, osTicket doit fonctionner comme avant.
Upload des fichiers de mise à jour¶
Dans le fichier .zip qui contient les sources de la mise à jour, il faut extraire son contenu pour garder uniquement le dossier upload et les fichiers .phar (fichiers de langage).

Via le moyen que vous préférez : SFTP ou SCP etc.. envoyez les fichiers du dossier upload dans le répertoire /var/www/osticket.
Note
screenshot à faire lors de la MAJ en prod.
Puis, déposer les fichiers .phar, dans le répertoire /var/www/osticket/include/i18n/.
Note
screenshot à faire lors de la MAJ en prod.
Sur le navigateur, actualisez la page, un bouton permettant de lancer l’upgrade doit s’afficher.
Note
screenshot à faire lors de la MAJ en prod.
Cliquez sur celui-ci et l’upgrade démarre. À la fin de la mise à jour, osTicket vous demandera de supprimer le dossier setup.
cd /var/www/osticket/
rm -rf setup/
La mise à jour est terminée.
Troubleshooting¶
Cette partie recense tous les problèmes rencontrés lors de la mise à jour.
Note
Aucun à ce jour :)
[WIP] PROC - osTicket sur Centos 7¶
Cette procédure décrit les étapes pour l’installation d’osTicket en Centos 7.
Rédacteur | Date de modification | Version |
---|---|---|
BCR | 16/09/2022 | V1.0 |
Pré-requis¶
- Un ESX où il est possible de créer une machine avec 4vCores, 8Go RAM, 100Go de stockage.
- Un OS Centos 7 à jour.
- Un serveur web apache, php (7.4), mySQL (5.5minimum)
Schéma¶

Installation¶
VM¶
La VM est hébergé sur ESXSN. Ses caractéristiques sont: 4vCPU, 8Go RAM, 100Go Disk.
Apache¶
Installation apache.
yum install httpd
systemctl enable httpd
install mod_ssl openssl
# ensuite upload des certificats dans les répertoire /etc/pki/tls/...
# modification de la conf ssl /etc/httpd/conf.d/ssl.conf
# redirection port 80 dans /etc/httpd/conf.d/httpd.conf
systemctl restart httpd
PHP 7.4¶
Installation php 7.4.
# get des repos necessaires
yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
# enable de php 7.4
yum -y install yum-utils
yum-config-manager --enable remi-php74
# install php
yum update
yum install php php-cli php-fpm php-mysqlnd php-zip php-devel php-gd php-mcrypt php-mbstring php-curl php-xml php-pear php-bcmath php-json php-opcache php-xdebug php-memcache php-ldap php-imap
# check version php
php -v
MySQL¶
docs: https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/
wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
rpm -Uvh mysql80-community-release-el7-7.noarch.rpm
sudo yum-config-manager --disable mysql80-community
sudo yum-config-manager --enable mysql57-community
yum update
yum install mysql-server
systemctl start mysqld
systemctl enable mysqld
systemctl status mysqld
sudo grep 'temporary password' /var/log/mysqld.log
mysql_secure_installation
MAIL¶
Envoi de mail par osTicket.
yum install sendmail
yum install postfix
# si erreur car il manque la librairie libmysqlclient.so.18
yum install mariadb-libs-5.5.68-1.el7.x86_64
Sécurisation¶
firewalld
systemctl start firewalld
systemctl enable firewalld
firewall-cmd --get-default-zone
firewall-cmd --set-default-zone=public
firewall-cmd --zone=public --add-interface=<A REMPLIR>
firewall-cmd --zone=public --add-service=https --permanent
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --zone=public --add-service=ssh --permanent
firewall-cmd --zone=public --add-service=smtp --permanent
firewall-cmd --zone=public --add-icmp-block-inversion --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-all
Migration¶
Copie des fichiers dans /var/www/osticket - ne devrait pas poser de problème
SQL¶
Copier de la base de données du serveur en prodution avec la commande suivante :
mysqldump -u root -p --single-transaction --all-databases --events > mysql_dump.sql
scp mysql_dump.sql root@helpdesk.ceo-vision.com:/root/
mysql -u root -p < mysql_dump.sql
PHP¶
Copier le fichier de configuration (attention au mot de passe).
scp /var/www/osticket/include/ost-config.php root@helpdesk.ceo-vision.com:/var/www/osticket/include
Backup¶
Via veeam, ajouter le serveur et installer l’agent linux.
Test à effectuer¶
- Envoie d’un mail
- Création d’un ticket par mail
- Création d’un ticket par l’interface
- Redirection de l’ancien URL
- Upload d’image
- Réponse à un ticket (ouverture/réponse/fermeture etc…)
Troubleshooting¶
Configuration de selinux qui parfois empêche l’accès.