Commit 2d8153d4 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Bdd de démo et Réorganisation.

parent d383c481
Loading
Loading
Loading
Loading
+18 −7
Original line number Diff line number Diff line
@@ -6,16 +6,27 @@

FROM postgres:15

LABEL maintainer="Bertrand GAUTHIER <bertrand.gauthier at unicaen.fr>"

#
# Argument spécifiant l'emplacement des ressources Docker à utiliser (valeur par défaut : ressources pour une
# base de données **neuve**).
#
ARG RESOURCE_DIR="docker/dist"

RUN localedef -i fr_FR -c -f UTF-8 -A /usr/share/locale/locale.alias fr_FR.UTF-8

ENV LANG fr_FR.utf8
ENV TZ "Europe/Paris"
ENV PGTZ "Europe/Paris"

# Copie du script de création de la base de données
# (lancé automatiquement ssi le répertoire de persistance de la base de données est vide).
COPY docker/initdb.sh /docker-entrypoint-initdb.d/

# Copie des scripts SQL de création de la base de données (cf. script `initdb.sh`).
# NB : il demeure possible de substituer ces scripts par les vôtres grâce à un montage de volume.
COPY docker/sql/ /sql/
#
# Copie des ressources à utiliser pour créer la base de données :
#   - Scripts SQL qui seront lancés par le script `initdb.sh` (ci-après).
#   - Script `initdb.sh` lancé automatiquement ssi le répertoire de persistance
#     de la base de données est vide.
#
# NB : il est aussi possible de substituer ces ressources par les vôtres grâce à des montages de volumes.
#
COPY ${RESOURCE_DIR}/sql/ /sql/
COPY ${RESOURCE_DIR}/initdb.sh /docker-entrypoint-initdb.d/
+87 −27
Original line number Diff line number Diff line
@@ -4,21 +4,40 @@ SyGAL Database Image
Ce projet est une image Docker rassemblant le nécessaire pour créer (le cas échéant) et lancer une base de données 
pour l'application ESUP-SyGAL.

--------

Lancement de la base de données
-------------------------------
Pour une bdd **neuve** (dist)
-----------------------------

### Avec `docker-compose`
### Mise à jour (facultative)

Si vous utilisez la commande suivante, le super-utilisateur, le nom de la base de données et de l'utilisateur 
SyGAL qui seront créés sont spécifiés "en dur" dans le fichier [`docker-compose.yml`](docker-compose.yml)
(variables d'environnement `POSTGRES_*` et `SYGAL_*`) :
Pour récupérer dans les sources de SyGAL la dernière version des scripts SQL de création d'un bdd **neuve** et les
copier ici, lancer cette commande :
```bash
./docker/update_dist.sh -g https://git.unicaen.fr/open-source/sygal.git
```

N'oubliez pas de mettre à jour le dépôt si névessaire :
```shell
git add . && git commit -m "Mise à jour des scripts de création d'une bdd neuve." && git push
```

### Build de l'image

```bash
docker compose build sygal-db-dist
```

**Attention !** Si vous êtes derrière un proxy, vous pouvez transmettre les valeurs courantes de vos variables d'environement `*_proxy`
à la commande `build` avec des `--build-arg` additionnels.

### Lancement

```bash
docker-compose up
docker compose up sygal-db-dist
```

### Sans `docker-compose`
ou alors

```bash
docker run \
@@ -29,9 +48,9 @@ docker run \
--env SYGAL_USER=ad_sygal \
--env SYGAL_PASSWORD=azerty \
--publish 5432:5432 \
--volume $PWD/docker/sql/:/sql \
--volume $PWD/data/db:/var/lib/postgresql/data \
sygal-db-image
--volume $PWD/docker/dist/sql/:/sql \
--volume $PWD/docker/dist/db:/var/lib/postgresql/data \
sygal-db-dist
```

Remarques :
@@ -50,15 +69,15 @@ Remarques :
    (exemple : `--volume $PWD/mes/scripts/sql/:/sql`). La présence d'un sous-répertoire `admin` n'est pas obligatoire. 


Utilisation de l'image dans un `docker-compose.yml`
---------------------------------------------------
### Utilisation de l'image dans un `docker-compose.yml`

L'image doit avoir été buildée au préalable.

```yml
version: '2.2'
services:
  sygal-db:
    image: sygal-db
    container_name: sygal-db-container
  sygal-db-dist:
    image: sygal-db-dist
    restart: always
    environment:
      POSTGRES_USER: postgres
@@ -69,30 +88,71 @@ services:
    ports:
      - "5432:5432"
    volumes:
      - ./mon/emplacement/sql/:/sql                   # répertoire des scripts de création de la bdd
      - ./mon/emplacement/db:/var/lib/postgresql/data # répertoire où la bdd est persistée
```


Build de l'image
----------------
--------


Pour une bdd de **démo**
------------------------

- Facultatif : vous pouvez éventuellement récupérer les dernières versions des scripts SQL comme ceci :
### Mise à jour (facultative)

```bash
./update_sql.sh
```

NB : Ce script se termine par un git status permettant de connaître les scripts SQL ayant changé.
```

- Build
### Build

```bash
docker build \
--rm \
-t sygal-db-image \
-t sygal-db-demo \
.
```

**Attention !** Si vous êtes derrière un proxy, vous pouvez transmettre les valeurs courantes de vos variables d'environement `*_proxy`
à la commande `build` avec des `--build-arg` additionnels.
### Lancement

```bash
docker compose up sygal-db-demo
```

ou alors

```bash
docker run \
--rm \
--env POSTGRES_USER=postgres \
--env POSTGRES_PASSWORD=admin \
--env SYGAL_DB=sygal_demo \
--env SYGAL_USER=ad_sygal_demo \
--env SYGAL_PASSWORD=azerty \
--publish 5432:5432 \
--volume $PWD/docker/demo/sql/:/sql \
--volume $PWD/docker/demo/db:/var/lib/postgresql/data \
sygal-db-demo
```

### Utilisation de l'image dans un `docker-compose.yml`

L'image doit avoir été buildée au préalable.

```yml
version: '2.2'
services:
  sygal-db-demo:
    image: sygal-db-demo
    restart: always
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: admin
      SYGAL_DB: sygal_demo
      SYGAL_USER: ad_sygal_demo
      SYGAL_PASSWORD: azerty
    ports:
      - "5432:5432"
    volumes:
      - ./mon/emplacement/db:/var/lib/postgresql/data # répertoire où la bdd est persistée
```

bin/demo/README.md

0 → 100644
+58 −0
Original line number Diff line number Diff line
Mise à jour du dump SQL de création d'une bdd de **démo**
=========================================================

Idée
----

L'idée est de lancer le script de génération puis de mise à jour du dump SQL permettant de créer une bdd de 
démo à partir d'une bdd modèle à laquelle on doit pouvoir se connecter.

Les étapes de ce script sont les suivantes :
  - Dump SQL de la bdd modèle (pg_dump).
  - Lancement d'une bdd SyGAL temporaire (à partir de l'image Docker 'sygal-db-image').
  - Exécution des scripts SQL de peuplement de la bdd SyGAL temporaire : import du dump puis élagage des données.
  - Génération du script SQL d'anonymisation des données de la bdd SyGAL temporaire (ligne de commande de SyGAL).
  - Anonymisation de la bdd SyGAL temporaire.
  - Dump SQL de la bdd SyGAL anonymisée (pg_dump).
  - Copie du dump SQL dans le répertoire cible.

**Attention, l'exécution de ce script peut durer jusqu'à 20 minutes.**


Utilisation
-----------

Le script peut être lancer de n'importe quel emplacement.

Il s'attend à trouver les variables d'environnement permettant de se connecter à la bdd modèle.

Exemple :

```bash
PGHOST=localhost \
PGDATABASE=sygal \
PGPORT=5401 \
PGUSER=ad_sygal \
PGPASSWORD=azerty \
bin/demo/update_demo.sh 
```

Un répertoire temporaire de travail sera créé par le script pour y mettre les différents artefacts générés
mais il est possible de spécifier un répertoire existant à utiliser.

Exemple :

```bash
PGHOST=localhost \
PGDATABASE=sygal \
PGPORT=5401 \
PGUSER=ad_sygal \
PGPASSWORD=azerty \
bin/demo/update_demo.sh --tmp /tmp/tmp.iiNxgqBUyK
```

Si le répertoire temporaire est spécifié et que certains artefacts résultant d'un précédent lancement y sont trouvés, 
certaines étapes seront sautées :
  - Dump SQL de la bdd modèle (pg_dump).
  - Exécution des scripts SQL de peuplement de la bdd SyGAL temporaire : import du dump puis élagage des données.
  - Génération du script SQL d'anonymisation des données de la bdd SyGAL temporaire (ligne de commande de SyGAL).
+191 −0
Original line number Diff line number Diff line
<?php
/**
 * Fichier de config locale, SANS INFORMATIONS SENSIBLES.
 */

namespace Application;

use Fichier\Command\Pdf\AjoutPdcShellCommandGs;
use Fichier\Command\Pdf\AjoutPdcShellCommandQpdf;
use Laminas\Log\Logger;

return [
    'sygal' => [
        'page_de_couverture' => [
            'template' => [
                // template .phtml
                'phtml_file_path' => APPLICATION_DIR . '/module/Depot/view/depot/depot/page-de-couverture/pagedecouverture.phtml',
                // feuille de styles
                'css_file_path' => APPLICATION_DIR . '/module/Depot/view/depot/depot/page-de-couverture/pagedecouverture.css',
            ],
        ],
        'archivabilite' => [
            'proxy' => [
                'enabled' => true,
                'proxy_host' => 'http://proxy.unicaen.fr',
                'proxy_port' => 3128,
            ],
        ],
        'depot_version_corrigee' => [
            'resaisir_autorisation_diffusion' => false,
            'resaisir_attestations' => false,
        ],
        'rapport' => [
            'page_de_couverture' => [
                'template' => [
                    // template .phtml
                    'phtml_file_path' => APPLICATION_DIR . '/module/Application/view/application/rapport/page-de-couverture/pagedecouverture.phtml',
                    // feuille de styles
                    'css_file_path' => APPLICATION_DIR . '/module/Application/view/application/rapport/page-de-couverture/pagedecouverture.css',
                ],
            ],
        ],
    ],

    'actualite' => [
        'actif' => false,
        'flux' => "https://www.normandie-univ.fr/feed/?post_type=post&cat=406,448,472",
    ],

    'offre-these' => [
        'actif' => true,
    ],

    'import-api' => [
        // cf. secret.local.php
    ],

    'import' => [
        // cf. secret.local.php
    ],

    'psr_log' => [
        'inscription_resource_logger' => [
            'writers' => [
                'stream' => [
                    'name' => 'stream',
                    'priority' => 1,
                    'options' => [
                        'stream' => '/var/log/sygal.inscription_resource_logger.log',
                        'filters' => Logger::DEBUG,
                    ],
                ],
            ],
        ],
    ],

    'doctrine' => [
        // cf. secret.local.php
    ],

    'cli_config' => [
        // cf. secret.local.php
    ],

    'public_files' => [
        'cache_enabled' => false,
    ],

    'unicaen-shell' => [
        'commands' => [
            AjoutPdcShellCommandGs::class => [
                'executable' => '/usr/bin/gs',
            ],
            AjoutPdcShellCommandQpdf::class => [
                'executable' => '/usr/bin/qpdf',
            ],
        ],
    ],

    'unicaen-app' => [
        'app_infos' => [
            'mentionsLegales'        => "http://www.unicaen.fr/acces-direct/mentions-legales/",
            'informatiqueEtLibertes' => "http://www.unicaen.fr/acces-direct/informatique-et-libertes/",
        ],
        'mail' => [
            // cf. secret.local.php
            'do_not_send' => false,
        ],
        'ldap' => [
            // cf. secret.local.php
        ],
        'maintenance' => [
            // cf. z.maintenance.local.php
        ],
    ],

    'unicaen-ldap' => [
        // pas de LDAP
    ],

    'unicaen-auth' => [
        'shib' => [
            'order' => 1,
            'enabled' => true,
            'description' =>
                "<p><span class='glyphicon glyphicon-info-sign'></span> Cliquez sur le bouton ci-dessous pour accéder à l'authentification via la fédération d'identité.</p>" .
                "<p><strong>Attention !</strong> Si vous possédez à la fois un compte Étudiant et un compte Personnel, vous devrez utiliser " .
                "votre compte <em>Étudiant</em> pour vous authentifier...</p>",
            'simulate' => [
                // cf. secret.local.php
            ],
            'aliases' => [
                // cf. secret.local.php
            ],
            'required_attributes' => [
                // cf. secret.local.php
            ],
            'logout_url' => '/Shibboleth.sso/Logout?return=', // NB: '?return=' semble obligatoire!
            /**
             * Configuration de la stratégie d'extraction (parmi les données d'authentification shibboleth)
             * de l'identifiant à utiliser pour rechercher l'Individu correspondant à l'utilisateur qui vient de
             * s'authentifier.
             */
            'shib_user_id_extractor' => [
                'default' => [
                    ['name' => 'supannEtuId'],
                    ['name' => 'supannEmpId'],
                ],
            ],
        ],
        'local' => [
            'order' => 2,
            'description' => "Utilisez ce formulaire si vous possédez un compte LDAP établissement ou un compte local dédié à l'application.",
            'ldap' => [
                'enabled' => true,
                'log_failures' => true, // activation ou non des logs (via error_log par défaut) à propos des échecs d'authentification LDAP.
            ],
            'db' => [
                'enabled' => true, // doit être activé pour que l'usurpation fonctionne (cf. Authentication/Storage/Db::read()) :-/ todo: faire mieux
            ],
        ],
        'cas' => [
            'order' => 3,
            'enabled' => false,
            'connection' => [
                // pas de CAS
            ]
        ],

        'usurpation_allowed_usernames' => [
            // cf. secret.local.php
        ],
    ],

    'navigation'   => [
        'default' => [
            'home' => [
                'pages' => [
                    'etab' => [
                        'label' => _("Normandie Université"),
                        'title' => _("Page d'accueil du site de Normandie Université"),
                        'uri'   => 'http://www.normandie-univ.fr',
                        'class' => 'logo-etablissement',
                        // NB: Spécifier la classe 'logo-etablissement' sur la page de navigation provoque le "remplacement"
                        //     du label du lien par l'image 'public/logo-etablissement.png' (à créer).
                    ],
                ],
            ],
        ],
    ],
];
+90 −0
Original line number Diff line number Diff line
<?php
/**
 * Fichier de config locale, AVEC INFORMATIONS SENSIBLES.
 */

namespace Application;

use Laminas\Mail\Transport\Smtp;

return [

    'import' => [
        'connections' => [],
        'imports' => [],
        'synchros' => [],
    ],

    'doctrine' => [
        'connection' => [
            'orm_default' => [
                'params' => [
                    'host' => '{DB_HOST}',          //
                    'port' => '{DB_PORT}',          //
                    'dbname' => '{DB_NAME}',        // remplacés par le script sh
                    'user' => '{DB_USER}',          //
                    'password' => '{DB_PASSWORD}',  //
                ],
            ],
        ],
    ],

    'cli_config' => [
        'scheme' => 'https',
        'domain' => 'localhost:8443',
    ],

    'unicaen-app' => [
        'mail' => [
            'transport' => Smtp::class,
            'transport_options' => [
                'host' => 'smtp.domain.fr',
                'port' => 25,
            ],
            'from' => 'ne_pas_repondre@etablissement-demo.fr',
            'redirect_to' => ['e.mail@etablissement-demo.fr'],
        ],
        /**
         * Paramètres de fonctionnement LDAP.
         */
        'ldap' => [
            'connection' => [
                'default' => [
                    'params' => [
                        // pas de LDAP
                    ]
                ]
            ]
        ],

        /**
         * Paramétrage pour utilisation pour autorisation ou non à la connexion à
         * une app de l'exterieur de l'établissement.
         */
        'hostlocalization' => [
            'activated' => false,
            'proxies' => [
                //xxx.xx.xx.xxx
            ],
            'reverse-proxies' => [
                //xxx.xx.xx.xxx
            ],
            'masque-ip' => '',
        ],
    ],

    'unicaen-auth' => [
        'shib' => [],
        'usurpation_allowed_usernames' => [],
    ],

    'liste-diffusion' => [
        'email_domain' => 'liste.etablissement-demo.fr',
        'sympa' => [
            'url' => 'https://liste.etablissement-demo.fr',
        ],
        'proprietaires' => [
            'e.mail@etablissement-demo.fr' => "HOCHON Paule",
        ],
    ],
];
Loading