Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
open-source
docker
sygal-db-image
Commits
6a5125a3
Commit
6a5125a3
authored
Dec 08, 2021
by
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
Changes
4
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
.dockerignore
View file @
6a5125a3
data/
tmp/
DUMP.md
0 → 100644
View file @
6a5125a3
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`
.
README.md
View file @
6a5125a3
# 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
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.
-
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 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`
(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 :
...
...
docker/initdb.sh
View file @
6a5125a3
#!/bin/bash
set
-e
SQL_DIR
=
"/sql"
##
## Lancement des scripts SQL présents dans le répertoire `/sql`.
##
...
...
@@ -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`.
# 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
\
ON_ERROR_STOP
=
1
PGDATABASE
=
$POSTGRES_DB
\
PGUSER
=
$POSTGRES_USER
\
PGPASSWORD
=
$POSTGRES_PASSWORD
\
ON_ERROR_STOP
=
1
for
f
in
*
.sql
;
do
psql
\
-v
"dbname=
${
SYGAL_DB
}
"
\
...
...
@@ -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
}
"
\
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment