Skip to content
Snippets Groups Projects
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
No related branches found
No related tags found
No related merge requests found
Pipeline #11733 passed
data/ data/
tmp/
DUMP.md 0 → 100644
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,10 +25,13 @@ sygal-db-image ...@@ -23,10 +25,13 @@ sygal-db-image
``` ```
Remarques : Remarques :
- 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 - 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. la base de données.
Si aucune base n'est déjà persistée, le script `/initdb.sh` est lancé automatiquement 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` : 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 - 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`**. **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 - Ce sont ensuite les autres scripts qui sont exécutés avec le user identifié par les variables d'environnement
...@@ -36,12 +41,16 @@ Remarques : ...@@ -36,12 +41,16 @@ Remarques :
### 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,11 +17,12 @@ unset PGHOST PGPORT PGDATABASE PGUSER PGPASSWORD # précaution ...@@ -15,11 +17,12 @@ 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 \
PGPASSWORD=$POSTGRES_PASSWORD \
ON_ERROR_STOP=1 ON_ERROR_STOP=1
for f in *.sql; do for f in *.sql; do
psql \ psql \
...@@ -34,8 +37,9 @@ fi ...@@ -34,8 +37,9 @@ 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 \
ON_ERROR_STOP=1 \
PGDATABASE=$SYGAL_DB \ PGDATABASE=$SYGAL_DB \
PGUSER=$SYGAL_USER \ PGUSER=$SYGAL_USER \
PGPASSWORD=$SYGAL_PASSWORD PGPASSWORD=$SYGAL_PASSWORD
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment