Commit c4b90321 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Mise à jour et amélioration de la doc d'install.

parent 75c163a6
Loading
Loading
Loading
Loading
+2 −0
Changes for CHANGELOG.md: 2 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -6,6 +6,8 @@ Journal des modifications
- Passage à PHP 8.0.
- Ajout d'une V3 à l'API ; les V1 et V2 demeurent.
- Ajout de la colonne V_SYGAL_DOCTORANT_V2.code_apprenant_in_source contenant le numéro étudiant (API V3).
- Dockerfile sans dépendance à l'image Unicaen ; traduit en Dockerfile.sh pour l'install manuelle.
- Mise à jour de la doc d'installation.

2.3.0
-----
+1 −186
Changes for INSTALL.md: 1 added line, 186 removed lines.
Original line number Diff line number Diff line
Installation du web service `sygal-import-ws`
=============================================

Applicatif
----------

### Première obtention des sources et installation du serveur 

*NB: la procédure proposée ici part d'un serveur *Debian* tout nu et couvre l'installation de tous les packages 
requis.* Si ce n'était pas le cas, merci de le signaler.

En `root` sur votre serveur, pour obtenir les sources du WS, lancez l'une des commandes suivantes en fonction 
du site sur lequel vous lisez la présente page :
```bash
# Si vous êtes sur git.unicaen.fr :
git clone https://git.unicaen.fr/open-source/sygal-import-ws.git /app

# Si vous êtes sur github.com :
git clone https://github.com/EsupPortail/sygal-import-ws.git /app
```

*NB: merci de respecter dans un premier temps le choix de `/app` comme répertoire d'installation. 
Libre à vous une fois que tout fonctionne de changer d'emplacement et de modifier en conséquence les configs
nécessaires.*

### Configuration du serveur

Ensuite, placez-vous dans le répertoire des sources et jetez un oeil au script `Dockerfile.sh`.
Ce script est en quelque sorte l'équivalent du `Dockerfile` du WS traduit en bash. 
(Vous y verrez que le dépôt git d'une image Docker Unicaen est cloné pour lancer 
son script `Dockerfile.sh` qui est lui aussi l'équivalent du `Dockerfile` de l'image 
traduit en bash.)

Lancez le script `Dockerfile.sh` :
```bash
cd /app
bash Dockerfile.sh 7.4
```

Ensuite, vérifiez et ajustez si besoin sur votre serveur les fichiers de configs suivants,
créés par le script `Dockerfile.sh` :
- ${APACHE_CONF_DIR}/ports.conf
- ${APACHE_CONF_DIR}/sites-available/app.conf
- ${APACHE_CONF_DIR}/sites-available/app-ssl.conf  
- ${PHP_CONF_DIR}/fpm/pool.d/app.conf
- ${PHP_CONF_DIR}/fpm/conf.d/90-app.ini

NB: Vérifiez dans le script `Dockerfile.sh` que vous venez de lancer mais normalement 
`APACHE_CONF_DIR=/etc/apache2` et `PHP_CONF_DIR=/etc/php/7.4`.

### Installation d'une version précise du WS

Normalement, vous ne devez installer que les versions officielles du WS, c'est à dire les versions taguées, du genre `2.3.0`
par exemple. Si vous partez de zéro, choisissez bien-sûr la version la plus récente !

Placez-vous dans le répertoire des sources du web service puis lancez les commandes git suivantes pour obtenir la liste des
versions officielles du WS :
```bash
git fetch && git fetch --tags && git tag
```

Si la version la plus récente est par exemple la `2.3.0`, utilisez les commandes suivantes pour "installer" cette version 
sur votre serveur :
```bash
git checkout --force 2.3.0 && bash install.sh
```

### Fichier "users.htpasswd"

Ce fichier contient les utilisateurs/mot de passe autorisés à interroger le WS au regard de l'authentification HTTP Basic.

S'il s'agit d'une simple mise à jour du WS, vous avez déjà fait la manip, inutile de lire ce paragraphe.

S'il s'agit de la première installation du WS, placez-vous dans le répertoire [`config`](config) des sources et lancez la 
commande suivante pour créer le fichier "users.htpasswd" contenant un utilisateur `sygal-app` dont le mot de passe 
vous sera demandé :
```bash
htpasswd -c users.htpasswd sygal-app
```

Si vous manquez d'idée pour le mot de passe, utilsez la commande suivante :
```bash
pwgen 16 1 --symbols --secure
```

### Configuration du WS

S'il s'agit d'une mise à jour du WS, vous avez déjà fait la manip, inutile de lire ce paragraphe.
Reportez-vous aux "release notes" de la version choisie situées dans `doc/release-notes`.

