Commit 21bd4e1b authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

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

parent 2fc5d1f4
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
data/
tmp/

DUMP.md

0 → 100644
+38 −0
Original line number Diff line number Diff line
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`.
+33 −22
Original line number Diff line number Diff line
# 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
-------------------------------

### Avec `docker-compose`

Si vous utilisez la commande suivante, le super-utilisateur, le nom de la base de données et de l'utilisateur 
SyGAL qui seront créés sont spécifiés "en dur" dans le fichier [`docker-compose.yml`](docker-compose.yml)
(variables d'environnement `POSTGRES_*` et `SYGAL_*`) :

```bash
docker-compose up
```

### Sans `docker-compose`

@@ -23,10 +35,13 @@ sygal-db-image
```

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 
    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 
@@ -34,14 +49,9 @@ Remarques :
  - 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`

```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 +74,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 :

+1 −1
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@ 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
+13 −9
Original line number Diff line number Diff line
#!/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,8 +37,9 @@ 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 \
ON_ERROR_STOP=1 \
PGDATABASE=$SYGAL_DB \
PGUSER=$SYGAL_USER \
PGPASSWORD=$SYGAL_PASSWORD