02 ‐ Guide d'installation - EsupPortail/esup-emc2 GitHub Wiki

Présupposition

Les présuppositions suivantes seront faites ici mais elles peuvent être contournées.

Le serveur utilise debian comme système d'exploitation. Une autre distribution linux peut-être utilisée facilement en modifiant légèrement les commandes systèmes utilisées. Il sera en revanche surement plus complexe de réaliser l'installation sous MacOS ou Windows. EMC2 n'a pas été testée sous ces autres systèmes d'exploitations.

Nous utilisons PHP-FPM et Apache sur les instances de l'Université de Caen Normandie. Il est surement possible d'en utiliser ici d'autres en adaptant les configurations qui seront décrites dans la suite.

Nous supposerons aussi que si le serveur est derrière un proxy alors les variables d'environnement associées sont bien positionnées. Notamment les variables http_proxy et https_proxy.

Nous supposerons que EMC2 sera installée dans le répertoire /var/www/html du serveur. Ceci est facilement contournable en modifiant les configuration du serveur web.

**La base de données de EMC2 est une base de données pgsql avec l'extension unaccent (qu'il faut penser à installer et s'assurer que l'application/usager pourra utiliser.

Installation de PHP8, des modules/extensions utiles et autres choses utiles

L'installation de PHP8 et des modules/extensions se fait directement avec le gestionnaire de paquet de la distribution utilisée ; dans le cas de debian il s'agit de apt.

user@serveur:/var/www/html$ apt install php-fpm
user@serveur:/var/www/html$ apt install php8.2-bcmath php8.2-intl php8.2-ldap php8.2-xml php8.2-mbstring php8.2-gd php8.2-curl php8.2-pgsql

On aura besoin de git pour la récupération du dépôt et les futures mises à jour

user@serveur:~$ apt install git

On aura besoin de composer pour la récupération des bibliothèques php

user@serveur:~$ apt install composer
user@serveur:~$ composer self-update --2.2

Récupération du dépôt et des bibliothèques associées

La prochaine étape consiste à cloner le dépôt.

user@serveur:~$ cd /var/www
user@serveur:/var/www$ git clone https://github.com/EsupPortail/esup-emc2.git
user@serveur:/var/www$ mv esup-emc2 html

Le fichier composer.json contient la liste des bibliothèques nécessaire à EMC2. Elle s'installe grace à composer.

user@serveur:/var/www$ cd html
user@serveur:/var/www/html$ composer install

Configuration des différentes bibliothèques

Configuration des BDD et de BDDADMIN

La configuration de l'envoi des courriers électroniques passe par le fichier database.local.php. Il est nécessaire de récupérer la configuration et d'adapter celle-ci.

user@serveur:/var/www/html$ cp config/autoload/database.local.php.dist config/autoload/database.local.php
user@serveur:/var/www/html$ cp config/autoload/unicaen-bdd-admin.local.php.dist config/autoload/unicaen-bdd-admin.local.php

Il y a deux connexions à paramétrer :

  • la connexion à la base de données de EMC2 orm_default
  • la connexion à la base de données du concentrateur de données ou SIRH orm_octopus Pour la configuration, il est nécessaire de préciser le serveur, la base, l'utilisateur et le mot de passe dans les clefs correspondantes.

N.B. : à un moment dans le "futur", orm_octopus sera renommé orm_sirh

Pour simplifier le paramétrage, les déclarations des secret liée au base de données passe par des constantes.

Configuration de l'envoi des courriers électroniques

La configuration de l'envoi des courriers électroniques passe par le fichier unicaen-mail.local.php. Il est nécessaire de récupérer la configuration et d'adapter celle-ci.

user@serveur:/var/www/html$ cp vendor/unicaen/mail/config/unicaen-mail.local.php.dist config/autoload/unicaen-mail.local.php

Dans ce fichier, on retrouve :

  1. le paramètrage sur SMTP ;
  2. le paramètrage du comportement de m'envoi des courriers électronique.

La configuration du SMTP passe par la clef transport_options

'transport_options' => [
    'host' => 'smtp.mon-etablissement.fr',
    'port' => 25,
],

