diff --git a/README.md b/README.md index 7d6d3f012d5fd7c460b6eb9544e272a301dd3b44..49c057425670738dbe4cbd0ef9853fc3e91b679f 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,10 @@ - Python 3.9 - Poetry (avec les modules poetry-plugin-export, poetry-dotenv-plugin, poetry-plugin-sort) + `poetry self add poetry-plugin-export poetry-dotenv-plugin poetry-plugin-sort` - Docker + Ajout de l'utilisateur courant au groupe `docker` pour utilisation des commandes docker + `sudo usermod -aG docker $USER` ## Créer un environnement virtuel avec Poetry @@ -55,13 +58,15 @@ Configurer un serveur SMTP ou utiliser un outil tel que maildev ## Création des clés JWT ```bash -ssh-keygen -t rsa -b 4096 -m PEM -f keys/jwt.key # (mettre un mot de passe vide) +ssh-keygen -t rsa -b 4096 -m PEM -f keys/jwt.key # (mettre "pount" comme mot de passe sinon ES plante) openssl rsa -in keys/jwt.key -pubout -outform PEM -out keys/jwt.key.pub ``` ## Bases de données, cache, autres services Les services dockérisés sont définis dans `docker-compose.yml` +Création des conteneurs sans les démarrer : `docker-compose up --no-start` +Démarrer les services : `docker-compose up` ### Rabbitmq @@ -74,8 +79,10 @@ Créer un compte `pount` avec le mot de passe `pount`. Créer un vhost `pount` e Créer une base de données `pount_dev` avec l'utilisateur `pount_dev` +Se logguer sur le docker mongo : `docker exec -it pount_mongo /bin/bash` + ```bash -mongosh "mongodb://locahost" -u pount -p pount +mongosh "mongodb://localhost" -u pount -p pount # créer une base pount_dev use pount_dev @@ -93,139 +100,108 @@ db.createUser({ db.createCollection("referential_levels") # créer les index sur la collection -db.referential_levels.setIndices([ - { - v: 2, - key: { _id: 1 }, - name: '_id_', - collation: { - locale: 'fr', - caseLevel: false, - caseFirst: 'off', - strength: 3, - numericOrdering: false, - alternate: 'non-ignorable', - maxVariable: 'punct', - normalization: false, - backwards: false, - } - }, +db.referential_levels.createIndex( { - v: 2, - key: { id: 1 }, - name: 'id_1', - unique: true, - collation: { - locale: 'fr', - caseLevel: false, - caseFirst: 'off', - strength: 3, - numericOrdering: false, - alternate: 'non-ignorable', - maxVariable: 'punct', - normalization: false, - backwards: false, - } - }, + { id: 1 }, + { name: 'id_1', + unique: true, + collation: { + locale: 'fr', + caseLevel: false, + caseFirst: 'off', + strength: 3, + numericOrdering: false, + alternate: 'non-ignorable', + maxVariable: 'punct', + normalization: false, + backwards: false, + } + } + }) +db.referential_levels.createIndex( { - v: 2, - key: { referential_id: 1, order: 1 }, - name: 'referential_id_1_order_1', - collation: { - locale: 'fr', - caseLevel: false, - caseFirst: 'off', - strength: 3, - numericOrdering: false, - alternate: 'non-ignorable', - maxVariable: 'punct', - normalization: false, - backwards: false, + { referential_id: 1, order: 1 }, + { name: 'referential_id_1_order_1', + collation: { + locale: 'fr', + caseLevel: false, + caseFirst: 'off', + strength: 3, + numericOrdering: false, + alternate: 'non-ignorable', + maxVariable: 'punct', + normalization: false, + backwards: false, } } -]) +}) # créer la collection referential_nodes db.createCollection("referential_nodes") # créer les index sur la collection -db.referential_nodes.setIndices([ +db.referential_nodes.setIndices( { - v: 2, - key: { _id: 1 }, - name: '_id_', - collation: { - locale: 'fr', - caseLevel: false, - caseFirst: 'off', - strength: 3, - numericOrdering: false, - alternate: 'non-ignorable', - maxVariable: 'punct', - normalization: false, - backwards: false, - } - }, - { - v: 2, - key: { id: 1 }, - name: 'id_1', - unique: true, - collation: { - locale: 'fr', - caseLevel: false, - caseFirst: 'off', - strength: 3, - numericOrdering: false, - alternate: 'non-ignorable', - maxVariable: 'punct', - normalization: false, - backwards: false, - } - }, + { id: 1 }, + { name: 'id_1', + unique: true, + collation: { + locale: 'fr', + caseLevel: false, + caseFirst: 'off', + strength: 3, + numericOrdering: false, + alternate: 'non-ignorable', + maxVariable: 'punct', + normalization: false, + backwards: false, + } + } +}) + +db.referential_nodes.setIndices( { - v: 2, - key: { referential_id: 1, level_id: 1, ancestors: 1, order: 1 }, - name: 'referential_id_1_level_id_1_ancestors_1_order_1', - collation: { - locale: 'fr', - caseLevel: false, - caseFirst: 'off', - strength: 3, - numericOrdering: false, - alternate: 'non-ignorable', - maxVariable: 'punct', - normalization: false, - backwards: false, + { referential_id: 1, level_id: 1, ancestors: 1, order: 1 }, + { name: 'referential_id_1_level_id_1_ancestors_1_order_1', + collation: { + locale: 'fr', + caseLevel: false, + caseFirst: 'off', + strength: 3, + numericOrdering: false, + alternate: 'non-ignorable', + maxVariable: 'punct', + normalization: false, + backwards: false, + } } - } -]) +}) ``` -## Indexation des items dans Elasticsearch - -Pour réinitialiser les index Elasticsearch : `poetry run python manage.py searchindex rebuild-indices` - ## Initialiser le projet -`poetry run python manage.py makemigrations` +`poetry run python manage.py migrate` Création des modèles nécessaires (roles, modèle de méta-données datacite) : `poetry run python manage.py create_models` Les comptes utilisateurs sont créés à la première connexion. Par contre, pour pouvoir créer un projet -un utilisateur doit avoir explicitement ce droit. Il est donc nécessaire de créer un super-utilisateur (`manage.py createsuperuser`) +un utilisateur doit avoir explicitement ce droit. Il est donc nécessaire de créer un super-utilisateur (`poetry run python manage.py createsuperuser`) qui pourra attribuer ce droit aux utilisateurs dans l'admin Django. Lors de la création des utilisateurs, les attributs suivants sont remontés du serveur CAS et utilisés -pour la création : `username`, `first_name`, `last_name`, `email` et `affiliation`. Le serveur CAS est configuré pour -remonter ces attributs lorsque le nom du service commence par `pount-`. +pour la création : `username`, `first_name`, `last_name`, `email` et `affiliation`. Le serveur CAS est configuré pour remonter ces attributs lorsque le nom du service commence par `pount-`. ## Lancement du serveur Serveur Django : `poetry run python manage.py runserver` -Worker Celery : `poetry run python celery -A pount worker -l INFO` +Worker Celery : `poetry run celery -A pount worker -l INFO` + +## Indexation des items dans Elasticsearch + +Pour réinitialiser les index Elasticsearch : `poetry run python manage.py searchindex rebuild-indices` +_NB : le serveur doit être lancé_ ## Upload de fichiers sur S3