S'il s'agit de la première installation du WS, 2 fichiers situés dans le répertoire [`config/autoload`](config/autoload) 
doivent être complétés puis renommés :

  - **local.php.dist** : qui est notamment utilisé pour l'authentification.
    - clé `htpasswd` qui désigne le chemin du fichier "users.htpasswd" évoqué plus haut
  - **database.local.php.dist** : qui est utilisé pour la connection à la BDD.
    - clés `host`, `dbname`, `port`, `user`, `password` : les infos d'accès à la BDD.
 
Une fois ces fichiers complétés, supprimez l'extension `.dist`, ex :
```bash
cp -n local.php.dist          local.php 
cp -n database.local.php.dist database.local.php
```

### Configuration PHP pour le WS

Si vous êtes sur un serveur de PROD, corrigez les lignes suivantes du fichier de config PHP 
`/etc/php/7.4/fpm/conf.d/90-app.ini` :

    display_errors = Off
    ...
    error_reporting = 0
    ...
    opcache.enable = 1
    ...
    xdebug.enable = 0

### Interface d'admin Apigility

Cette interface de modification du WS est réservée aux développeurs et est **INTERDITE EN PRODUCTION**.
Assurez-vous de bien désactiver le mode développement :
```bash
composer development-disable
```


Base de données
---------------

### Création des tables et vues sources

Le WS puise dans des tables `SYGAL_*` mises à jour périodiquement à partir de vues `V_SYGAL_*`. Vous devez créer 
ces tables et vues dans la base de données de votre logiciel de scolarité (Apogée ou Physalis) ou autre part si c'est 
possible, à vous de voir. 

Le répertoire [`dist/SQL`](dist/SQL) contient ceci :
- Un script `01-tables.sql` pour créer les tables qui contiendront les données retournées par le web service.
- Un dossier `apogee` concernant les établissements ayant Apogée.
- Un dossier `physalis` concernant les établissements ayant Physalis (Cocktail).

Quelque soit votre logiciel de scolarité, utilisez le script `01-tables.sql` pour créer les tables `SYGAL_*`.

Prenons maintenant l'exemple d'Apogée. Le répertoire `apogee` contient 2 scripts SQL : 
- `01-vues-apogee-communes.sql` : script de création des vues `V_SYGAL_*` communes à tous les établissements
  ayant ce logiciel de scolarité, ne nécessitant aucune personnalisation.
- `02-vues-apogee-etab.sql` : script de création des vues `V_SYGAL_*` contenant des données propres à votre 
  établissement en particulier, nécessitant donc une personnalisation de votre part.

Prenez connaissance de ces scripts, personnalisez ceux qui le requierent puis lancez-vous/les pour créer les 
tables/vues nécesssaires.

### Mise à jour périodique des tables sources

Le WS puise dans des tables `SYGAL_*` qui doivent être mises à jour périodiquement à partir des vues `V_SYGAL_*`.
Il s'agit de CRONer l'exécution de la commande chargée de faire cette mise à jour.

- Créez sur le serveur du web service le fichier de config CRON `/etc/cron.d/sygal-import-ws-cron`
  identique au fichier [dist/cron/sygal-import-ws-cron](dist/cron/sygal-import-ws-cron) fourni
  puis adaptez si nécessaire son contenu :
    - `APP_DIR=` : chemin vers le répertoire d'installation du web service.
    - `LOG_FILE=` : chemin vers le fichier de log.
    - `*/5` : périodicité d'exécution du script, initialisée à "toutes les 5 minutes".

- Testez que CRON sera en mesure de lancer le script d'après le contenu du fichier de config.
  Exemple :

```bash
APP_DIR=/var/www/sygal-import-ws
/usr/bin/php ${APP_DIR}/public/index.php update-service-tables
```

- Vérifiez ensuite que le contenu de la table `SYGAL_INDIVIDU` (par exemple) a bien été mis à jour à l'instant 
  grâce à la colonne `inserted_on`.


Réseau
------

Vous devez autoriser le serveur sur lequel est installé le WS à être interrogé par le serveur sur lequel est installé 
ESUP-SyGAL. 

Il est conseillé de restreindre cette autorisation à cette seule adresse IP d'origine.


Test
----

Reportez-vous au [README.md](README.md) pour tester l'appel du WS en ligne de commande depuis le serveur
sur lequel est installé ESUP-SyGAL.
Rendez-vous sur [INSTALL.md](doc/INSTALL.md).
+13 −31
Changes for README.md: 13 added lines, 31 removed lines.
Original line number Diff line number Diff line
sygal-import-ws
===============

Que fait *sygal-import-ws* ?
----------------------------

*sygal-import-ws* est une API REST qui retourne les données présentes dans des tables `SyGAL_*` 
*sygal-import-ws* est une API REST qui retourne les données présentes dans des tables `SYGAL_*` 
d'Apogée ou de Physalis via des requêtes GET.

Docker
------

- Obtention de l'image de base Unicaen (construite) à jour
Installation
------------

```bash
PHP_VERSION=8.0 \
docker pull registre.unicaen.fr:5000/unicaen-dev-php${PHP_VERSION}-apache
```
Cf. [`INSTALL.md`](INSTALL.md).

- Construction de l'image du web service

Lancement du web service *pour le dévelopement*
-----------------------------------------------

- Construction de l'image

```bash
PHP_VERSION=8.0 \
@@ -30,29 +27,13 @@ docker build \
.
```

- Lancement du web service
- Démarrage du container :

```bash
docker-compose up sygal-import-ws
```


Installation
------------

Cf. [`INSTALL.md`](INSTALL.md).


Lancement du web service *pour le dévelopement*
-----------------------------------------------

Se placer à la racine des sources du ws pour lancer la commande suivante :

```bash
docker-compose up --build sygal-import-ws
```

Vérifier que le container `sygal-import-ws-container-php8.0` figure bien dans la liste des containers
- Vérifier que le container `sygal-import-ws-container-php8.0` figure bien dans la liste des containers
lancés listés par la commande suivante (cf. colonne `NAMES`) :

```bash
@@ -83,7 +64,8 @@ Chaque vue en base de données peut être interrogée via un service dédié :
  - `/titre-acces`
  - `/variable`

Il y a aussi un service `/version` () permettant de connaître le numéro de version du web service (ex : '2.3.0'). 
Autres services :
  - `/version` : permet de connaître le numéro de version du web service (ex : '2.3.0')


Versionning de l'API

doc/INSTALL.md

0 → 100644
+181 −0
Changes for doc/INSTALL.md: 181 added lines, 0 removed lines.
Original line number Diff line number Diff line
Installation du web service `sygal-import-ws`
=============================================


## Installation du serveur Debian Bullseye

Concernant l'installation du serveur d'application, n'ayant pas à Caen les compétences
en déploiement Docker (autres que pour le développement), nous documenterons une installation manuelle sur
un serveur *entièrement dédié à l'application*.
Si vous voulez déployer l'application avec Docker, faites-le à partir du `Dockerfile` présent et n'hésitez pas à
contribuer en améliorant cette doc d'install !

**NB :** La procédure proposée ici part d'un serveur *Debian Bullseye* tout nu. Elle couvre normalement l'installation
de tous les packages requis, mais si ce n'était pas le cas merci de contribuer en le signalant.


### Case départ : obtention des sources de l'application

En `root` sur votre serveur, obtenez les sources en lançant l'une des commandes suivantes en fonction
du site sur lequel vous lisez la présente doc :
```bash
# Si vous êtes sur git.unicaen.fr :
git clone https://git.unicaen.fr/open-source/sygal-import-ws.git /app

