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
pour l'application ESUP-SyGAL.
## Lancement de la base de données
Lancement de la base de données
-------------------------------
### Sans `docker-compose`
......@@ -23,25 +25,32 @@ sygal-db-image
```
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
(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
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` :
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
**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`
- 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`
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
docker-compose up
```
## Utilisation de l'image dans un `docker-compose.yml`
Utilisation de l'image dans un `docker-compose.yml`
---------------------------------------------------
```yml
version: '2.2'
......@@ -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 :
......
#!/bin/bash
set -e
SQL_DIR="/sql"
##
## Lancement des scripts SQL présents dans le répertoire `/sql`.
##
......@@ -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`.
# 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
if [ -d "${SQL_DIR}/admin" ]; then
cd ${SQL_DIR}/admin
export \
PGDATABASE=$POSTGRES_DB \
PGUSER=$POSTGRES_USER \
PGPASSWORD=$POSTGRES_PASSWORD \
ON_ERROR_STOP=1
for f in *.sql; do
psql \
......@@ -34,11 +37,12 @@ fi
# 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
cd ${SQL_DIR}
export \
PGDATABASE=$SYGAL_DB \
PGUSER=$SYGAL_USER \
PGPASSWORD=$SYGAL_PASSWORD
ON_ERROR_STOP=1 \
PGDATABASE=$SYGAL_DB \
PGUSER=$SYGAL_USER \
PGPASSWORD=$SYGAL_PASSWORD
for f in *.sql; do
psql \
-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