Commit 6a5125a3 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Doc pour créer/lancer une bdd à partir d'un dump SQL

parent 2fc5d1f4
Pipeline #11733 passed with stage
in 4 seconds
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`.
# 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 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. pour l'application ESUP-SyGAL.
## Lancement de la base de données Lancement de la base de données
-------------------------------
### Sans `docker-compose` ### Sans `docker-compose`
...@@ -23,25 +25,32 @@ sygal-db-image ...@@ -23,25 +25,32 @@ sygal-db-image
``` ```
Remarques : Remarques :
- Le montage `$PWD/data/db:/var/lib/postgresql/data` permet de spécifier un répertoire dans lequel sera persistée - Les variables d'environnement `POSTGRES_*` spécifient le super-utilisateur à créer
la base de données. (cf. https://registry.hub.docker.com/_/postgres).
Si aucune base n'est déjà persistée, le script `/initdb.sh` est lancé automatiquement - Les variables d'environnement `SYGAL_*` spécifient la base de données et l'utilisateur SyGAL à créer.
au démarrage du container pour lancer les scripts SQL situés dans le répertoire `/sql` : - Le montage `$PWD/data/db:/var/lib/postgresql/data` permet de spécifier un répertoire dans lequel sera persistée
- Pour commencer, ce sont les scripts SQL placés dans le sous-répertoire `admin` qui sont exécutés la base de données.
**avec le super-user identifié par les variables d'environnement `POSTGRES_USER` et `POSTGRES_PASSWORD`**. Si aucune base n'est déjà persistée, le script `/initdb.sh` est lancé automatiquement
- Ce sont ensuite les autres scripts qui sont exécutés avec le user identifié par les variables d'environnement au démarrage du container pour exécuter les scripts SQL situés dans le répertoire `/sql` :
`SYGAL_USER` et `SYGAL_PASSWORD`. - Pour commencer, ce sont les scripts SQL placés dans le sous-répertoire `admin` qui sont exécutés
- Vous pouvez substituer les scripts SQL par les vôtres en remplaçant le montage dans `/sql` **avec le super-user identifié par les variables d'environnement `POSTGRES_USER` et `POSTGRES_PASSWORD`**.
(exemple : `--volume $PWD/mes/scripts/sql/:/sql`). La présence d'un sous-répertoire `admin` n'est pas obligatoire. - 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` ### Avec `docker-compose`
Si vous utilisez `docker-compose`, les variables d'environnement `POSTGRES_*` et `SYGAL_*`
sont spécifiées "en dur" dans le fichier `docker-compose.yml`.
```bash ```bash
docker-compose up docker-compose up
``` ```
## Utilisation de l'image dans un `docker-compose.yml` Utilisation de l'image dans un `docker-compose.yml`
---------------------------------------------------
```yml ```yml
version: '2.2' version: '2.2'
...@@ -64,7 +73,8 @@ services: ...@@ -64,7 +73,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 : - Facultatif : vous pouvez éventuellement récupérer les dernières versions des scripts SQL comme ceci :
......
#!/bin/bash #!/bin/bash
set -e set -e
SQL_DIR="/sql"
## ##
## Lancement des scripts SQL présents dans le répertoire `/sql`. ## Lancement des scripts SQL présents dans le répertoire `/sql`.
## ##
...@@ -15,12 +17,13 @@ unset PGHOST PGPORT PGDATABASE PGUSER PGPASSWORD # précaution ...@@ -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`. # 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`. # 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 if [ -d "${SQL_DIR}/admin" ]; then
cd /sql/admin cd ${SQL_DIR}/admin
export \ export \
PGDATABASE=$POSTGRES_DB \ PGDATABASE=$POSTGRES_DB \
PGUSER=$POSTGRES_USER \ PGUSER=$POSTGRES_USER \
ON_ERROR_STOP=1 PGPASSWORD=$POSTGRES_PASSWORD \
ON_ERROR_STOP=1
for f in *.sql; do for f in *.sql; do
psql \ psql \
-v "dbname=${SYGAL_DB}" \ -v "dbname=${SYGAL_DB}" \
...@@ -34,11 +37,12 @@ fi ...@@ -34,11 +37,12 @@ fi
# Exécution de tous les scripts .sql présents dans le répertoire `/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`. # 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 \ export \
PGDATABASE=$SYGAL_DB \ ON_ERROR_STOP=1 \
PGUSER=$SYGAL_USER \ PGDATABASE=$SYGAL_DB \
PGPASSWORD=$SYGAL_PASSWORD PGUSER=$SYGAL_USER \
PGPASSWORD=$SYGAL_PASSWORD
for f in *.sql; do for f in *.sql; do
psql \ psql \
-v "dbuser=${SYGAL_USER}" \ -v "dbuser=${SYGAL_USER}" \
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment