NOTA: ESTE REPO FOI SUBSTITUÍDO POR picili-ts.
picili é um mecanismo/navegador automatizado de busca de imagens que sincroniza com uma pasta escolhida em sua caixa de depósito. Ele analisa automaticamente todas as fotos, mantendo-se atualizado com todas as fotos que você adiciona, remove ou altera. Um aplicativo da web leve facilita a navegação e pesquisa em suas fotos. O aplicativo da web foi projetado para um alinhamento perfeito com os diferentes tipos de tags com as quais o picili categoriza suas fotos. Ele usa algumas APIs externas para auxiliar na marcação, mas foi projetado para permanecer dentro do nível gratuito de cada uma. Portanto, apenas um VPS precisa ser pago.
tipos de tag gerados | requer dados exif de GPS | Usa API externa |
---|---|---|
diretórios | ||
data | ||
dados exif | ||
assunto | ✓ | |
endereço/localização | ✓ | ✓ |
elevação | ✓ | ✓ |
espécies de plantas | ✓ | |
matrículas | ✓ | |
texto / OCR | ✓ |
Como funciona
Configurar
Trabalhando em picili
Implantando
o usuário registra e conecta sua conta dropbox através do OAuth
o usuário então insere uma pasta em sua caixa de depósito onde armazena suas fotos
picili pesquisa o dropbox a cada x minutos, obtendo uma lista de arquivos.
compara com todos os arquivos identificados até agora.
adiciona novos arquivos a uma lista local e os coloca na fila para serem importados e remove todos os arquivos excluídos.
cada arquivo enfileirado é baixado localmente, processado e excluído localmente
processamento consiste em
geocodificação: obtenha informações de localização (via API externa)
codificação de altitude: deriva a elevação em metros da latitude/longitude (por meio de uma API externa)
criando miniaturas
extraindo informações exif
determinando cores
enviando a imagem para uma API de reconhecimento de assunto
se a imagem contiver dados geo exif
Partes principais:
SPA: o front-end é um aplicativo Angular de página única (SPA)
API: uma API PHP feita em laravel que o SPA chama
Automático: um projeto separado rodando em segundo plano que também é um projeto Laravel PHP, que faz toda a sincronização da caixa de depósito e marcação/processamento de arquivos.
Auto-Scaler: um pequeno projeto de nó js que amplia instâncias do projeto Auto com base na demanda
Técnicas:
SPA: JS / Typescript / Angular 7 / SASS / Gulp
Escalonador automático: Node JS
API / Automático: PHP / Laravel / Elasticsearch / MySQL
*: Docker
Mac: anexe o volume do espaço de trabalho com :cached
. Então - ./www-workspace:/var/www
se torna - ./www-workspace:/var/www:cached
Linux: pode ser necessário executar sudo sysctl vm.max_map_count=262144
para garantir que o elasticsearch possa ser executado corretamente
Picili está completamente dockerizado.
cd
na pasta raiz
crie e configure um arquivo env a partir da amostra cp .env.sample .env
, certificando-se de atualizar as seguintes chaves:
APP_KEY (deve ter 32 caracteres)
APP_URL (por exemplo, http://localhost)
DROPBOX_CLIENT_ID (chave do aplicativo)
DROPBOX_CLIENT_SECRET (segredo do aplicativo)
API_GOOGLE_ELEVATION_KEY
API_OPEN_CAGE_KEY
API_IMAGGA_KEY
API_IMAGGA_SECRET
API_PLANT_NET_KEY
AWS_KEY
AWS_SECRET
AWS_REGION
execute docker-compose up -d
para construir
Na primeira vez que você executar o picili localmente, você deverá gerar os dados iniciais necessários:
docker-compose run workspace bash "./local-setup.sh"
picili agora está pronto para ser executado e deve estar acessível em http://localhost
Clique em 'login' e registre-se para começar.
Você precisará iniciar o escalar automático para que o processamento da imagem aconteça 'em segundo plano'.
Para iniciar o(s) processador(es) automático(s): cd /var/www/auto-scaler && npm start
(isso deve ser executado de dentro do contêiner do espaço de trabalho - docker-compose run workspace bash "cd /var/www/auto-scaler && npm start"
)
Faça tudo relacionado ao desenvolvimento no contêiner do espaço de trabalho: docker-compose run workspace bash
Testes de API: cd /var/www/user-api-laravel && vendor/bin/phpunit
Testes automáticos: 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 diretamente: http://localhost:81
PHP meuAdmin: http://localhost:8080
anfitrião: mysql
usuário: root
senha: senha (não segue os valores do env..)
kibana http://localhost:5601/
navegador do console: http://localhost:5601/app/kibana#/dev_tools/console?_g=()
dejavu http://localhost:1358
Ao inserir cuidadosamente os detalhes do cluster, o URI deve conter o protocolo e a porta junto com o host: (uri: http://localhost:9200
e index: files
)
API TS: http://localhost:3200/graphql
Interface do React TS: http://localhost:3201
(para ser executado a partir do contêiner do espaço de trabalho)
excluir elástico: cd /var/www/auto && php artisan elastic-delete
criar índice elástico: cd /var/www/auto && php artisan elastic-create
reindexar: cd /var/www/auto && php artisan index-all
recriar: cd /var/www/auto && php artisan elastic-delete && php artisan elastic-create
todos (recriar e reindexar): cd /var/www/auto && php artisan elastic-delete && php artisan elastic-create && php artisan index-all
anfitrião: 127.0.0.1
usuário: root
senha: senha
É executado a partir de um docker container spa
. O Spa é construído e operado como padrão, então basta trabalhar na fonte do spa e ele continuará sendo reconstruído automaticamente. Se você quiser entrar no contêiner, execute docker-compose run spa sh
O aplicativo é servido em localhost:80
e se comunica com a API que é executada em localhost:81
(presumindo que você já tenha executado docker-compose up [-d]
para iniciar o 'backend'.
Se você planeja editar arquivos sass, execute também docker-compose run spa yarn run gulp-watch
.
A depuração é habilitada por meio de uma tarefa vscode. Adicione pontos de interrupção a qualquer código do servidor e pressione F5 para iniciar a depuração. O aplicativo fará uma pausa quando atingir (por meio de uma solicitação http) um ponto de interrupção.
localmente, o SPA e a API são executados nas portas localhost 80 e 81, respectivamente. Em produção, ambos rodam na porta 80 e são servidos no mesmo site. A API atende o SPA que foi copiado para sua pasta pública como parte do processo de construção.
angular - antigo - SPA: https://[YOUR IP/SITE]
php - antigo - API: https://[YOUR IP/SITE]:81
react - novo - SPA: http://[YOUR IP/SITE]:82
(nota: não https/ssl)
ts - novo - API: https://[YOUR IP/SITE]:3200
bash ./deploy-scripts/initial-deploy
criará/configurará um VPS e configurará o projeto.
Separadamente:
atualize seu aplicativo dropbox para ter um URI de redirecionamento permitido: https://[YOUR IP/SITE]/oauth/dropbox
git push/merge alterações para master
atualizar arquivos remotos, reiniciar imagens (incluindo escalonador automático, também reconstrói spa) bash ./deploy-scripts/run-remote-update.sh
*Se as alterações foram no SPA, limpe os caches (por exemplo, cloudflare)
Bash em um contêiner para ver o que está acontecendo:
ssh no 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
espaço de trabalho: docker-compose -f docker-compose.prod.yml run workspace bash
Baixe um arquivo de log: docker-machine scp picili:/picili/www-workspace/user-api-laravel/storage/logs/laravel.log .
irá baixar o arquivo laravel.log
no diretório local
Baixe todos os logs (para ./serverlogs
): bash ./deploy-scripts/download.logs.sh