REMARQUE : CE REPO A ÉTÉ REMPLACÉ PAR picili-ts.
picili est un moteur/navigateur de recherche d'images automatisé qui se synchronise avec un dossier choisi sur votre dropbox. Il analyse automatiquement toutes les images et reste à jour avec toutes les images que vous ajoutez, supprimez ou modifiez. Une application Web légère facilite la navigation et la recherche dans vos photos. L'application Web a été conçue pour s'aligner étroitement sur les différents types de balises avec lesquelles Picili catégorise vos images. Il utilise certaines API externes pour faciliter le balisage, mais est conçu pour rester dans le niveau gratuit de chacune. Seul un VPS est donc payant.
types de balises générés | nécessite des données GPS exif | Utilise une API externe |
---|---|---|
répertoires | ||
date | ||
données exif | ||
sujet | ✓ | |
adresse / emplacement | ✓ | ✓ |
élévation | ✓ | ✓ |
espèces végétales | ✓ | |
plaques d'immatriculation | ✓ | |
texte / ROC | ✓ |
Comment ça marche
Installation
Travailler sur picili
Déploiement
l'utilisateur enregistre et connecte son compte Dropbox via OAuth
l'utilisateur entre ensuite dans un dossier sur sa boîte de dépôt où il stocke ses photos
picili interroge Dropbox toutes les x minutes, obtenant une liste de fichiers.
se compare à tous les fichiers qu’il a identifiés jusqu’à présent.
ajoute les nouveaux fichiers à une liste locale et les met en file d'attente pour être importés, et supprime tous les fichiers maintenant supprimés.
les fichiers en file d'attente sont chacun téléchargés localement, traités, puis supprimés localement
le traitement consiste à
géocodage : obtenir des informations de localisation (via une API externe)
codage d'altitude : dériver l'élévation en mètres à partir de la latitude/longitude (via une API externe)
créer des vignettes
extraire les informations exif
déterminer les couleurs
envoyer l'image à une API de reconnaissance de sujet
si l'image contient des données géo exif
Pièces principales :
SPA : le front-end est une application angulaire monopage (SPA)
API : une API PHP réalisée à l'aide de laravel que le SPA appelle
Auto : un projet séparé exécuté en arrière-plan qui est également un projet PHP Laravel, qui effectue toute la synchronisation de la boîte de dépôt et le marquage/traitement des fichiers.
Auto-Scaler : un projet js à petit nœud qui fait évoluer les instances du projet Auto en fonction de la demande
Techniques :
SPA : JS / Typescript / Angulaire 7 / SASS / Gulp
Mise à l'échelle automatique : Node JS
API/Auto : PHP/Laravel/Elasticsearch/MySQL
* : Docker
Mac : ajoutez le volume de l'espace de travail avec :cached
. Ainsi - ./www-workspace:/var/www
devient - ./www-workspace:/var/www:cached
Linux : vous devrez peut-être exécuter sudo sysctl vm.max_map_count=262144
pour vous assurer qu'elasticsearch peut s'exécuter correctement
Picili est complètement dockerisé.
cd
dans le dossier racine
créez et configurez un fichier env à partir de l'exemple cp .env.sample .env
, en veillant à mettre à jour les clés suivantes :
APP_KEY (doit contenir 32 caractères)
APP_URL (par exemple http://localhost)
DROPBOX_CLIENT_ID (clé d'application)
DROPBOX_CLIENT_SECRET (secret de l'application)
API_GOOGLE_ELEVATION_KEY
API_OPEN_CAGE_KEY
API_IMAGGA_KEY
API_IMAGGA_SECRET
API_PLANT_NET_KEY
AWS_KEY
AWS_SECRET
AWS_REGION
exécutez docker-compose up -d
pour construire
La première fois que vous exécutez picili localement, vous devez générer les données de départ nécessaires :
docker-compose run workspace bash "./local-setup.sh"
picili est maintenant prêt à fonctionner et devrait être accessible depuis http://localhost
Cliquez sur « Connexion », puis inscrivez-vous pour commencer.
Vous devrez démarrer l'auto-scalaire pour que le traitement de l'image se fasse « en arrière-plan ».
Pour démarrer le(s) processeur(s) automatique(s) : cd /var/www/auto-scaler && npm start
(cela doit être exécuté à partir du conteneur d'espace de travail - docker-compose run workspace bash "cd /var/www/auto-scaler && npm start"
)
Faites tout ce qui concerne le développement dans le conteneur d'espace de travail : docker-compose run workspace bash
Tests API : cd /var/www/user-api-laravel && vendor/bin/phpunit
Tests automatiques : cd /var/www/auto && vendor/bin/phpunit
cd /var/www/user-api-laravel && vendor/bin/phpunit --filter testUpdateDropboxFilesource tests/Feature/BlackboxTest
SPA : http://localhost
API directement : http://localhost:81
PHP monAdmin : http://localhost:8080
hôte : mysql
utilisateur : root
mot de passe : mot de passe (ne suit pas du tout les valeurs d'environnement..)
Kibana http://localhost:5601/
navigateur de console : http://localhost:5601/app/kibana#/dev_tools/console?_g=()
déjà vu http://localhost:1358
En entrant soigneusement les détails du cluster, l'URI doit contenir le protocole et le port ainsi que l'hôte : (uri : http://localhost:9200
et index : files
)
API TS : http://localhost:3200/graphql
Interface React TS : http://localhost:3201
(à exécuter à partir du conteneur d'espace de travail)
supprimer élastique : cd /var/www/auto && php artisan elastic-delete
créer un index élastique : cd /var/www/auto && php artisan elastic-create
réindexer : cd /var/www/auto && php artisan index-all
recréer : cd /var/www/auto && php artisan elastic-delete && php artisan elastic-create
all (recréer et réindexer) : cd /var/www/auto && php artisan elastic-delete && php artisan elastic-create && php artisan index-all
hôte : 127.0.0.1
utilisateur : root
mot de passe : mot de passe
Est géré à partir d’un spa
de conteneur Docker. Le spa est construit et fonctionne en standard, il suffit donc de travailler sur la source du spa et il continuera à se reconstruire automatiquement. Si vous souhaitez accéder au conteneur, exécutez docker-compose run spa sh
L'application est servie sur localhost:80
et communique avec l'API qui s'exécute sur localhost:81
(en supposant que vous avez déjà exécuté docker-compose up [-d]
pour démarrer le « backend ».
Si vous envisagez de modifier des fichiers sass, exécutez également docker-compose run spa yarn run gulp-watch
.
Le débogage est activé via une tâche vscode. Ajoutez des points d'arrêt à n'importe quel code côté serveur, puis appuyez sur F5 pour démarrer le débogage. L'application se mettra en pause lorsqu'elle atteindra (via une requête http) un point d'arrêt.
localement, le SPA et l'API s'exécutent respectivement sur les ports localhost 80 et 81. En production, ils fonctionnent tous deux sur le port 80 et sont servis sur le même site Web. L'API sert le SPA qui a été copié dans son dossier public dans le cadre du processus de construction.
angulaire - ancien - SPA : https://[YOUR IP/SITE]
php - ancien - API : https://[YOUR IP/SITE]:81
réagir - nouveau - SPA : http://[YOUR IP/SITE]:82
(remarque : pas https/ssl)
ts - nouveau - API : https://[YOUR IP/SITE]:3200
bash ./deploy-scripts/initial-deploy
créera/configurara un VPS et configurera le projet.
Séparément :
mettez à jour votre application Dropbox pour avoir un URI de redirection autorisé : https://[YOUR IP/SITE]/oauth/dropbox
git push/fusionner les modifications vers master
mettre à jour les fichiers distants, redémarrer les images (y compris le mise à l'échelle automatique, reconstruit également le spa) bash ./deploy-scripts/run-remote-update.sh
*Si les modifications étaient dans le SPA, videz les caches (par exemple cloudflare)
Frappez dans un conteneur pour voir ce qui se passe :
Connectez-vous en ssh au serveur : docker-machine ssh picili
spa : docker-compose -f docker-compose.prod.yml run spa sh
php-fpm : docker-compose -f docker-compose.prod.yml run php-fpm bash
espace de travail : docker-compose -f docker-compose.prod.yml run workspace bash
Téléchargez un fichier journal : docker-machine scp picili:/picili/www-workspace/user-api-laravel/storage/logs/laravel.log .
va télécharger le fichier laravel.log
dans le répertoire local
Téléchargez tous les journaux (vers ./serverlogs
) : bash ./deploy-scripts/download.logs.sh