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