HINWEIS: DIESES REPO WURDE DURCH picili-ts ERSETZT.
picili ist eine automatisierte Bildsuchmaschine/ein Browser, der sich mit einem ausgewählten Ordner in Ihrer Dropbox synchronisiert. Es analysiert automatisch alle dort vorhandenen Bilder und bleibt über alle Bilder auf dem Laufenden, die Sie hinzufügen, entfernen oder ändern. Eine leichte Web-App erleichtert das Durchsuchen und Durchsuchen Ihrer Bilder. Die Web-App wurde so konzipiert, dass sie genau auf die verschiedenen Arten von Tags abgestimmt ist, mit denen Picili Ihre Bilder kategorisiert. Es verwendet einige externe APIs, um das Tagging zu unterstützen, ist jedoch so konzipiert, dass es innerhalb der jeweils kostenlosen Stufe bleibt. Es muss also nur ein VPS bezahlt werden.
Tag-Typen generiert | erfordert GPS-Exif-Daten | Verwendet externe API |
---|---|---|
Verzeichnisse | ||
Datum | ||
Exif-Daten | ||
Thema | ✓ | |
Adresse/Standort | ✓ | ✓ |
Elevation | ✓ | ✓ |
Pflanzenarten | ✓ | |
Nummernschilder | ✓ | |
Text / OCR | ✓ |
Wie es funktioniert
Aufstellen
Arbeite an Picili
Bereitstellen
Der Benutzer registriert sich und verbindet sein Dropbox-Konto über OAuth
Der Benutzer gibt dann einen Ordner in seiner Dropbox ein, in dem er seine Bilder speichert
picili fragt die Dropbox alle x Minuten ab und erhält eine Liste der Dateien.
vergleicht mit allen bisher identifizierten Dateien.
Fügt alle neuen Dateien zu einer lokalen Liste hinzu, stellt sie zum Importieren in die Warteschlange und entfernt alle jetzt gelöschten Dateien.
Dateien in der Warteschlange werden jeweils lokal heruntergeladen, verarbeitet und dann lokal gelöscht
Die Verarbeitung besteht aus
Geokodierung: Standortinformationen abrufen (über externe API)
Höhenkodierung: Höhe in Metern aus Breiten-/Längengrad ableiten (über eine externe API)
Miniaturansichten erstellen
Exif-Informationen extrahieren
Farben bestimmen
Senden des Bildes an eine Motiverkennungs-API
wenn das Bild Geo-Exif-Daten enthält
Hauptteile:
SPA: Das Frontend ist eine Angular Single Page Application (SPA)
API: eine mit Laravel erstellte PHP-API, die vom SPA aufgerufen wird
Auto: Ein separates Projekt, das im Hintergrund läuft und auch ein Laravel-PHP-Projekt ist. Es übernimmt die gesamte Dropbox-Synchronisierung und Datei-Tagging/-Verarbeitung.
Auto-Scaler: Ein kleines Node-JS-Projekt, das Instanzen des Auto-Projekts je nach Bedarf skaliert
Technik:
SPA: JS / Typescript / Angular 7 / SASS / Gulp
Auto-Scaler: Node JS
API / Auto: PHP / Laravel / Elasticsearch / MySQL
*: Docker
Mac: Hängen Sie das Arbeitsbereichsvolume mit :cached
. Also wird - ./www-workspace:/var/www
- ./www-workspace:/var/www:cached
Linux: Möglicherweise müssen Sie sudo sysctl vm.max_map_count=262144
ausführen, um sicherzustellen, dass Elasticsearch ordnungsgemäß ausgeführt werden kann
Picili ist vollständig dockerisiert.
cd
in den Stammordner
Erstellen und konfigurieren Sie eine env-Datei aus dem Beispiel cp .env.sample .env
und achten Sie darauf, die folgenden Schlüssel zu aktualisieren:
APP_KEY (muss 32 Zeichen lang sein)
APP_URL (z. B. http://localhost)
DROPBOX_CLIENT_ID (App-Schlüssel)
DROPBOX_CLIENT_SECRET (App-Geheimnis)
API_GOOGLE_ELEVATION_KEY
API_OPEN_CAGE_KEY
API_IMAGGA_KEY
API_IMAGGA_SECRET
API_PLANT_NET_KEY
AWS_KEY
AWS_SECRET
AWS_REGION
Führen Sie docker-compose up -d
aus, um zu erstellen
Wenn Sie picili zum ersten Mal lokal ausführen, sollten Sie die erforderlichen Startdaten generieren:
docker-compose run workspace bash "./local-setup.sh"
picili ist jetzt betriebsbereit und sollte über http://localhost
zugänglich sein
Klicken Sie auf „Anmelden“ und registrieren Sie sich dann, um zu beginnen.
Sie müssen die automatische Skalarfunktion starten, damit die Bildverarbeitung „im Hintergrund“ erfolgen kann.
So starten Sie den bzw. die automatischen Prozessoren: cd /var/www/auto-scaler && npm start
(dies sollte aus dem Workspace-Container heraus ausgeführt werden – docker-compose run workspace bash "cd /var/www/auto-scaler && npm start"
)
Führen Sie im Workspace-Container alles aus, was mit Dev zu tun hat: docker-compose run workspace bash
API-Tests: cd /var/www/user-api-laravel && vendor/bin/phpunit
Automatische Tests: 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 direkt: http://localhost:81
PHP myAdmin: http://localhost:8080
Host: MySQL
Benutzer: root
Passwort: Passwort (folgt überhaupt nicht den Umgebungswerten.)
kibana http://localhost:5601/
Konsolenbrowser: http://localhost:5601/app/kibana#/dev_tools/console?_g=()
dejavu http://localhost:1358
Geben Sie die Clusterdetails sorgfältig ein. Der URI sollte das Protokoll und den Port sowie den Host enthalten: (uri: http://localhost:9200
und index: files
)
TS-API: http://localhost:3200/graphql
React TS-Frontend: http://localhost:3201
(aus dem Arbeitsbereich-Container auszuführen)
Elastic löschen: cd /var/www/auto && php artisan elastic-delete
Erstellen Sie einen elastischen Index: cd /var/www/auto && php artisan elastic-create
Neu indizieren: cd /var/www/auto && php artisan index-all
neu erstellen: cd /var/www/auto && php artisan elastic-delete && php artisan elastic-create
alle (neu erstellen und neu indizieren): cd /var/www/auto && php artisan elastic-delete && php artisan elastic-create && php artisan index-all
Host: 127.0.0.1
Benutzer: root
Passwort: Passwort
Wird in einem Docker-Container spa
ausgeführt. Das Spa wird standardmäßig erstellt und betrieben. Arbeiten Sie also einfach an der Spa-Quelle und es wird automatisch immer wieder neu aufgebaut. Wenn Sie den Container betreten möchten, führen Sie docker-compose run spa sh
aus
Die App wird auf localhost:80
bereitgestellt und kommuniziert mit der API, die auf localhost:81
ausgeführt wird (vorausgesetzt, Sie haben bereits docker-compose up [-d]
ausgeführt, um das „Backend“ zu starten.
Wenn Sie Sass-Dateien bearbeiten möchten, führen Sie auch docker-compose run spa yarn run gulp-watch
aus.
Das Debuggen wird über eine vscode-Aufgabe aktiviert. Fügen Sie Haltepunkte zu jedem serverseitigen Code hinzu und drücken Sie dann F5, um mit dem Debuggen zu beginnen. Die App wird angehalten, wenn sie (über eine HTTP-Anfrage) einen Haltepunkt erreicht.
Lokal werden SPA und API auf den Localhost-Ports 80 bzw. 81 ausgeführt. In der Produktion laufen beide auf Port 80 und werden über dieselbe Website bedient. Die API bedient die SPA, die im Rahmen des Build-Prozesses in ihren öffentlichen Ordner kopiert wurde.
eckig - alt - SPA: https://[YOUR IP/SITE]
php – alt – API: https://[YOUR IP/SITE]:81
reagieren – neu – SPA: http://[YOUR IP/SITE]:82
(Hinweis: nicht https/ssl)
ts – neu – API: https://[YOUR IP/SITE]:3200
bash ./deploy-scripts/initial-deploy
erstellt/konfiguriert einen VPS und richtet das Projekt ein.
Separat:
Aktualisieren Sie Ihre Dropbox-App so, dass sie über einen zulässigen Weiterleitungs-URI verfügt: https://[YOUR IP/SITE]/oauth/dropbox
Git Push/Merge ändert sich zum Master
Remote-Dateien aktualisieren, Images neu starten (einschließlich Autoskalierung, erstellt auch Spa neu) bash ./deploy-scripts/run-remote-update.sh
*Wenn die Änderungen im SPA erfolgten, Caches leeren (z. B. Cloudflare)
Bash in einen Container, um zu sehen, was los ist:
SSH-Eingang zum Server: 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
Arbeitsbereich: docker-compose -f docker-compose.prod.yml run workspace bash
Laden Sie eine Protokolldatei herunter: docker-machine scp picili:/picili/www-workspace/user-api-laravel/storage/logs/laravel.log .
lädt die Datei laravel.log
in das lokale Verzeichnis herunter
Laden Sie alle Protokolle herunter (nach ./serverlogs
): bash ./deploy-scripts/download.logs.sh