# Si vous êtes sur github.com :
git clone https://github.com/EsupPortail/sygal-import-ws.git /app
```

*NB : merci de respecter dans un premier temps le choix de `/app` comme répertoire d'installation.
Si vous êtes à l'aise, libre à vous une fois que tout fonctionne de changer d'emplacement et de modifier en conséquence
les configs nécessaires sur le serveur.*

### Configuration du serveur

- Vous trouverez dans le répertoire des sources récupérées à l'instant un script `Dockerfile.sh`,
  sorte de version sh du Dockerfile, contenant de quoi mettre à niveau et/ou installer les packages nécessaires.

- Plutôt que de le lancer d'un seul bloc, ouvrez-le dans un autre terminal pour le visualiser, ce qui vous permettra
  de copier-coller-lancer les commandes qu'il contient par petits groupes.

- Ensuite, vérifiez et ajustez si besoin sur votre serveur les fichiers de configs suivants,
créés par le script `Dockerfile.sh` :
- ${APACHE_CONF_DIR}/ports.conf
- ${APACHE_CONF_DIR}/sites-available/app.conf
- ${APACHE_CONF_DIR}/sites-available/app-ssl.conf  
- ${PHP_CONF_DIR}/fpm/pool.d/99-sygal.conf
- ${PHP_CONF_DIR}/fpm/conf.d/99-sygal.ini

NB: Vérifiez dans le script `Dockerfile.sh` que vous venez de lancer mais normalement 
`APACHE_CONF_DIR=/etc/apache2` et `PHP_CONF_DIR=/etc/php/${PHP_VERSION}`.

### Installation d'une version précise du WS

Normalement, vous ne devez installer que les versions officielles du WS, c'est à dire les versions taguées, du genre `3.0.0`
par exemple. Si vous partez de zéro, choisissez bien-sûr la version la plus récente !

Placez-vous dans le répertoire des sources du web service puis lancez les commandes git suivantes pour obtenir la liste des
versions officielles du WS :
```bash
git fetch && git fetch --tags && git tag
```

Si la version la plus récente est par exemple la `3.0.0`, utilisez les commandes suivantes pour "installer" cette version 
sur votre serveur :
```bash
git checkout --force 3.0.0 && bash install.sh
```

### Fichier "users.htpasswd"

Ce fichier contient les utilisateurs/mot de passe autorisés à interroger le WS au regard de l'authentification HTTP Basic.

S'il s'agit d'une simple mise à jour du WS, vous avez déjà fait la manip, inutile de lire ce paragraphe.

S'il s'agit de la première installation du WS, placez-vous dans le répertoire [`config`](config) des sources et lancez la 
commande suivante pour créer le fichier "users.htpasswd" contenant un utilisateur `sygal-app` dont le mot de passe 
vous sera demandé :
```bash
htpasswd -c users.htpasswd sygal-app
```

Si vous manquez d'idée pour le mot de passe, utilsez la commande suivante :
```bash
pwgen 16 1 --symbols --secure
```

### Configuration du WS

S'il s'agit d'une mise à jour du WS, vous avez déjà fait la manip, inutile de lire ce paragraphe.
Reportez-vous aux "release notes" de la version choisie situées dans `doc/release-notes`.

S'il s'agit de la première installation du WS, supprimez l'extension `.dist` des fichiers suivants situés dans le 
répertoire [`config/autoload`](config/autoload) :
  - [`local.php.dist`](config/autoload/local.php.dist)

Dans la suite, vous allez adapter le contenu de ces fichiers à votre situation.

#### Fichier `local.php`

- Vérifiez la valeur de la clé `htpasswd` qui désigne le chemin du fichier "users.htpasswd" évoqué plus haut.

- Renseignez les infos de connexion à la base de données (Apogée ou Physalis) :
```php
    'doctrine' => [
        'connection' => [
            'orm_default' => [
                'driverClass' => 'Doctrine\DBAL\Driver\OCI8\Driver',
                'params' => [
                    'host'     => 'XXXXX',
                    'dbname'   => 'XXXXX',
                    'port'     => 'XXXXX',
                    'user'     => 'XXXXX',
                    'password' => 'XXXXX',
                    'charset'  => 'AL32UTF8',
                ],
            ],
        ],
    ],
```


### Configuration PHP

Si vous êtes sur un serveur de PROD, corrigez les lignes suivantes du fichier de config PHP 
`/etc/php/${PHP_VERSION}/fpm/conf.d/99-sygal.ini` :
```
    display_errors = Off
    display_startup_errors = Off
    display_errors = Off
    ...
    error_reporting = 0
    ...
    opcache.enable = 1
    ...
    xdebug.mode = off
```


## Script d'install des dépendances et d'init de l'application

Lancez le script suivant :

```bash
bash ./install.sh
```


Base de données
---------------

Reportez-vous au [README consacré à la base de données](database/README.md).


Programmation des tâches périodiques
------------------------------------

Vous devez CRONer l'exécution de la commande permettant de mettre à jour le contenu des tables de la bdd dans lesquelles 
puisent le WS. Normalement, vous avez lancé cette commande une première fois en suivant la doc d'install de la bdd.

- Créez sur le serveur du web service le fichier de config CRON `/etc/cron.d/sygal-import-ws-cron`
  identique au fichier [cron/sygal-import-ws-cron](cron/sygal-import-ws-cron) fourni.

- Adaptez si nécessaire son contenu :
  - `APP_DIR` : chemin vers le répertoire d'installation du web service.
  - `LOG_FILE` : chemin vers le fichier de log.
  - périodicité d'exécution du script, ex : "lun-ven à 6:25, 6:55, 7:25, ..., 18:25, 18:55".


Réseau
------

Vous devez autoriser le serveur sur lequel est installé le WS à être interrogé par le serveur sur lequel est installé 
ESUP-SyGAL.
Il est conseillé de restreindre cette autorisation à cette seule adresse IP d'origine.


Test
----

Reportez-vous au [README.md](../README.md) pour tester l'appel du WS en ligne de commande depuis le serveur
sur lequel est installé ESUP-SyGAL.
+1 −1
Changes for doc/cron/sygal-import-ws-cron: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -2,7 +2,7 @@
# Web service d'import pour SyGAL.
#

APP_DIR=/var/www/sygal-import-ws
APP_DIR=/app
LOG_FILE=/tmp/sygal-import-ws.log

##### Mise à jour des tables sources des services #####
Loading