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

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 :

_images/tempo-access.png

Voici comment se compose l’interface de Tempo :

_images/tempo-view.png
    1. Suivi du temps passé par tâche
    1. Utilisez ce bouton pour enregistrer un temps sur une tâche
    1. Il est possible de changer de vue et de passer en mode calendrier, à la semaine par exemple
    1. Ce bouton sert à envoyer ses timelog, il doit être utilisé à la fin du mois
    1. 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 :

_images/tempo-submit.png

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
_images/tempo-cal.png

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 :

_images/tempo-cal-filter.png

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

_images/tempo-export.png

Import de l’agenda dans Google Calendar

Sur Google Calendar dans « Autres agendas » cliquer sur importer :

_images/tempo-import1.png

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

_images/tempo-import2.png

Synchronisation avec Tempo

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

_images/tempo-apps.png

Choisir « Google Calendar »

_images/tempo-gcal.png

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

_images/tempo-conf.png

Renseigner Tempo

Ouvrir la vue « Calendar » en haut à droite

_images/tempo-cal-view.png

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

_images/tempo-log-direct.png

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

_images/tempo-log-indirect.png

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:

_images/main-layout.png

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.

_images/main-layout-files.jpg

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.

_images/create-page-content.jpg

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.

_images/exemple.jpg

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é.

_images/maint-content.png

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.

_images/gofast-content.jpg _images/gofast-content2.jpg

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”.

_images/style_tree.png _images/tree-gofast4bundle.png

Gestion des variables (Variables.scss)

Important

Documentation SASS

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

_images/scss-img.png _images/scss-img2.png

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

_images/jira-workflow.png

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 :

  1. que la chaîne ait un contexte
  2. que ce contexte soit formaté ainsi : gofast_technical:CONTEXT ; si le contexte n’est pas préfixé par gofast_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 » :

_images/technical-translations-1.png

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 ».

_images/technical-translations-2.png

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

_images/technical-translations-3.png

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

_images/technical-translations-4.png

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.

_images/technical-translations-5.png

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 :

_images/technical-translations-6.png

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

_images/technical-translations-7.png

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 :

  1. 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.

  1. Télécharger la totalité du dossier Drupal /var/wwww/d7 suite à la mise à jour.
  2. 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.

  1. Réappliquer tous les patches ceo-vision.
  2. Commit les changements dans le dépôt gofast.

Script d’installation :

  1. Le script de mise à jour doit comporter la commande de mise à jour Drupal : drush @d7 pm-update drupal-X.XX -y
  2. 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.
  3. Mettre à jour le numéro de version de Drupal dans le fichier « gofast_makefile.mk ».
  4. 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 :

_images/git-checkout.png

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

_images/git-new-branch.png

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.

_images/git-diff.png

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.

_images/git-commit.png

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 :

_images/git-drag-drop.png

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

_images/git-mr1.png

Ou soit directement depuis GitLab :

_images/git-mr2.png

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 :

_images/git-mr-go.png

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

_images/git-mr-check.png

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” »
_images/rc-commit-message.png
  • 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.

_images/rc-commit-tag.png

Fermer une version en validant une Release Candidate

  • Tag sur le dernier commit RC
_images/rel-commit-tag.png
  • 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

https://gofast-docs.readthedocs.io/fr/latest/docs-gofast-technical/gofast-docs-prerequis-installation-serveur.html#configuration-du-reseau-par-lexploitant

assignation ip sur esx : https://ceovision.atlassian.net/browse/CEOVIS-398

Besoin :

  • @IP
  • @MAC (associé à l’IP)
  • Gateway (ESX)
_images/gateway_esx.png

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)

_images/address_mac.png

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
_images/edit_connection.png _images/edit_connection2.png

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 »

_images/onboot.png

( « :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 :

_images/files_main.png

à déposer dans /opt de la machine virtuelle

cd /opt
yum install -y dos2unix
chmod +x *.sh
dos2unix *.sh

COMM :

_images/files_comm.png

à 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.

_images/domain.png

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):

_images/restart_alfresco.png
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) :

_images/target_schema.png
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.

_images/config_vm.png

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

_images/liveCD_veeam.png

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.

_images/veeam_netconfig.png

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.

_images/veeam_netconfig_menu.png

Puis remplir la partie IPv4.

_images/veeam_ipconfig.png

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:

_images/veeam_restVolume.png

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

_images/veeam_restDest.png

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

_images/veeam_login.png

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.

_images/veeam_chooseBck.png

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

_images/veeam_restoreFrom.png _images/veeam_restoreFromSelect.png

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é.

_images/veeam_finish.png _images/veeamreboot.png _images/veeamVMStart.png

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 :

_images/esx-secure-ssh-enabled.png

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

_images/esx-secure-ssh-actions.png

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 :

_images/esx-secure-slpd-off.png

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 ».

_images/esx-secure-datastore.png

Charger le correctif dans le datastore au format .zip :

_images/esx-secure-datastore-load-patch.png

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 »

_images/esx-secure-datastore-updated.png

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.

_images/esx-secure-default-firewall.png

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

_images/esx-secure-management-network.png

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é :

_images/esx-secure-ip-config.png

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.

prod-gofast/img/20221011122359.png

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

prod-gofast/img/20221011114541.png

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

prod-gofast/img/20221011114656.png

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
prod-gofast/img/20221011114939.png

Puis attribuer les rôles suivants :

  • _#577194 - Lecteur
  • _#577194_ADMIN - Coordinateur
  • _#577194_STANDARD - roles.standard
prod-gofast/img/20221011115048.png

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.

prod-gofast/img/20221011115312.png prod-gofast/img/20221011123332.png

É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;
prod-gofast/img/20221011124446.png

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.

_images/version_php_srv01_prod_osticket.png

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).

_images/folder_update_srv01_prod_osticket.png

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

prod-internal/img/osTicketArchi.png

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.