Installer python 3.4+
Installer les librairies listées dans le fichier requirements.txt
.
pip install -r requirements.txt
Créer un fichier project/settings/dev.py
inspiré de project/settings/dev.example.py
avec les settings de dev.
Lancer les commandes suivantes :
python manage.py makemigrations
python manage.py migrate
python manage.py init_groups
python manage.py createsuperuser
Suivre la documentation pour installer meilisearch :
Pour Windows, le script d'installation via curl ne fonctionnera pas, mais un binaire existe ici : https://github.com/meilisearch/MeiliSearch/releases
Configurer l'url de meilisearch dans project/settings/dev.py
, normalement :
MEILISEARCH_URL = 'http://127.0.0.1:7700'
MEILISEARCH_KEY = ''
Puis lancer la tache de création de l'index :
python manage.py build_meilisearch_index
Un signal django récupère les modifications d'orgues faites directement via l'interface et met à jour l'index de recherche meilisearch.
Ce signal ne récupère pas les modifications faites en ligne de commande, les modifications groupées via l'admin ou encore
les suppressions d'orgues.
Pour mettre à jour l'index de recherche après ces types de modifications, il faut lancer la commande build_meilisearch_index
.
En production cette commande est lancée toutes les nuits (à 2 h) pour garantir que l'index soit à jour.
Si l'installation de meilisearch ne fonctionne pas, on peut utiliser un moteur de recherche dégradé en paramétrant :
MEILISEARCH_URL = False
Pour récupérer les configs depuis le site inventaire des orgues (Facteurs, types de jeux, types de claviers et ) Téléchargez le fichier config.json depuis l'url du site : https://inventaire-des-orgues.fr/api/v1/config.json (il faut être connecter au site inventaire) et lancer la commande suivante :
python manage.py init_config --delete path/ver/config.json
Il est possiblde de récupérer un fichier d'import pour les orgues des pays de la loire :
python manage.py import_data --create path/ver/import.json
Certaines données sont mises en cache pour améliorer la perfomance des requêtes. Pour forcer le recalcul des "résumés clavier" il faut lancer la commande :
python manage.py calcul_resume_composition
Normalement le résumé clavier est recalculé automatiquement à chaque modification de la composition d'un orgue.
l'option --delete permet de vider la base préalablement si nécessaire
Démarre un serveur qui sera automatiquement relancé lors de changement dans le code.
python manage.py runserver
sudo su
rm -rf /usr/bin/meilisearch
curl -L https://install.meilisearch.com | sh
mv ./meilisearch /usr/bin/
nano /etc/systemd/system/meilisearch.service
systemctl start meilisearch
systemctl status meilisearch
cd /var/www
source pythonenv/bin/activate
cd portail/
python manage.py build_meilisearch_index
Placer le fichier JSON d'importation quelque part sur le disque. (s'inspirer du format de exemple_orgue-v3.json
)
A noter : la colonne codification
est utilisée comme pivot pour retrouver des orgues potentiellement déjà existants dans la base de données avant
de les mettre à jour.
Lancer :
source /var/www/pythonenv/bin/activate
cd /var/www/portail
python manage.py import_data chemin/vers/exemple_orgue-v3.json
Optionel : ajouter --delete
pour supprimer les orgues existants avant l'importation
Des liens ont été prédisposés, sur chaque fiche, vers les scans au format PDF des livres d'inventaires papier.
En local sur son poste de travail :
- Créer un dossier par département
- Transformer chacun de ces dossiers en archive .tar avec 7-zip ou autre logiciel. Pour 7-zip, option "chemin relatif"
Transférer ces .tar sur le serveur, à l'aide de MobaXterm ou autre, par exemple par SFTP, dans un répertoire temporaire. ex : /home/louisvierne/temp_tar
Quelques commandes tar utiles :
# Examiner le contenu d'une archive .tar
tar -tf ./truc.tar
# Dépaqueter une archive .tar
tar -xvf ./truc.tar
Lancer les script de déploiement des fichiers PDF :
python manage.py deployer_pdfs /home/louisvierne/temp_tar/29/
Le script gère le changement du propriétaire, du groupe et des permissions sur le serveur. Dans le cas d'un déplacement manuel de fichier, ne pas oublier de les mettre à jour :
# Modifier le propriétaire et les permissions des fichiers.
# Se placer dans le bon répertoire.
chown -R fabdev:www-data ./*
chmod -R 644 ./*
source /var/www/pythonenv/bin/activate
cd /var/www/portail
python manage.py shell
from orgues.models import Orgue
Orgue.objects.all()
Orgue.objects.filter(departement="Ardennes")
Se référer à la documentation Django pour des requêtes plus poussées, avec usage notamment des commandes comme :
exclude()
, get()
et des suffixes : __startwith
, __lte
, etc.
update()
permet les mises à jour simultanées.
Exemple : corriger les noms erronés du champ ancienne_commune :
Orgue.objects.filter(ancienne_commune="/").update(ancienne_commune="")
Via un fichier cron. Pour le voir :
sudo su
crontab -l
Commandes manuelles correspondantes si besoin de renouvellement manuel :
sudo service nginx stop
sudo certbot renew
sudo service nginx start
Lors de manipulations sur le serveur, il faut veiller à ne pas modifier les permissions des fichiers manipulés par Django. Pour rétablir les bonnes permissions :
sudo chown -R fabdev:www-data /var/www/portail/static/media
Installer si nécessaire django-extensions et pydotplus (toutefois ces deux modules sont dans requirements.txt
, donc l'installation n'est normalement pas nécessaire).
Créer un fichier de graphe (.dot) à l'aide de :
python manage.py graph_models orgues -a -g > orgue.dot
Puis générer un diagramme .svg (ou .png) en ligne : https://dreampuf.github.io/GraphvizOnline
Bien pratique pour travailler sur un tableur type OpenOffice ou Excel... https://inventaire-des-orgues.fr/orgues/csv
Voir la documentation de l'API
Pour installer un fichier Wheel depuis la console Python.
import pip
from pip._internal import main as pipmain
pipmain(['install', "Chemin\\vers\\fichier.whl"])
Lancer l’appariement sur tous les orgues qui n’ont pas déjà le champ id_osm rempli : Attention, en raison du timer entre requêtes OpenStreetMap, la commande peut être très longue.
nohup python manage.py appariement_osm all &
Associer à chaque orgue les id d’OSM trouvés dans appariement_osm :
python manage.py import_organ_osm_id orgues/temp/appariements_osm_all.json
Calculer le barycentre de chaque bâtiment. On recalcule pour tous les orgues, mais cela permet de corriger les orgues pour lesquels la position est erronée pour le moment :
python manage.py calcul_barycenter_osm --calculall calculall
Associer à chaque orgue les positions en latitude longitude calculées dans calcul_barycenter_osm :
python manage.py import_organ_lonlat coordonnees_osm.json --ecrase if
A condition qu’on ne lance pas appariement_osm et calcul_barycenter_osm le même jour, on sera en-dessous de la limite des 10000 requêtes par jour.
Lancer l’appariement sur tous les orgues qui n’ont pas déjà le champ id_osm rempli :
py manage.py appariement_topo
Importer les coordonnées des orgues :
python manage.py import_organ_lonlat orgues/temp/appariements_topo.json --ecrase if
Supprimer en base de données les liens cassés pointant vers des images
python manage.py remove_broken_images
Contrôle général de la qualité des données (casse, nom d'édifice non complétés, etc.) :
python manage.py quality_check
Vérification de la présence du code INSEE dans chaque fiche :
python manage.py verif_presence_insee
Corriger un attribut sur toutes les fiches :
python manage.py corriger_attribut --replace designation "G.O." "grand orgue"
Remplir toutes les valeurs None de l'attribut designation par une valeur par défaut :
python manage.py corriger_designatio_none --replace "orgue"
Supprimer tous les doublons dans la liste des facteurs d'orgues :
python manage.py delete_organ_builder_duplication
Renommer des codes de fiche à l'aide d'une liste CSV ancien_code;nouveau_code. Attention, cette manipulation n'est pas anodine et il ne doit pas y avoir d'erreur de données, car en plus du changement de code les fichiers et images sont déplacés et le fichier PDF extrait du livre d'inventaire est renommé.
python manage.py replace_codes
Déployer à partir d'un fichier archive TAR les PDF extraits des livres d'inventaire aux bons endroits sur le disque du serveur :
python manage.py deployer_pdfs
- ajouter utilisateur au groupe Unix qui convient
- si accès root attribuer les droit (visudo) et permettre l'accès sans mot de passe (clé RSA)
- ajouter sa clé publique /home/utilisateur/.ssh/authorized_keys