Commit ce330356 authored by Stephane Bouvry's avatar Stephane Bouvry
Browse files

Docker :

 - Mise à jour de l'import de base Postgresql
 - Mise à jour du script d'initialisation de la démo
 - Mise à jour de la doc
Installation :
 - Mise à jour de la structure initiale de la base de données
 - Nouvelles données de démo
Technique :
 - La commande OscarCheckSequenceNum intègre certaines sequences manquantes
parent f381d1c0
Loading
Loading
Loading
Loading
Loading
+40 −83
Changes for docker/README.md: 40 added lines, 83 removed lines.
Original line number Diff line number Diff line
# OSCAR DOCKER
# Installation OSCAR avec Docker

## Démo/Préprod
> Note : Si vous êtes développeur/testeur, une version plus spécifique (locale) est disponible ici [Oscar Docker Dev](./DEV.md)

### Installation/build

Suivez la [procédure d'installation en production](./PROD.md)



## Développement

### Installation

Suivez la procédure de production,
puis dans le fichier **compose.yml**, décommentez les containers en fin de fichier : 
 - mailhog
 - vite (Si développement UI)
 - kibana (Si développement sur Elasticsearch)

### Commandes de base

Lancement/Arrêt de l'application
## Etape 1 : Récupération des sources

```bash
# lancement (Avec build, logs complets en stdout)
docker compose up --build
# Récupération du dépôt
git clone https://git.unicaen.fr/open-source/oscar.git
cd oscar

# lancement (Avec build, mode détaché)
docker compose up --build -d
# Copie de la configuration par défaut
cp docker/.env.prod.dist .env

# Arrêt (Si détaché)
docker compose down
# 
cp docker/compose.prod.yml ./compose.yml
```

Lancer des commandes sur l'application PHP
## Etape 2 : Proxy

```bash
# Commandes OSCAR
docker compose exec app-worker php bin/oscar.php
Si vous n'êtes pas derrière un proxy, passez cette étape

# Mise à jour du modèle
docker compose exec app-worker php vendor/bin/doctrine-module orm:schema-tool:update --force --complete
```bash
# MAJ du Proxy
sed -i 's%^HTTP_PROXY=.*%HTTP_PROXY=http://votre-proxy:3128%' .env
```

## Etape 3 : Volumes

### Autres commandes

Vous devez créer tous les volumes de l'application pour l'archivage des fichiers, écriture des logs, configuration personnalisées, etc...

Lancer des commandes sur le container Oscar : 
Un script permet de vous simplifier cette étape (en se basant sur votre .env) :

```bash
docker compose exec app-php php bin/oscar.php
. docker/compose-init.sh
```

Build de l'UI : 
```bash
docker compose exec app-vite yarn run build
```

Purger la BDD (Stopper l'application avant)
Si vous êtes en démo, tout est prêt.

```bash
# Le volume avec les données est créé par docker - donc droit SU requis
sudo rm -Rf volumes/postgresql/*
```

Copier une base de données existante :
## Etape 4 : Proxypass de l'hôte > container oscar

> Pensez à adapter l'emplacement du fichier SQL si besoin
Si vous êtes en local, passez cette étape

```bash
pg_dump --clean --if-exists --no-owner -h HOST -U USER BASE > demo/default/postgresql/init/sql/install.sql
```
# Activation du mod Proxy
sudo  a2enmod proxy proxy_http

# Un exemple de Vhost
sudo cp docker/host.apache.proxy.conf /etc/apache2/sites-available/000-default.conf

Lister les tâches en attentes sur Gearman
# Renseigner votre domaine (ou avec votre éditeur préféré)
sed -i 's%^oscar-host-name%VOTRE-NOM-DE-DOMAINE.EXT%' /etc/apache2/sites-available/000-default.conf

```bash
# TODO
# Reboot apache 
sudo systemctl restart apache2
```

### Accès à la base de données

#### DBeaver CE
## Etape 5 : Lancement

 - Drivers : `Postgresql`
 - Hôte : `app-postgres`
 - Identifiant : `oscar_devdev_user`
 - Mot de passe : `oscar_devdev_pass`
 - Base de données : `oscar_devdev_db`
 - Port : `6543`
```bash
sudo docker compose up
```

> Peut être modifié dans le fichier **.env.docker.dev**
Vous avez un oscar fonctionnel à cette étape

#### Développement UI (Vite/VueJS)
- En local : http://localhost:8888
- Avec Proxypass : http://VOTRE-NOM-DE-DOMAINE.EXT

Dans `config/autoload/local.php` : 
## Etape 6 : Données de démonstration

```bash
<?php
// ...
return array(
    'oscar' => [
        // ...
        'vite' => [
            'mode' => 'dev', // par défaut 'prod'
            'src' => __DIR__ . '/../../ui',
            'dest' => __DIR__ . '/../../public/js/oscar/vite/dist',
            'base_url_dev' => 'http://127.0.0.1:5173',
            'base_url_prod' => '/js/oscar/vite/dist',
        ],
        // ...
    ]
)
. docker/docker-sync-demos-datas.sh
```

> Le *container* Vite installe automatiquement la dernière version de Node/NPM. à voir si cela nous bloque à un moment et nous oblige à fixer la version 

Accès : administrateur/administrateur
 No newline at end of file
+2 −0
Changes for docker/docker-sync-demos-datas.sh: 2 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -2,6 +2,8 @@

sudo docker compose exec app-php php vendor/bin/doctrine-module orm:schema-tool:update --force --complete

sudo docker compose exec app-php php bin/oscar.php check:sequences-num

# Chargement des organisations
sudo docker compose exec app-php php bin/oscar.php organizations:sync-json install/demo/organizations.json

+1 −1
Changes for docker/postgres_initdb.d/sql/01-structure.sql: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -3270,7 +3270,7 @@ COPY public.unicaen_signature_signatureflowstep (id, recipientsmethod, label, le

COPY public.user_role (id, parent_id, role_id, is_default, ldap_filter, spot, description, principal, displayed, accessible_exterieur) FROM stdin;
1	\N	Administrateur	f	\N	7	\N	f	t	t
3	\N	Responsabe	f	\N	1	Responsable sur un contrat	t	f	t
3	\N	Responsable	f	\N	1	Responsable sur un contrat	t	f	t
5	\N	Déclarant	f	\N	1	Personne identifiée sur un contrat	f	f	t
2	\N	Chargé de projet	f	\N	15	Personne responsable du suivi des contrats	t	f	t
4	\N	Gestionnaire	f	\N	2	Personne gestionnaire dans un laboratoire ou une composante	t	f	t
+71 −82
Changes for install/demo/activity.json: 71 added lines, 82 removed lines.
Original line number Diff line number Diff line
[
  {
    "uid": "A0001",
    "acronym": "RELACSV",
    "uid": "bio01",
    "acronym": "ARNM",
    "projectlabel": "ARN messager",
    "description": "",
    "label": "Acide ribonucléique messager",
    "datestart": "2024-01-01",
    "dateend": "2025-12-31",
    "datesigned": "2024-01-05",
    "pfi": "",
    "status": 101,
    "datePFI": "2024-01-01",
    "type": "ANR",
    "amount": 9000.0,
    "financialImpact": "Recette",
    "milestones": [
      {
        "type": "Rapport scientifique",
        "date": "2025-01-01"
      },
      {
        "type": "Fin des dépenses",
        "date": "2025-11-30"
      }
    ],
    "organizations": {
      "Laboratoire": [
        "Laboratoire de Biologie"
      ],
      "Composante": [
        "UFR des Sciences"
      ]
    },
    "persons": {
      "Responsable": [
        "François Gros"
      ]
    }
  },
  {
    "uid": "phy01",
    "acronym": "RELATIV",
    "projectlabel": "Théorie de la relativité",
    "description": "Description le d'activité 1",
    "label": "Exemple d'activité 1",
    "description": "",
    "label": "Relativité réstrinte",
    "datestart": "2014-01-01",
    "dateend": "2023-03-31",
    "datesigned": "2017-06-01",
    "pfi": "99PFI1234",
    "pfi": "",
    "status": 101,
    "datePFI": "2018-01-01",
    "type": "ANR",
    "amount": "0.0",
    "amount": 5000.0,
    "financialImpact": "Recette",
    "milestones": [
      {
@@ -25,34 +64,34 @@
      }
    ],
    "organizations": {
      "Référent extérieur": [],
      "Laboratoire": [
        "Cyberdyne",
        "US Robots"
        "Laboratoire de Physique"
      ],
      "Composante": [
        "UFR des Sciences"
      ]
    },
    "persons": {
      "Responsable scientifique": [
      "Responsable": [
        "Albert Einstein"
      ],
      "Ingénieur": [
        "John Doe",
        "Sarah Déclarant"
        "Marcel Grossmann"
      ]
    }
  },
  {
    "uid": "A0002",
    "acronym": "RELACSV",
    "uid": "phy02",
    "acronym": "RELATIV",
    "projectlabel": "Théorie de la relativité",
    "description": "Description le d'activité 2",
    "label": "Exemple d'activité 2",
    "description": "",
    "label": "Relativité générale",
    "datestart": "2021-01-01",
    "dateend": "2022-12-31",
    "datesigned": "2021-01-05",
    "pfi": "",
    "status": 101,
    "type": "Colloques",
    "type": "ANR",
    "amount": 15000,
    "financialImpact": "Recettes",
    "milestones": [
@@ -61,22 +100,18 @@
    ],
    "organizations": {
      "Laboratoire": [
        "Cyberdyne",
        "US Robots"
        "Laboratoire de Physique"
      ],
      "Composante responsable": [
        "ACME"
      "Composante": [
        "UFR des Sciences"
      ]
    },
    "persons": {
      "Responsable scientifique": [
        "Albert Einstein",
        "Maurice Solovine"
      "Responsable": [
        "Albert Einstein"
      ],
      "Ingénieur": [
        "John Doe",
        "Marcel Grossmann",
        "Sarah Déclarant"
        "Marcel Grossmann"
      ]
    },
    "workpackages": [
@@ -85,9 +120,7 @@
        "label": "Etude et analyse",
        "declarers": [
          "Albert Einstein",
          "Maurice Solovine",
          "Marcel Grossmann",
          "Sarah Déclarant"
          "Marcel Grossmann"
        ]
      },
      {
@@ -95,7 +128,6 @@
        "label": "Rédaction d'article",
        "declarers": [
          "Albert Einstein",
          "Maurice Solovine",
          "Marcel Grossmann"
        ]
      },
@@ -110,7 +142,7 @@
    ]
  },
  {
    "uid": "A0003",
    "uid": "phy03",
    "acronym": "MECAQUAN",
    "projectlabel": "Mécanique quantique",
    "label": "Étude des quanta",
@@ -128,22 +160,18 @@
    ],
    "organizations": {
      "Laboratoire": [
        "US Robots"
        "Laboratoire de Physique"
      ],
      "Composante responsable": [
        "ACME"
      "Composante": [
        "UFR des Sciences"
      ]
    },
    "persons": {
      "Responsable scientifique": [
      "Responsable": [
        "Max Plank"
      ],
      "Chercheur": [
        "Erwin Schrödinger"
      ],
      "Ingénieur": [
        "Marcel Grossmann",
        "Sarah Déclarant"
        "Marcel Grossmann"
      ]
    },
    "workpackages": [
@@ -152,9 +180,7 @@
        "label": "Travaux préparatoires",
        "declarers": [
          "Max Plank",
          "Erwin Schrödinger",
          "Marcel Grossmann",
          "Sarah Déclarant"
          "Marcel Grossmann"
        ]
      },
      {
@@ -162,7 +188,6 @@
        "label": "Rédaction d'article",
        "declarers": [
          "Max Plank",
          "Erwin Schrödinger",
          "Marcel Grossmann"
        ]
      },
@@ -170,45 +195,9 @@
        "code": "WP3",
        "label": "Expériences",
        "declarers": [
          "Marcel Grossmann",
          "Sarah Déclarant"
          "Marcel Grossmann"
        ]
      }
    ]
  },
  {
    "uid": "A0004",
    "acronym": "TESTPCRU",
    "projectlabel": "Projet PCRUifié",
    "label": "Contrat vers PCRU",
    "datestart": "2022-01-01",
    "dateend": "2022-12-31",
    "datesigned": "2022-01-05",
    "financialImpact": "Dépense",
    "pfi": "2022PFI04079",
    "status": 101,
    "type": "ANR",
    "amount": 15250,
    "milestones": [
    ],
    "payments": [
    ],
    "organizations": {
      "Laboratoire": [
        "Groupe Olympia"
      ]
    },
    "persons": {
      "Responsable scientifique": [
        "Max Plank"
      ],
      "Chercheur": [
        "Erwin Schrödinger"
      ],
      "Ingénieur": [
        "Sarah Déclarant"
      ]
    },
    "workpackages": []
  }
]
 No newline at end of file
+44 −51
Changes for install/demo/authentification.json: 44 added lines, 51 removed lines.
Original line number Diff line number Diff line
[
  {
    "displayname": "Administrateur",
    "email": "admin@jacksay.com",
    "password": "administrateur",
    "login": "administrateur",
    "approles": ["Administrateur"]
  },
  {
    "displayname": "Charles Darwin",
    "email": "charles.darwin@jacksay.com",
    "password": "charlesd",
    "login": "charlesd",
    "approles": []
  },
  {
    "displayname": "Maryam Mirzakhani",
    "email": "maryam.mirzakhani@jacksay.com",
    "password": "maryamm",
    "login": "maryamm",
    "approles": []
  },
  {
    "displayname": "Marie Curie",
    "email": "marie.curie@jacksay.com",
    "password": "mariec",
    "login": "mariec",
    "approles": []
  },
  {
    "displayname": "Albert Einstein",
    "email": "albert.einstein@jacksay.com",
    "password": "alberteinstein",
    "login": "alberteinstein",
    "password": "alberte",
    "login": "alberte",
    "approles": []
  },
  {
    "displayname": "Maurice Solovine",
    "email": "maurice.solovine@jacksay.com",
    "password": "mauricesolovine",
    "login": "mauricesolovine",
    "password": "maurices",
    "login": "maurices",
    "approles": []
  },
  {
    "displayname": "Marcel Grossmann",
    "email": "marcel.grossmann@jacksay.com",
    "password": "marcelgrossmann",
    "login": "marcelgrossmann",
    "password": "marcelg",
    "login": "marcelg",
    "approles": []
  },
  {
    "displayname": "Max Plank",
    "email": "max.plank@jacksay.com",
    "password": "maxplank",
    "login": "maxplank",
    "password": "maxp",
    "login": "maxp",
    "approles": []
  },
  {
    "displayname": "Niels Bohr",
    "email": "niels.bohr@jacksay.com",
    "password": "nielsbohr",
    "login": "nielsbohr",
    "password": "nielsb",
    "login": "nielsb",
    "approles": []
  },
  {
    "displayname": "Erwin Schrödinger",
    "email": "erwin.schrodinger@jacksay.com",
    "password": "erwinschrodinger",
    "login": "erwinschrodinger",
    "password": "erwins",
    "login": "erwins",
    "approles": []
  },
  {
    "displayname": "Déclarant",
    "email": "sarah.declarant@jacksay.com",
    "password": "declarant",
    "login": "declarant",
    "displayname": "François Gros",
    "email": "francois.gros@jacksay.com",
    "password": "francoisg",
    "login": "francoisg",
    "approles": []
  },
  {
    "displayname": "Responsable de labo",
    "email": "raphaelle.responsable@jacksay.com",
    "password": "responsable",
    "login": "responsable",
    "approles": []
  },
  {
    "displayname": "Administrateur",
    "email": "romane.administrateur@jacksay.com",
    "password": "administrateur",
    "login": "administrateur",
    "approles": ["Administrateur"]
  },
  {
    "displayname": "Direction de composante",
    "email": "emmanuelle.directrice@jacksay.com",
    "password": "direction",
    "login": "direction",
    "approles": []
  },
  {
    "displayname": "Chargé de valorisation",
    "email": "valorisation@oscar-demo.com",
    "password": "valorisation",
    "login": "valorisation",
    "approles": ["Chargé de valorisation"]
  },
  {
    "displayname": "Responsable financier",
    "email": "financier@oscar-demo.com",
    "password": "financier",
    "login": "financier",
    "approles": ["Responsable Financier"]
  }
]
 No newline at end of file
Loading