Commit fc53f1d1 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Initial commit

parents
Pipeline #9540 passed with stage
in 26 seconds
before_script:
- docker info
stages:
- build
build:
stage: build
script:
- export HTTP_PROXY=http://10.14.128.99:3128
- docker build --rm --build-arg HTTP_PROXY=${HTTP_PROXY} -f Dockerfile -t sygal-db-image .
- docker tag sygal-db-image registre.unicaen.fr:5000/sygal-db-image
- docker push registre.unicaen.fr:5000/sygal-db-image
###########################################################################################
#
# Base de données PostgreSQL de SyGAL.
#
###########################################################################################
FROM postgres:13
RUN localedef -i fr_FR -c -f UTF-8 -A /usr/share/locale/locale.alias fr_FR.UTF-8
ENV LANG fr_FR.utf8
# Script d'initialisation de la bdd, lancé automatiquement (ssi le répertoire `data/db` est vide).
COPY docker/init_user_db.sh /docker-entrypoint-initdb.d/
# Copie des scripts SQL de création de la bdd, lancés par le script `init_user_db.sh`.
COPY docker/sql/*.sql /sql/
# Sygal Db Image
## Construction de l'image (build)
Construisez l'image pour la version de PHP désirée...
```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 :
```bash
docker run \
--env POSTGRES_USER=postgres \
--env POSTGRES_PASSWORD=admin \
--publish 5432:5432 \
--volume $PWD/data/db:/var/lib/postgresql/data \
--volume $PWD/docker/db/sql/:/sql \
--name sygal-db-container \
sygal-db-image
```
Remarques :
- Le montage `./data/db:/var/lib/postgresql/data` permet de persister la base de données.
- Le montage `./docker/db/sql/:/sql` vous permet de remplacer les scripts SQL
de création/peuplement des objets de la base de données par les vôtres le cas échéant.
## Utilisation dans un `docker-compose.yml`
```
version: '2.2'
services:
sygal-db:
image: sygal-db
container_name: sygal-db-container
restart: always
environment:
POSTGRES_PASSWORD: admin
ports:
- 5432:5432
volumes:
- ./data/db:/var/lib/postgresql/data
- ./docker/db/sql/:/sql
```
db/
\ No newline at end of file
version: '3.1'
services:
sygal-db:
image: sygal-db
restart: always
build:
context: .
environment:
#POSTGRES_DB: postgres
POSTGRES_USER: postgres
POSTGRES_PASSWORD: admin
ports:
- 5432:5432
volumes:
- ./data/db:/var/lib/postgresql/data
#!/bin/bash
set -e
cd /sql # volume
unset PGHOST PGPORT PGDATABASE PGUSER PGPASSWORD # précaution
export \
PGDATABASE=$POSTGRES_DB \
PGUSER=$POSTGRES_USER \
ON_ERROR_STOP=1
psql -f 01_create_db_user.sql
psql -c "alter user ad_sygal with encrypted password 'azerty'"
export \
PGDATABASE=sygal \
PGUSER=ad_sygal \
PGPASSWORD=azerty
psql -f 02_create_schema.sql
psql -f 03_insert_bootstrap_data.sql
psql -f 04_insert_data.sql
psql -f 05_create_constraints.sql
psql -f 06_create_comue.sql
psql -f 07_init.sql
psql -f 08_create_fixture.sql
unset PGHOST PGPORT PGDATABASE PGUSER PGPASSWORD # précaution
--
-- DATABASE, USER, ETC.
--
-- Databases
create database sygal with ENCODING = 'UTF-8';
-- Users
create user ad_sygal with encrypted password 'MOT_DE_PASSE_PAR_DEFAUT' NOSUPERUSER NOCREATEDB;
-- Grants
grant all privileges on database sygal to ad_sygal;
This diff is collapsed.
--
-- BOOTSTRAP
--
--
-- Sources de données SyGAL.
--
delete from source where code = 'SYGAL::sygal'
;
insert into source (id, code, libelle, importable)
values (1, 'SYGAL::sygal', 'SyGAL', 0)
;
--
-- Pseudo-utilisateur 'sygal-app'.
--
delete from utilisateur where username = 'sygal-app'
;
insert into utilisateur (id, username, display_name, password)
values (1, 'sygal-app', 'Application SyGAL', 'ldap')
;
--
-- Rôles multi-établissements.
--
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)
;
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)
;
-- drop sequence INDIVIDU_ID_SEQ;
-- drop sequence UTILISATEUR_ID_SEQ;
-- drop sequence STRUCTURE_ID_SEQ;
-- drop sequence ETABLISSEMENT_ID_SEQ;
-- CREATE SEQUENCE "INDIVIDU_ID_SEQ" MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 NOORDER NOCYCLE ;
-- CREATE SEQUENCE "UTILISATEUR_ID_SEQ" MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 NOORDER NOCYCLE ;
-- CREATE SEQUENCE "STRUCTURE_ID_SEQ" MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 NOORDER NOCYCLE ;
-- CREATE SEQUENCE "ETABLISSEMENT_ID_SEQ" MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 NOORDER NOCYCLE ;
--
-- L'établissement inconnu.
--
delete from etablissement where source_code = 'ETAB_INCONNU'
;
delete from structure where source_code = 'ETAB_INCONNU'
;
insert into structure(id, libelle, type_structure_id, histo_createur_id, histo_modificateur_id, source_id, source_code, code)
select nextval('structure_id_seq'),
'Établissement inconnu',
1, -- type etab
1, 1,
1, -- source sygal
'ETAB_INCONNU', -- source code unique
'INCONNU' -- code
;
insert into etablissement(id, structure_id, histo_createur_id, histo_modificateur_id, source_id, source_code)
select nextval('etablissement_id_seq'),
currval('structure_id_seq'),
1, 1,
1, -- source sygal
'ETAB_INCONNU' -- source code unique, idem structure
;
-- --
-- -- Avance de sequences.
-- --
-- declare
-- maxid integer;
-- seqnextval integer;
-- begin
-- select max(id) into maxid from UTILISATEUR;
-- LOOP
-- select nextval('UTILISATEUR_ID_SEQ') into seqnextval from dual;
-- EXIT WHEN seqnextval >= maxid;
-- END LOOP;
-- end;
--
-- declare
-- maxid integer;
-- seqnextval integer;
-- begin
-- select max(id) into maxid from ROLE;
-- LOOP
-- select nextval('ROLE_ID_SEQ') into seqnextval from dual;
-- EXIT WHEN seqnextval >= maxid;
-- END LOOP;
-- end;
This diff is collapsed.
This diff is collapsed.
--
-- COMUE or not COMUE ?
--
-- NB : Ce script vous concerne uniquement si vous avez besoin de déclarer une structure particulière
-- pour votre COMUE.
--
insert into structure (id, source_code, sigle, libelle, type_structure_id, source_id, code, histo_createur_id, histo_modificateur_id)
select
nextval('structure_id_seq'), 'COMUE',
'', --> sigle ou abbréviation à personnaliser
'', --> libellé à personnaliser
null, 1, 'COMUE', 1, 1
where 0 = 1
;
insert into etablissement (id, structure_id, domaine, source_id, source_code, est_comue, est_membre, histo_createur_id, histo_modificateur_id)
select
nextval('etablissement_id_seq'), s.id,
'', --> domaine à personnaliser
1, 'COMUE', 1, 0, 1, 1
from structure s
where s.source_code = 'COMUE'
;
--
-- INITIALISATIONS de données.
--
-- Attention, ce sript doit être adapté à l'établissement d'installation :
--
-- 'UTLN' : code unique identifiant l'établissement, ex: 'UNILIM'
-- 'UTML' : sigle ou libellé court de l'établissement, ex: 'Unilim'
-- 'Université de Toulon' : libellé complet de l'établissement, ex: 'Université de Limoges'
-- 'utln.fr' : domaine de l'établissement, ex: 'unilim.fr'
--
--
-- Création de l'établissement.
--
-- 1/ STRUCTURE
--
insert into structure (id, source_code, code, sigle, libelle, type_structure_id, source_id, histo_createur_id, histo_modificateur_id)
select
nextval('structure_id_seq'),
'UTLN',
'UTLN',
'UTML',
'Université de Toulon',
1, 1,
1, 1
;
--
-- 2/ ETABLISSEMENT
--
insert into etablissement (id, structure_id, domaine, source_code, est_comue, est_membre, source_id, histo_createur_id, histo_modificateur_id)
select
nextval('etablissement_id_seq'),
s.id,
'utln.fr',
'UTLN',
0,
1,
1,
1, 1
from structure s
where s.source_code = 'UTLN'
;
--
-- Création des sources de données importables, ex: Apogée.
--
delete from source where code <> 'SYGAL::sygal'
;
insert into source (id, code, libelle, importable, etablissement_id)
select 2, source_code||'::apogee', 'Apogée '||source_code, 1, id
from etablissement
where source_code = 'UTLN'
and 1 = 1
;
insert into source (id, code, libelle, importable, etablissement_id)
select 3, source_code||'::physalis', 'Physalis '||source_code, 1, id
from etablissement
where source_code = 'UTLN'
and 0 = 1
;
--
-- Rôles par établissement.
--
insert into role (
id,
code,
libelle,
source_code,
source_id,
role_id,
these_dep,
histo_createur_id,
histo_modificateur_id,
structure_id,
type_structure_dependant_id
)
with tmp(code, libelle, these_dep) as (
select 'ADMIN', 'Administrateur', 0 union
select 'MDD', 'Maison du doctorat', 0 union
select 'BU', 'Bibliothèque universitaire', 0 union
select 'DOCTORANT', 'Doctorant', 1
)
select
nextval('role_id_seq'),
tmp.code,
tmp.libelle,
s.source_code || '::' || tmp.code,
1,
tmp.libelle || ' ' || s.source_code,
tmp.these_dep,
1,
1,
s.id,
1
from tmp, structure s
where s.source_code = 'UTLN'
;
--
-- Accord des privilèges de "gestion des privilèges" au rôle ADMIN_TECH.
-- NB: cela débloque l'accès au menu "Droits d'accès" dans l'appli.
--
insert into role_privilege(role_id, privilege_id)
select r.id, p.id
from role r, privilege p, categorie_privilege cp
where r.SOURCE_CODE = 'ADMIN_TECH'
and cp.CODE = 'droit'
and p.CATEGORIE_ID = cp.id
;
--
-- Peuplement des VM.
--
refresh materialized view mv_recherche_these;
--
-- DONNÉES DE TEST.
--
--
-- Création de l'individu/utilisateur de test
--
insert into individu (id, civilite, nom_usuel, nom_patronymique, prenom1, email, source_code, supann_id, source_id, histo_createur_id, histo_modificateur_id)
select nextval('individu_id_seq'),
'M.',
'Premier',
'Premier',
'François',
'francois.premier@univ.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',
'François PREMIER',
'shib', -- 'shib' (si authentification shibboleth), ou 'ldap' (si auth LDAP), ou mdp bcrypté (si auth BDD locale)
i.id
from individu i
where i.source_code = 'INCONNU::00012345'
;
--
-- /!\ Attribution du rôle Admin tech à l'utilisateur de test !!
--
insert into individu_role(id, individu_id, role_id)
select nextval('individu_role_id_seq'), i.id, r.id
from individu i, role r
where i.source_code = 'INCONNU::00012345'
and r.source_code = 'ADMIN_TECH'
;
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