From f2a96da3f76884044528ae2127e5cf10bc5201a1 Mon Sep 17 00:00:00 2001
From: Bertrand GAUTHIER <bertrand.gauthier@unicaen.fr>
Date: Thu, 15 Apr 2021 16:32:22 +0200
Subject: [PATCH] =?UTF-8?q?Am=C3=A9lioration=20de=20la=20subsituabilit?=
 =?UTF-8?q?=C3=A9=20des=20scripts=20SQL=20de=20cr=C3=A9ation/peuplement=20?=
 =?UTF-8?q?des=20objets=20de=20la=20bdd?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .dockerignore                    |  1 +
 Dockerfile                       |  7 ++++--
 README.md                        | 23 ++++++++++++++-----
 docker/init_user_db.sh           | 38 +++++++++++++++++++++-----------
 docker/sql/01_create_db_user.sql | 10 ---------
 5 files changed, 49 insertions(+), 30 deletions(-)
 create mode 100644 .dockerignore
 delete mode 100644 docker/sql/01_create_db_user.sql

diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000..8fce603
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1 @@
+data/
diff --git a/Dockerfile b/Dockerfile
index 0088fba..8df97b6 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -10,8 +10,11 @@ RUN localedef -i fr_FR -c -f UTF-8 -A /usr/share/locale/locale.alias fr_FR.UTF-8
 
 ENV LANG fr_FR.utf8
 
-# Script d'initialisation de la bdd, lancé automatiquement (ssi le répertoire `data/db` est vide).
+# Copie du script de création de la base 'sygal' et du user 'ad_sygal'
+# (lancé automatiquement ssi le répertoire de persistance de la base de données est vide).
 COPY docker/init_user_db.sh /docker-entrypoint-initdb.d/
 
-# Copie des scripts SQL de création de la bdd, lancés par le script `init_user_db.sh`.
+# Copie des scripts SQL de création des objets de la base de données 'sygal'
+# (le script `init_user_db.sh` lancera tous les scripts .sql présents dans `/sql`).
+# NB : il est possible de substituer ces scripts par les vôtres grâce à un volume.
 COPY docker/sql/*.sql /sql/
diff --git a/README.md b/README.md
index ac2a1fb..549e46f 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,21 @@
 # Sygal Db Image
 
-## Construction de l'image (build)
+## Script `docker/init_user_db.sh`
+
+Ce script est monté pour être lancé automatiquement au démarrage du container pour...
+- créer une base de données `sygal`,
+- créer le user `ad_sygal`,
+- lancer tous les scripts .sql présents dans le répertoire `/sql` de l'image.
+
+## Répertoire `docker/sql` => 
 
-Construisez l'image pour la version de PHP désirée... 
+Il contient les scripts SQL ordonnés pour la création et le peuplement des objets de la base de données 'sygal',
+lancés par le script `docker/init_user_db.sh`.
+
+Si vous voulez substituer ces scripts SQL par les vôtres, vous pouvez spécifier un montage du genre
+`--volume $PWD/mes/scripts/sql/:/sql` au lancement du container.
+
+## Construction de l'image (build)
 
 ```bash
 docker build \
@@ -33,15 +46,14 @@ docker run \
 --env POSTGRES_PASSWORD=admin \
 --publish 5432:5432 \
 --volume $PWD/data/db:/var/lib/postgresql/data \
---volume $PWD/docker/db/sql/:/sql \
 --name sygal-db-container \
 sygal-db-image
 ```
 
 Remarques :
 - Le montage `./data/db:/var/lib/postgresql/data` permet de persister la base de données.
-- Le montage `./docker/db/sql/:/sql` vous permet de remplacer les scripts SQL
-  de création/peuplement des objets de la base de données par les vôtres le cas échéant.
+- Si vous voulez substituer les scripts SQL de création/peuplement des objets de la base de données par les vôtres, 
+  ajoutez un montage du genre `--volume $PWD/mes/scripts/sql/:/sql`.
   
 ## Utilisation dans un `docker-compose.yml`
 
@@ -53,6 +65,7 @@ services:
     container_name: sygal-db-container
     restart: always
     environment:
+      POSTGRES_USER: postgres
       POSTGRES_PASSWORD: admin
     ports:
       - 5432:5432
diff --git a/docker/init_user_db.sh b/docker/init_user_db.sh
index d2d1331..8de21e5 100755
--- a/docker/init_user_db.sh
+++ b/docker/init_user_db.sh
@@ -1,29 +1,41 @@
 #!/bin/bash
 set -e
 
-cd /sql # volume
-
 unset PGHOST PGPORT PGDATABASE PGUSER PGPASSWORD # précaution
 
+#
+# Création de la base 'sygal' et du user 'ad_sygal'.
+#
 export \
   PGDATABASE=$POSTGRES_DB \
   PGUSER=$POSTGRES_USER \
   ON_ERROR_STOP=1
+psql <<EOF
+create database sygal with ENCODING = 'UTF-8';
+create user ad_sygal with encrypted password 'azerty' NOSUPERUSER NOCREATEDB;
+grant all privileges on database sygal to ad_sygal;
+EOF
 
-psql -f 01_create_db_user.sql
-psql -c "alter user ad_sygal with encrypted password 'azerty'"
-
+#
+# Création d'objets divers dans la base 'sygal'.
+# NB : il est possible de substituer ces scripts par les vôtres grâce à un volume monter dans `/sql`.
+#
 export \
   PGDATABASE=sygal \
   PGUSER=ad_sygal \
   PGPASSWORD=azerty
-
-psql -f 02_create_schema.sql
-psql -f 03_insert_bootstrap_data.sql
-psql -f 04_insert_data.sql
-psql -f 05_create_constraints.sql
-psql -f 06_create_comue.sql
-psql -f 07_init.sql
-psql -f 08_create_fixture.sql
+psql <<EOF
+CREATE EXTENSION unaccent WITH SCHEMA public;
+COMMENT ON EXTENSION unaccent IS 'text search dictionary that removes accents';
+EOF
+#
+# Exécution de tous les scripts .sql présents dans le répertoire `/sql`
+# pour créer/peupler les objets de la base 'sygal'.
+# NB : il est possible de substituer ces scripts par les vôtres grâce à un volume monter dans `/sql`.
+#
+cd /sql
+for f in *.sql; do
+  psql -f $f
+done
 
 unset PGHOST PGPORT PGDATABASE PGUSER PGPASSWORD # précaution
diff --git a/docker/sql/01_create_db_user.sql b/docker/sql/01_create_db_user.sql
deleted file mode 100644
index 6e9fb4b..0000000
--- a/docker/sql/01_create_db_user.sql
+++ /dev/null
@@ -1,10 +0,0 @@
---
--- DATABASE, USER, ETC.
---
-
--- Databases
-create database sygal with ENCODING = 'UTF-8';
--- Users
-create user ad_sygal with encrypted password 'MOT_DE_PASSE_PAR_DEFAUT' NOSUPERUSER NOCREATEDB;
--- Grants
-grant all privileges on database sygal to ad_sygal;
-- 
GitLab