NOTA: ESTE REPO HA SIDO REEMPLAZADO POR picili-ts.
picili es un motor/navegador de búsqueda de imágenes automatizado que se sincroniza con una carpeta elegida en su Dropbox. Analiza automáticamente todas las imágenes allí y se mantiene actualizado con cualquier imagen que agregue, elimine o cambie. Una aplicación web liviana facilita la navegación y la búsqueda de sus imágenes. La aplicación web ha sido diseñada para una estrecha alineación con los diferentes tipos de etiquetas con las que Picili clasifica sus imágenes. Utiliza algunas API externas para ayudar con el etiquetado, pero está diseñado para permanecer dentro del nivel gratuito de cada una. Por lo tanto, sólo es necesario pagar por un VPS.
tipos de etiquetas generadas | requiere datos exif de GPS | Utiliza API externa |
---|---|---|
directorios | ||
fecha | ||
datos exif | ||
sujeto | ✓ | |
dirección / ubicación | ✓ | ✓ |
elevación | ✓ | ✓ |
especies de plantas | ✓ | |
matrículas | ✓ | |
texto/OCR | ✓ |
como funciona
Configuración
Trabajando en picili
Implementando
El usuario se registra y conecta su cuenta de Dropbox a través de OAuth.
Luego, el usuario ingresa a una carpeta en su Dropbox donde almacena sus imágenes.
picili sondea Dropbox cada x minutos y obtiene una lista de archivos.
se compara con todos los archivos que ha identificado hasta el momento.
agrega los nuevos a una lista local y los pone en cola para importarlos, y elimina los archivos ahora eliminados.
Los archivos en cola se descargan localmente, se procesan y luego se eliminan localmente.
procesamiento consiste en
codificación geográfica: obtenga información de ubicación (a través de API externa)
Codificación de altitud: deriva la elevación en metros a partir de la latitud/longitud (a través de una API externa)
creando miniaturas
extrayendo información exif
determinando colores
enviar la imagen a una API de reconocimiento de sujeto
si la imagen contiene datos geo exif
Partes principales:
SPA: el front-end es una aplicación Angular de una sola página (SPA)
API: una API PHP hecha con laravel a la que llama el SPA
Automático: un proyecto separado que se ejecuta en segundo plano y que también es un proyecto PHP de Laravel, realiza toda la sincronización de Dropbox y el etiquetado/procesamiento de archivos.
Auto-Scaler: un pequeño proyecto de nodo js que amplía las instancias del proyecto Auto según la demanda.
Técnicos:
SPA: JS / Mecanografiado / Angular 7 / SASS / Gulp
Escalador automático: Nodo JS
API / Automático: PHP / Laravel / Elasticsearch / MySQL
*: acoplador
Mac: agregue el volumen del espacio de trabajo con :cached
. Entonces - ./www-workspace:/var/www
se convierte en - ./www-workspace:/var/www:cached
Linux: es posible que necesite ejecutar sudo sysctl vm.max_map_count=262144
para garantizar que elasticsearch pueda ejecutarse correctamente
Picili está completamente acoplado.
cd
en la carpeta raíz
cree y configure un archivo env a partir del cp .env.sample .env
de muestra, asegurándose de actualizar las siguientes claves:
APP_KEY (debe tener 32 caracteres)
APP_URL (por ejemplo, http://localhost)
DROPBOX_CLIENT_ID (clave de aplicación)
DROPBOX_CLIENT_SECRET (secreto de aplicación)
API_GOOGLE_ELEVATION_KEY
API_OPEN_CAGE_KEY
API_IMAGGA_KEY
API_IMAGGA_SECRET
API_PLANT_NET_KEY
AWS_KEY
AWS_SECRET
AWS_REGION
ejecute docker-compose up -d
para compilar
La primera vez que ejecuta picili localmente, debe generar los datos semilla necesarios:
docker-compose run workspace bash "./local-setup.sh"
picili ahora está listo para ejecutarse y debería ser accesible desde http://localhost
Haga clic en 'iniciar sesión' y luego regístrese para comenzar.
Deberá iniciar el escalar automático para que el procesamiento de imágenes se realice "en segundo plano".
Para iniciar los procesadores automáticos: cd /var/www/auto-scaler && npm start
(esto debe ejecutarse desde el contenedor del espacio de trabajo - docker-compose run workspace bash "cd /var/www/auto-scaler && npm start"
)
Haga todo lo relacionado con el desarrollo en el contenedor del espacio de trabajo: docker-compose run workspace bash
Pruebas API: cd /var/www/user-api-laravel && vendor/bin/phpunit
Pruebas automáticas: 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 directamente: http://localhost:81
PHP miAdmin: http://localhost:8080
anfitrión: mysql
usuario: raíz
contraseña: contraseña (no sigue los valores env en absoluto...)
kibanahttp://localhost:5601/
navegador de consola: http://localhost:5601/app/kibana#/dev_tools/console?_g=()
dejavú http://localhost:1358
Tenga cuidado al ingresar los detalles del clúster, el URI debe contener el protocolo y el puerto junto con el host: (uri: http://localhost:9200
e índice: files
)
API de TS: http://localhost:3200/graphql
Interfaz de React TS: http://localhost:3201
(para ejecutar desde el contenedor del espacio de trabajo)
eliminar elástico: cd /var/www/auto && php artisan elastic-delete
crear índice elástico: cd /var/www/auto && php artisan elastic-create
volver a indexar: cd /var/www/auto && php artisan index-all
volver a crear: cd /var/www/auto && php artisan elastic-delete && php artisan elastic-create
todo (volver a crear y volver a indexar): cd /var/www/auto && php artisan elastic-delete && php artisan elastic-create && php artisan index-all
anfitrión: 127.0.0.1
usuario: raíz
contraseña: contraseña
Se ejecuta desde dentro de un spa
de contenedor acoplable. El Spa se construye y ejecuta de forma estándar, por lo que simplemente trabaje en la fuente del spa y seguirá reconstruyéndose automáticamente. Si desea ingresar al contenedor, ejecute docker-compose run spa sh
La aplicación se sirve en localhost:80
y se comunica con la API que se ejecuta en localhost:81
(suponiendo que ya haya ejecutado docker-compose up [-d]
para iniciar el 'backend'.
Si planea editar archivos sass, ejecute también docker-compose run spa yarn run gulp-watch
.
La depuración se habilita mediante una tarea vscode. Agregue puntos de interrupción a cualquier código del servidor y luego presione F5 para iniciar la depuración. La aplicación se detendrá cuando llegue (a través de una solicitud http) a un punto de interrupción.
localmente, el SPA y la API se ejecutan en los puertos 80 y 81 del host local respectivamente. En producción, ambos se ejecutan en el puerto 80 y funcionan como el mismo sitio web. La API sirve al SPA que se ha copiado en su carpeta pública como parte del proceso de compilación.
angular - antiguo - SPA: https://[YOUR IP/SITE]
php - antiguo - API: https://[YOUR IP/SITE]:81
reaccionar - nuevo - SPA: http://[YOUR IP/SITE]:82
(nota: no https/ssl)
ts - nuevo - API: https://[YOUR IP/SITE]:3200
bash ./deploy-scripts/initial-deploy
creará/configurará un VPS y configurará el proyecto.
Por separado:
actualice su aplicación de Dropbox para tener un URI de redireccionamiento permitido: https://[YOUR IP/SITE]/oauth/dropbox
git push/merge cambia al maestro
actualice archivos remotos, reinicie imágenes (incluido el escalador automático, también reconstruye el spa) bash ./deploy-scripts/run-remote-update.sh
*Si los cambios fueron en el SPA, vacíe las cachés (por ejemplo, cloudflare)
Golpea un contenedor para ver qué está pasando:
ssh en el servidor: 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
espacio de trabajo: docker-compose -f docker-compose.prod.yml run workspace bash
Descargue un archivo de registro: docker-machine scp picili:/picili/www-workspace/user-api-laravel/storage/logs/laravel.log .
descargará el archivo laravel.log
en el directorio local
Descargue todos los registros (a ./serverlogs
): bash ./deploy-scripts/download.logs.sh