La configuration du comportement par la clef module. On retrouve deux sous-clefs:

  1. la clef default qui régit le comportement par défaut (et de la partie EMC2)
  2. la clef Formation qui régit le comportement de la partie Mes-Formations

Chaque "bloc" de comportement est composé comme suit :

  • do_not_send si à true aucun courrier n'est envoyé
  • redirect si à true alors les courriers seront tous redirigés vers les adresses de la clef redirect_to
  • redirect_to est un tableau d'adresse électronique vers qui les courriers seront redirigés (la virgule est le séparateur)
  • subject_prefix est le préfixe des sujets des courriers (si la valeur est 'EMC2' alors les sujet seront "[EMC2] Mon sujet de courrier"
  • from_name est le nom de l'expéditeur
  • from_email est l'adresse électronique de l'expéditeur

N.B. : Attention EMC2 peut envoyé beaucoup de mail ; notamment lors des campagne d'entretien professionnel. Il est nécessaire de white-lister l'adresse électronique d'expédition des courriers électroniques.

Paramétrage de l'authentification

L'authentification est à paramétrer par le biais de trois fichiers :

  1. config/autoload/unicaen-ldap.local.php paramètrage de l'accés au LDAP
  2. config/autoload/unicaen-authentification.local.php paramètrage des mode d'authentification
  3. config/autoload/unicaen-app.local.php paramètrage complémentaire (et parfois redondant qui sera améliorée dans les prochaines versions)

Tout d'abord renommé les fichiers dist

user@serveur:/var/www/html$ mv config/autoload/unicaen-ldap.local.php.dist config/autoload/unicaen-ldap.local.php
user@serveur:/var/www/html$ mv config/autoload/unicaen-authentification.local.php.dist config/autoload/unicaen-authentification.local.php
user@serveur:/var/www/html$ mv config/autoload/unicaen-app.local.php.dist config/autoload/unicaen-app.local.php

Paramétrage dans le fichier config/autoload/unicaen-ldap.local.php

Ce paramètrage est assez immédiat ici il s'agit de paramètrer l'accés au ldap pour la récupération d'information sur les utilisateurs connectés.

Attention en fonction des identifiants de l'établissement à dé-commenter la bonne ligne à propos de accountFilterFormat.

**N.B: **

  • Pour Caen, il s'agit du supannEmpId
  • Pour Aix-Marseille et Rouen, il s'agit de l'uid

Paramétrage dans le fichier config/autoload/unicaen-authentification.local.php

Dans ce fichier, il est question de paramètrer le mode d'authentification parmi : CAS, LDAP (et compte local), et shibboleth (pas de test réalisée ici pour le moment).

L'activation de CAS passe par la déclaration du serveur à contact

'cas' => [
    // laisser vide si pas de cas
    'connection' => [
        'default' => [
            'params' => [
                'hostname' => 'cas.XXXX.fr',
                'port'     => XXX,
                'version'  => "2.0",
                'uri'      => "",
                'debug'    => false,
            ],
        ],
    ],
    'form_skip' => true,
],

N.B. : form_skip permet d'éviter le formulaire d'identification si l'utilisateur a déjà un jeton d'identification valide

L'activation de LDAP passe par le fait de positionner la variable enable à true de même pour les comptes locaux db.

'local' => [
    'order' => 2,
    'enabled' => true,
    'description' => "Utilisez ce formulaire si vous possédez un compte LDAP établissement ou un compte local dédié à l'application.",
    'db' => [
        // doit être activé pour que l'usurpation fonctionne (cf. Authentication/Storage/Db::read()) :-/
        'enabled' => true,
    ],
    'ldap' => [
        'enabled' => true,
        'username' => XXX,
    ],
],

Pour la partie shibboleth sera décrite plus tard.

Dans ce même fichier il est possible de déclarer les login des personnes ayant accès à l'usurpation dans le tableau usurpation_allowed_usernames.

Paramétrage dans le fichier config/autoload/unicaen-app.local.php

Ici l'on retrouve le paramètrage du LDAP (à nouveau)

Paramétrer le comportement des message d'erreur config/autoload/local.php

Ce fichier permet de paramètrer l'affichage des différents messages d'erreur.

user@serveur:/var/www/html$ mv config/autoload/local.php.dist config/autoload/local.php

Pour le moment ce fichier ne contient que les paramètrages liés aux exceptions et aux "not found"

Construire le schéma de la base de données

La gestion de la structure de la base de données est maintenant délégué à unicaen/bdd-admin. Cette permet de créer et mettre à jour les tables en gérant le nom, le type et les contraintes des différentes colonnes des tables.

Pour mettre à jour votre schéma veut utiliser la commande suivante :

mon_utilisateur@mon_serveur:/var/www/html$ ./vendor/bin/laminas bddadmin:update

Lors de l'exécution de cette commande, vous verez les différentes opérations que réalisera unicaen/bdd-admin. Et à la fin de la procédure le message suivant :

Mise à jour de toutes les séquences
                                                                                                                        
 [OK] Bdd mise à jour                                                                                                   

Après cette opération les tables de la base de données seront créées et vous pourrez les consulter avec un outil de gestion de base (dbeaver, sqldevelopper, ...)

Inserer les données minimales

Les données

Dans le répertoire (documentation/SQL/donnees) vous retrouverez un ensemble de script à lancer dans l'ordre lexicographique. Ces données ajouterons les données associés aux différentes blibliothèques (formulaires, templates, états, ...) déclareront les différents paramètres et privilèges.

Les privilèges

Pour simplifier le paramètrage de votre instance, il est aussi possible de reprendre les affectations des privilèges pour correspondre à une "instance type". Pour cela dans le répertoire (documentation/SQL/privilieges) vous retrouverez une liste de scripts réalisant les affectations.

Remarque : Ces fichiers peuvent être utilisés pour réinitialiser les privilèges, il faut cependant penser à vider vos précédentes affectations truncate table unicaen_privilege_privilege_role_linker.

Ajouter hors de l'interface un utilisateur, le nommer administrateur technique

INSERT INTO unicaen_utilisateur_user (username, display_name, email, password, state) VALUES ('login', 'Nom à afficher', '[email protected]', 'ldap', true);

N.B. : Ici ldap est utilisé pour les deux mode d'authentification ldap et cas.

INSERT INTO unicaen_utilisateur_role_linker (user_id, role_id)
SELECT u.id AS user_id, r.id AS role_id
FROM unicaen_utilisateur_user u
JOIN unicaen_utilisateur_role r ON true
WHERE u.username='login' AND r.role_id='Administrateur·trice technique';

Pour les autres utilisateurs et administrateurs, il est recommandé de passer par l'interface "Administration > Utilisateur"

N.B. : La plupart des rôles sont automatiques et seront attribués par l'application (par exemple les rôles Agent, Responsable de structure, ...). Le listing et le type des différents rôles peuvent être consulté dans l'interface "Administration > Rôle"

Finalisation et zone d'échanges de fichiers

Deux répertoires d'échanges de données sont nécessaire :

  • data/DoctrineORMModule/Proxy qui permettra à Doctrine (ORM) de gérer les données des requètes
  • upload qui sera la zone de dépôt des fichiers
## DROIT DES REPERTOIRES D ECHANGE
mkdir -p /var/www/html/data/DoctrineORMModule/Proxy
chmod 777 /var/www/html/data/DoctrineORMModule/Proxy

mkdir /var/www/html/upload
chmod 777 /var/www/html/upload

Vérification des données attendues par EMC2/MesFormations

Vérification de l'installation

Dans le menu Administration > Vérification de l'installation on retrouve une interface de contrôle qui vérifie si tous (ou presque) les éléments attendu par un module ou une bibliothèque sont bien en base de donnée.

Un rapide parcours de cette page permet de voir si des manques sont présents Capture d’écran de 2023-11-29 18-26-33

Attention: Les parties traitement des fonctions et de profil de recrutement sont in limbo et seront indiquée comme non renseigner. Les discussions du groupe permettront de savoir si on supprimer ces fonctionnalités actuellement abondonnées