Skip to content
Snippets Groups Projects
Commit 3f457cd4 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Améliorations

parent 93d3f714
No related branches found
No related tags found
No related merge requests found
.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`.
- 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.
tmp/
#!/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
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'
;
This diff is collapsed.
......@@ -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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment