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

Améliorations

parent 93d3f714
.idea/
tmp/
\ No newline at end of file
......@@ -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/
# 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`.
## Utilisation dans un `docker-compose.yml`
- 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.
### 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.
#!/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`.
#
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
if [ -d "/sql/admin" ]; then
cd /sql/admin
export \
PGDATABASE=$POSTGRES_DB \
PGUSER=$POSTGRES_USER \
ON_ERROR_STOP=1
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
This diff is collapsed.
......@@ -3,12 +3,12 @@
--
--
-- Sources de données SyGAL.
-- Sources de données ESUP-SyGAL.
--
delete from source where code = 'SYGAL::sygal'
;
insert into source (id, code, libelle, importable)
values (1, 'SYGAL::sygal', 'SyGAL', 0)
values (1, 'SYGAL::sygal', 'ESUP-SyGAL', false)
;
--
......@@ -17,7 +17,7 @@ values (1, 'SYGAL::sygal', 'SyGAL', 0)
delete from utilisateur where username = 'sygal-app'
;
insert into utilisateur (id, username, display_name, password)
values (1, 'sygal-app', 'Application SyGAL', 'ldap')
values (1, 'sygal-app', 'Application ESUP-SyGAL', 'ldap')
;
--
......@@ -26,10 +26,10 @@ values (1, 'sygal-app', 'Application SyGAL', 'ldap')
delete from role where source_code in ('ADMIN_TECH', 'OBSERV')
;
insert into role (id, code, libelle, source_code, source_id, role_id, these_dep, histo_createur_id, histo_modificateur_id)
values (1, 'ADMIN_TECH', 'Administrateur technique', 'ADMIN_TECH', 1, 'Administrateur technique', 0, 1, 1)
values (1, 'ADMIN_TECH', 'Administrateur technique', 'ADMIN_TECH', 1, 'Administrateur technique', false, 1, 1)
;
insert into role (id, code, libelle, role_id, source_code, source_id, these_dep, histo_createur_id, histo_modificateur_id)
values (2 /*241*/, 'OBSERV', 'Observateur', 'Observateur', 'OBSERV', 1, 0, 1, 1)
insert into role (id, code, libelle, source_code, source_id, role_id, these_dep, histo_createur_id, histo_modificateur_id)
values (2 /*241*/, 'OBSERV', 'Observateur', 'OBSERV', 1, 'Observateur', false, 1, 1)
;
-- drop sequence INDIVIDU_ID_SEQ;
......
This diff is collapsed.
--
-- PREPARATION des données insérées.
--
-- Suppression des données dont l'utilisateur créateur/modificateur n'existera pas dans la nouvelle base :
delete from soutenance_etat where histo_createur_id <> 1 or histo_modificateur_id <> 1; -- 1 = SyGAL
delete from soutenance_qualite where histo_createur_id <> 1 or histo_modificateur_id <> 1;
--
-- COMUE or not COMUE ?
-- COMUE éventuelle
--
-- NB : Ce script vous concerne uniquement si vous avez besoin de déclarer une structure particulière
-- pour votre COMUE.
-- NB : Ce script crée une COMUE *uniquement si* vous l'avez demandé dans la config de préparation des scripts.
--
insert into structure (id, source_code, sigle, libelle, type_structure_id, source_id, code, histo_createur_id, histo_modificateur_id)
......@@ -18,7 +17,7 @@ insert into etablissement (id, structure_id, domaine, source_id, source_code, es
select
nextval('etablissement_id_seq'), s.id,
'', --> domaine à personnaliser
1, 'COMUE', 1, 0, 1, 1
1, 'COMUE', true, false, 1, 1
from structure s
where s.source_code = 'COMUE'
;
......@@ -11,15 +11,15 @@ select nextval('individu_id_seq'),
'Premier',
'Premier',
'François',
'francois.premier@univ.fr',
'francois.premier@unicaen.fr',
'INCONNU::00012345',
'00012345',
1, 1, 1
;
insert into utilisateur (id, username, email, display_name, password, individu_id)
select nextval('utilisateur_id_seq'),
'premierf@univ.fr', -- du genre EPPN (si shibboleth activé) ou supannAliasLogin (si LDAP activé)
'francois.premier@univ.fr',
'premierf@unicaen.fr', -- du genre EPPN (si shibboleth activé) ou supannAliasLogin (si LDAP activé)
'francois.premier@unicaen.fr',
'François PREMIER',
'shib', -- 'shib' (si authentification shibboleth), ou 'ldap' (si auth LDAP), ou mdp bcrypté (si auth BDD locale)
i.id
......
--
-- DATABASE, USER, ETC.
--
-- Databases
create database :dbname with ENCODING = 'UTF-8';
-- Users
create user :dbuser with encrypted password :dbpassword NOSUPERUSER NOCREATEDB;
-- Grants
grant all privileges on database :dbname to :dbuser;
#!/bin/bash
set -e
###############################################################################################################
#
# Script de mise à jour (à partir du dépôt git SyGAL) des scripts SQL de création d'une bdd pour SyGAL.
#
###############################################################################################################
THIS_DIR=$(cd $(dirname $0) && pwd)
ROOT_DIR=${THIS_DIR}
GIT_REPO=git@git.unicaen.fr:/open-source/sygal
TMP_CLONE_DIR=/tmp/sygal
BRANCH=master
echo
echo "----- Obtention des dernières versions des scripts de création de bdd ----------------------"
git clone ${GIT_REPO} ${TMP_CLONE_DIR}
cd ${TMP_CLONE_DIR}
git checkout ${BRANCH}
git pull
echo
echo "----- Préparation des scripts ---------------------------------------------------------------"
cd ${TMP_CLONE_DIR}/doc/database
mv build_db_files.conf.dist build_db_files.conf
bash build_db_files.sh -c ./build_db_files.conf -i ./sql/
# Copie dans cette image (répertoire d'init de la bdd) des scripts SQL ;
# et déplacement du script à exécuter en tant que "super-user" dans le sous-répertoire `admin`.
echo
echo "----- Copie des scripts préparés ------------------------------------------------------------"
cp -v ./sql/*.sql ${ROOT_DIR}/docker/sql/
mv -v ${ROOT_DIR}/docker/sql/01_create_db_user.sql ${ROOT_DIR}/docker/sql/admin/
echo
echo "----- Git status ------------------------------------------------------------------------------"
cd ${ROOT_DIR}
git status
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