From 21bd4e1bc5c1386dce0a69a95f1a8349d0454593 Mon Sep 17 00:00:00 2001 From: Bertrand GAUTHIER <bertrand.gauthier@unicaen.fr> Date: Wed, 8 Dec 2021 08:23:06 +0100 Subject: [PATCH] =?UTF-8?q?Doc=20pour=20cr=C3=A9er/lancer=20une=20bdd=20?= =?UTF-8?q?=C3=A0=20partir=20d'un=20dump=20SQL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .dockerignore | 1 + DUMP.md | 38 ++++++++++++++++++++++++++++++++ README.md | 55 +++++++++++++++++++++++++++------------------- docker-compose.yml | 2 +- docker/initdb.sh | 22 +++++++++++-------- 5 files changed, 86 insertions(+), 32 deletions(-) create mode 100644 DUMP.md diff --git a/.dockerignore b/.dockerignore index 8fce603..ef3c045 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1 +1,2 @@ data/ +tmp/ diff --git a/DUMP.md b/DUMP.md new file mode 100644 index 0000000..503666a --- /dev/null +++ b/DUMP.md @@ -0,0 +1,38 @@ +Créer/lancer une bdd à partir d'un dump SQL +=========================================== + +- Mettez le fichier de dump SQL dans le répertoire `./tmp/sql` et assurez-vous qu'il a l'extension `.sql`. + +- Trouvez dans le dump le nom du user attendu : + +```bash +grep -Ens "OWNER TO" ./tmp/sql/* | head -n 1 +``` + +- Créez le sous-répertoire `./tmp/sql/admin` et copiez-y le script de création de la bdd : + +```bash +mkdir -p ./tmp/sql/admin +cp ./docker/sql/admin/01_create_db_user.sql ./tmp/sql/admin/ +``` + +- Lancer le container en adaptant `--env SYGAL_USER=ad_sygal` au user trouvé précédemment : + +```bash +docker run \ +--rm \ +--env POSTGRES_USER=postgres \ +--env POSTGRES_PASSWORD=admin \ +--env SYGAL_DB=sygal \ +--env SYGAL_USER=ad_sygal \ +--env SYGAL_PASSWORD=azerty \ +--publish 5432:5432 \ +--volume $PWD/tmp/sql/:/sql \ +--volume $PWD/tmp/db:/var/lib/postgresql/data \ +sygal-db-image +``` + +Au 1er lancement, si aucune bdd n'est déjà persistée dans le répertoire `./tmp/db`, les scripts SQL sont exécutés : +la bdd est créée. +Aux lancements suivants, la bdd existe dans le répertoire donc les scripts ne sont pas exécutés. +Pour que la bdd soit re-créée, il faut supprimer le répertoire `./tmp/db`. diff --git a/README.md b/README.md index 9b521a1..6b11a54 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,22 @@ -# SyGAL Database Image +SyGAL Database Image +==================== Ce projet est une image Docker rassemblant le nécessaire pour créer (le cas échéant) et de lancer une base de données pour l'application ESUP-SyGAL. -## Lancement de la base de données +Lancement de la base de données +------------------------------- + +### Avec `docker-compose` + +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_*`) : + +```bash +docker-compose up +``` ### Sans `docker-compose` @@ -23,25 +35,23 @@ sygal-db-image ``` Remarques : -- Le montage `$PWD/data/db:/var/lib/postgresql/data` permet de spécifier un répertoire dans lequel sera persistée - la base de données. - Si aucune base n'est déjà persistée, le script `/initdb.sh` est lancé automatiquement - au démarrage du container pour lancer les scripts SQL situés dans le répertoire `/sql` : - - Pour commencer, ce sont les scripts SQL placés dans le sous-répertoire `admin` qui sont exécutés - **avec le super-user identifié par les variables d'environnement `POSTGRES_USER` et `POSTGRES_PASSWORD`**. - - Ce sont ensuite les autres scripts qui sont exécutés avec le user identifié par les variables d'environnement - `SYGAL_USER` et `SYGAL_PASSWORD`. -- Vous pouvez substituer les scripts SQL par les vôtres en remplaçant le montage dans `/sql` - (exemple : `--volume $PWD/mes/scripts/sql/:/sql`). La présence d'un sous-répertoire `admin` n'est pas obligatoire. - -### Avec `docker-compose` - -```bash -docker-compose up -``` - - -## Utilisation de l'image dans un `docker-compose.yml` + - Les variables d'environnement `POSTGRES_*` spécifient le super-utilisateur à créer + (cf. https://registry.hub.docker.com/_/postgres). + - Les variables d'environnement `SYGAL_*` spécifient la base de données et l'utilisateur SyGAL à créer. + - Le montage `$PWD/data/db:/var/lib/postgresql/data` permet de spécifier un répertoire dans lequel sera persistée + la base de données. + Si aucune base n'est déjà persistée, le script `/initdb.sh` est lancé automatiquement + au démarrage du container pour exécuter les scripts SQL situés dans le répertoire `/sql` : + - Pour commencer, ce sont les scripts SQL placés dans le sous-répertoire `admin` qui sont exécutés + **avec le super-user identifié par les variables d'environnement `POSTGRES_USER` et `POSTGRES_PASSWORD`**. + - Ce sont ensuite les autres scripts qui sont exécutés avec le user identifié par les variables d'environnement + `SYGAL_USER` et `SYGAL_PASSWORD`. + - Vous pouvez substituer les scripts SQL par les vôtres en remplaçant le montage dans `/sql` + (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` +--------------------------------------------------- ```yml version: '2.2' @@ -64,7 +74,8 @@ services: ``` -## Build de l'image +Build de l'image +---------------- - Facultatif : vous pouvez éventuellement récupérer les dernières versions des scripts SQL comme ceci : diff --git a/docker-compose.yml b/docker-compose.yml index 716463a..707f258 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -14,7 +14,7 @@ services: SYGAL_USER: ad_sygal SYGAL_PASSWORD: azerty ports: - - 5432:5432 + - "5432:5432" volumes: #- ./docker/db/sql/:/sql # répertoire des scripts de création de la bdd - ./data/db:/var/lib/postgresql/data # répertoire de où la bdd est persistée diff --git a/docker/initdb.sh b/docker/initdb.sh index 3ccf930..263e873 100755 --- a/docker/initdb.sh +++ b/docker/initdb.sh @@ -1,6 +1,8 @@ #!/bin/bash set -e +SQL_DIR="/sql" + ## ## Lancement des scripts SQL présents dans le répertoire `/sql`. ## @@ -15,12 +17,13 @@ unset PGHOST PGPORT PGDATABASE PGUSER PGPASSWORD # précaution # Exécution EN TANT QUE SUPER-USER de tous les scripts .sql présents dans le répertoire `/sql/admin`. # NB : il est possible de substituer ces scripts par les vôtres grâce à un volume à monter dans `/sql/admin`. # -if [ -d "/sql/admin" ]; then - cd /sql/admin +if [ -d "${SQL_DIR}/admin" ]; then + cd ${SQL_DIR}/admin export \ - PGDATABASE=$POSTGRES_DB \ - PGUSER=$POSTGRES_USER \ - ON_ERROR_STOP=1 + PGDATABASE=$POSTGRES_DB \ + PGUSER=$POSTGRES_USER \ + PGPASSWORD=$POSTGRES_PASSWORD \ + ON_ERROR_STOP=1 for f in *.sql; do psql \ -v "dbname=${SYGAL_DB}" \ @@ -34,11 +37,12 @@ fi # Exécution de tous les scripts .sql présents dans le répertoire `/sql`. # NB : il est possible de substituer ces scripts par les vôtres grâce à un volume à monter dans `/sql`. # -cd /sql +cd ${SQL_DIR} export \ - PGDATABASE=$SYGAL_DB \ - PGUSER=$SYGAL_USER \ - PGPASSWORD=$SYGAL_PASSWORD +ON_ERROR_STOP=1 \ +PGDATABASE=$SYGAL_DB \ +PGUSER=$SYGAL_USER \ +PGPASSWORD=$SYGAL_PASSWORD for f in *.sql; do psql \ -v "dbuser=${SYGAL_USER}" \ -- GitLab