Commit 3f457cd4 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Améliorations

parent 93d3f714
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
.idea/
tmp/
 No newline at end of file
+5 −6
Original line number Diff line number Diff line
@@ -10,11 +10,10 @@ RUN localedef -i fr_FR -c -f UTF-8 -A /usr/share/locale/locale.alias fr_FR.UTF-8

ENV LANG fr_FR.utf8

# Copie du script de création de la base 'sygal' et du user 'ad_sygal'
# Copie du script de création de la base de données
# (lancé automatiquement ssi le répertoire de persistance de la base de données est vide).
COPY docker/init_user_db.sh /docker-entrypoint-initdb.d/
COPY docker/initdb.sh /docker-entrypoint-initdb.d/

# Copie des scripts SQL de création des objets de la base de données 'sygal'
# (le script `init_user_db.sh` lancera tous les scripts .sql présents dans `/sql`).
# NB : il est possible de substituer ces scripts par les vôtres grâce à un volume.
COPY docker/sql/*.sql /sql/
# Copie des scripts SQL de création de la base de données (cf. script `initdb.sh`).
# NB : il demeure possible de substituer ces scripts par les vôtres grâce à un montage de volume.
COPY docker/sql/ /sql/
+55 −50
Original line number Diff line number Diff line
# Sygal Db Image
# SyGAL Database Image

## Script `docker/init_user_db.sh`
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.

Ce script est lancé automatiquement au démarrage du container pour...
- créer une base de données dont le nom est fourni par la variable d'environnement `SYGAL_DB` ;
- créer un user dont le nom est fourni par la variable d'environnement `SYGAL_USER`, 
  et le mot de passe par la variable `SYGAL_PASSWORD` ;
- lancer tous les scripts .sql présents dans le répertoire `/sql` de l'image.

## Répertoire `docker/sql` => 
## Lancement de la base de données

Il contient les scripts SQL ordonnés pour la création et le peuplement des objets de la base de données 'sygal',
lancés par le script `docker/init_user_db.sh`.

Si vous voulez substituer ces scripts SQL par les vôtres, vous pouvez spécifier un montage du genre
`--volume $PWD/mes/scripts/sql/:/sql` au lancement du container.

## Construction de l'image (build)

```bash
docker build \
--rm \
-t sygal-db-image \
.
```

**Attention !** Si vous êtes derrière un proxy, vous pouvez transmettre les valeurs courantes de vos variables d'environement `*_proxy` 
à la commande `build` avec des `--build-arg` additionnels, exemple :
```bash
docker build \
--rm \
--build-arg http_proxy \
--build-arg https_proxy \
--build-arg no_proxy \
-t sygal-db-image \
.
```

## Lancement (run)

Exemple :
### Sans `docker-compose`

```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 \
--env SYGAL_DB=sygal \
--env SYGAL_USER=ad_sygal \
--env SYGAL_PASSWORD=azerty \
--publish 5432:5432 \
--volume $PWD/docker/sql/:/sql \
--volume $PWD/data/db:/var/lib/postgresql/data \
--name sygal-db-container \
sygal-db-image
```

Remarques :
- Le montage `$PWD/data/db:/var/lib/postgresql/data` permet de persister la base de données.
- Si vous voulez substituer les scripts SQL de création/peuplement des objets de la base de données par les vôtres, 
  ajoutez un montage du genre `--volume $PWD/mes/scripts/sql/:/sql`.
- 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. 

## Utilisation dans un `docker-compose.yml`
### Avec `docker-compose`

```bash
docker-compose up
```


## Utilisation de l'image dans un `docker-compose.yml`

```yml
version: '2.2'
services:
  sygal-db:
@@ -75,8 +57,31 @@ 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
      - ./mon/emplacement/sql/:/sql                   # répertoire des scripts de création de la bdd
      - ./mon/emplacement/db:/var/lib/postgresql/data # répertoire où la bdd est persistée
```


## Build de l'image

- Facultatif : vous pouvez éventuellement récupérer les dernières versions des scripts SQL comme ceci :

```bash
./update_sql.sh
```

NB : Ce script se termine par un git status permettant de connaître les scripts SQL ayant changé.

- Build

```bash
docker build \
--rm \
-t sygal-db-image \
.
```

**Attention !** Si vous êtes derrière un proxy, vous pouvez transmettre les valeurs courantes de vos variables d'environement `*_proxy`
à la commande `build` avec des `--build-arg` additionnels.

docker/.gitignore

deleted100644 → 0
+0 −1
Original line number Diff line number Diff line
tmp/
+22 −19
Original line number Diff line number Diff line
#!/bin/bash
set -e

##
## Lancement des scripts SQL présents dans le répertoire `/sql`.
##

unset PGHOST PGPORT PGDATABASE PGUSER PGPASSWORD # précaution

#echo "SYGAL_DB = $SYGAL_DB"
@@ -8,38 +12,37 @@ unset PGHOST PGPORT PGDATABASE PGUSER PGPASSWORD # précaution
#echo "SYGAL_PASSWORD = $SYGAL_PASSWORD"

#
# Création de la base 'sygal' et du user 'ad_sygal'.
# 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
  export \
    PGDATABASE=$POSTGRES_DB \
    PGUSER=$POSTGRES_USER \
    ON_ERROR_STOP=1
psql <<EOF
create database $SYGAL_DB with ENCODING = 'UTF-8';
create user $SYGAL_USER with encrypted password '$SYGAL_PASSWORD' NOSUPERUSER NOCREATEDB;
grant all privileges on database $SYGAL_DB to $SYGAL_USER;
EOF
  for f in *.sql; do
    psql \
      -v "dbname=${SYGAL_DB}" \
      -v "dbuser=${SYGAL_USER}" \
      -v "dbpassword='${SYGAL_PASSWORD}'" \
      -f $f
  done
fi

#
# Création d'objets divers dans la base 'sygal'.
# NB : il est possible de substituer ces scripts par les vôtres grâce à un volume monter dans `/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`.
#
cd /sql
export \
  PGDATABASE=$SYGAL_DB \
  PGUSER=$SYGAL_USER \
  PGPASSWORD=$SYGAL_PASSWORD
psql <<EOF
CREATE EXTENSION unaccent WITH SCHEMA public;
COMMENT ON EXTENSION unaccent IS 'text search dictionary that removes accents';
EOF
#
# Exécution de tous les scripts .sql présents dans le répertoire `/sql`
# pour créer/peupler les objets de la base 'sygal'.
# NB : il est possible de substituer ces scripts par les vôtres grâce à un volume à monter dans `/sql`.
#
cd /sql
for f in *.sql; do
  psql -f $f
  psql \
    -v "dbuser=${SYGAL_USER}" \
    -f $f
done

unset PGHOST PGPORT PGDATABASE PGUSER PGPASSWORD # précaution
Loading