Loading .gitignore +1 −0 Original line number Diff line number Diff line .idea/ tmp/ No newline at end of file Dockerfile +5 −6 Original line number Diff line number Diff line Loading @@ -10,11 +10,10 @@ RUN localedef -i fr_FR -c -f UTF-8 -A /usr/share/locale/locale.alias fr_FR.UTF-8 ENV LANG fr_FR.utf8 # Copie du script de création de la base 'sygal' et du user 'ad_sygal' # 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/init_user_db.sh /docker-entrypoint-initdb.d/ COPY docker/initdb.sh /docker-entrypoint-initdb.d/ # 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/ # 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/ README.md +55 −50 Original line number Diff line number Diff line # Sygal Db Image # SyGAL Database Image ## Script `docker/init_user_db.sh` 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. Ce script est lancé automatiquement au démarrage du container pour... - créer une base de données dont le nom est fourni par la variable d'environnement `SYGAL_DB` ; - créer un user dont le nom est fourni par la variable d'environnement `SYGAL_USER`, et le mot de passe par la variable `SYGAL_PASSWORD` ; - lancer tous les scripts .sql présents dans le répertoire `/sql` de l'image. ## Répertoire `docker/sql` => ## Lancement de la base de données 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 \ --rm \ -t sygal-db-image \ . ``` **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, exemple : ```bash docker build \ --rm \ --build-arg http_proxy \ --build-arg https_proxy \ --build-arg no_proxy \ -t sygal-db-image \ . ``` ## Lancement (run) Exemple : ### Sans `docker-compose` ```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 \ --env SYGAL_DB=sygal \ --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 \ --name sygal-db-container \ sygal-db-image ``` Remarques : - Le montage `$PWD/data/db:/var/lib/postgresql/data` permet de persister la base de données. - 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`. - 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. ## Utilisation dans un `docker-compose.yml` ### Avec `docker-compose` ```bash docker-compose up ``` ## Utilisation de l'image dans un `docker-compose.yml` ```yml version: '2.2' services: sygal-db: Loading @@ -75,8 +57,31 @@ 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 - ./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 - Facultatif : vous pouvez éventuellement récupérer les dernières versions des scripts SQL comme ceci : ```bash ./update_sql.sh ``` NB : Ce script se termine par un git status permettant de connaître les scripts SQL ayant changé. - Build ```bash docker build \ --rm \ -t sygal-db-image \ . ``` **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. docker/.gitignoredeleted 100644 → 0 +0 −1 Original line number Diff line number Diff line tmp/ docker/init_user_db.sh→docker/initdb.sh +22 −19 Original line number Diff line number Diff line #!/bin/bash set -e ## ## Lancement des scripts SQL présents dans le répertoire `/sql`. ## unset PGHOST PGPORT PGDATABASE PGUSER PGPASSWORD # précaution #echo "SYGAL_DB = $SYGAL_DB" Loading @@ -8,38 +12,37 @@ unset PGHOST PGPORT PGDATABASE PGUSER PGPASSWORD # précaution #echo "SYGAL_PASSWORD = $SYGAL_PASSWORD" # # Création de la base 'sygal' et du user 'ad_sygal'. # 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 export \ PGDATABASE=$POSTGRES_DB \ PGUSER=$POSTGRES_USER \ ON_ERROR_STOP=1 psql <<EOF create database $SYGAL_DB with ENCODING = 'UTF-8'; create user $SYGAL_USER with encrypted password '$SYGAL_PASSWORD' NOSUPERUSER NOCREATEDB; grant all privileges on database $SYGAL_DB to $SYGAL_USER; EOF for f in *.sql; do psql \ -v "dbname=${SYGAL_DB}" \ -v "dbuser=${SYGAL_USER}" \ -v "dbpassword='${SYGAL_PASSWORD}'" \ -f $f done fi # # 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`. # 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 export \ PGDATABASE=$SYGAL_DB \ PGUSER=$SYGAL_USER \ PGPASSWORD=$SYGAL_PASSWORD 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 psql \ -v "dbuser=${SYGAL_USER}" \ -f $f done unset PGHOST PGPORT PGDATABASE PGUSER PGPASSWORD # précaution Loading
.gitignore +1 −0 Original line number Diff line number Diff line .idea/ tmp/ No newline at end of file
Dockerfile +5 −6 Original line number Diff line number Diff line Loading @@ -10,11 +10,10 @@ RUN localedef -i fr_FR -c -f UTF-8 -A /usr/share/locale/locale.alias fr_FR.UTF-8 ENV LANG fr_FR.utf8 # Copie du script de création de la base 'sygal' et du user 'ad_sygal' # 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/init_user_db.sh /docker-entrypoint-initdb.d/ COPY docker/initdb.sh /docker-entrypoint-initdb.d/ # 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/ # 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/
README.md +55 −50 Original line number Diff line number Diff line # Sygal Db Image # SyGAL Database Image ## Script `docker/init_user_db.sh` 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. Ce script est lancé automatiquement au démarrage du container pour... - créer une base de données dont le nom est fourni par la variable d'environnement `SYGAL_DB` ; - créer un user dont le nom est fourni par la variable d'environnement `SYGAL_USER`, et le mot de passe par la variable `SYGAL_PASSWORD` ; - lancer tous les scripts .sql présents dans le répertoire `/sql` de l'image. ## Répertoire `docker/sql` => ## Lancement de la base de données 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 \ --rm \ -t sygal-db-image \ . ``` **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, exemple : ```bash docker build \ --rm \ --build-arg http_proxy \ --build-arg https_proxy \ --build-arg no_proxy \ -t sygal-db-image \ . ``` ## Lancement (run) Exemple : ### Sans `docker-compose` ```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 \ --env SYGAL_DB=sygal \ --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 \ --name sygal-db-container \ sygal-db-image ``` Remarques : - Le montage `$PWD/data/db:/var/lib/postgresql/data` permet de persister la base de données. - 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`. - 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. ## Utilisation dans un `docker-compose.yml` ### Avec `docker-compose` ```bash docker-compose up ``` ## Utilisation de l'image dans un `docker-compose.yml` ```yml version: '2.2' services: sygal-db: Loading @@ -75,8 +57,31 @@ 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 - ./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 - Facultatif : vous pouvez éventuellement récupérer les dernières versions des scripts SQL comme ceci : ```bash ./update_sql.sh ``` NB : Ce script se termine par un git status permettant de connaître les scripts SQL ayant changé. - Build ```bash docker build \ --rm \ -t sygal-db-image \ . ``` **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.
docker/init_user_db.sh→docker/initdb.sh +22 −19 Original line number Diff line number Diff line #!/bin/bash set -e ## ## Lancement des scripts SQL présents dans le répertoire `/sql`. ## unset PGHOST PGPORT PGDATABASE PGUSER PGPASSWORD # précaution #echo "SYGAL_DB = $SYGAL_DB" Loading @@ -8,38 +12,37 @@ unset PGHOST PGPORT PGDATABASE PGUSER PGPASSWORD # précaution #echo "SYGAL_PASSWORD = $SYGAL_PASSWORD" # # Création de la base 'sygal' et du user 'ad_sygal'. # 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 export \ PGDATABASE=$POSTGRES_DB \ PGUSER=$POSTGRES_USER \ ON_ERROR_STOP=1 psql <<EOF create database $SYGAL_DB with ENCODING = 'UTF-8'; create user $SYGAL_USER with encrypted password '$SYGAL_PASSWORD' NOSUPERUSER NOCREATEDB; grant all privileges on database $SYGAL_DB to $SYGAL_USER; EOF for f in *.sql; do psql \ -v "dbname=${SYGAL_DB}" \ -v "dbuser=${SYGAL_USER}" \ -v "dbpassword='${SYGAL_PASSWORD}'" \ -f $f done fi # # 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`. # 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 export \ PGDATABASE=$SYGAL_DB \ PGUSER=$SYGAL_USER \ PGPASSWORD=$SYGAL_PASSWORD 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 psql \ -v "dbuser=${SYGAL_USER}" \ -f $f done unset PGHOST PGPORT PGDATABASE PGUSER PGPASSWORD # précaution