ПРИМЕЧАНИЕ. ЭТОТ РЕПО БЫЛ ЗАМЕНЕН НА picili-ts.
picili — это автоматизированная поисковая система/браузер изображений, которая синхронизируется с выбранной папкой в вашем Dropbox. Он автоматически анализирует все имеющиеся изображения, сохраняя актуальность любых изображений, которые вы добавляете, удаляете или изменяете. Легкое веб-приложение облегчает просмотр и поиск ваших фотографий. Веб-приложение было разработано с учетом различных типов тегов, по которым picili классифицирует ваши изображения. Он использует некоторые внешние API для помощи с тегами, но разработан так, чтобы оставаться в рамках бесплатного уровня каждого из них. Так что платить нужно только за VPS.
созданные типы тегов | требуются данные GPS exif | Использует внешний API |
---|---|---|
каталоги | ||
дата | ||
exif-данные | ||
предмет | ✓ | |
адрес/местоположение | ✓ | ✓ |
высота | ✓ | ✓ |
виды растений | ✓ | |
номерные знаки | ✓ | |
текст / распознавание текста | ✓ |
Как это работает
Настраивать
Работаем над пикили
Развертывание
пользователь регистрируется и подключает свою учетную запись Dropbox через OAuth
затем пользователь входит в папку в своем Dropbox, где он хранит свои фотографии.
picili опрашивает Dropbox каждые x минут, получая список файлов.
сравнивается со всеми файлами, которые он определил на данный момент.
добавляет любые новые файлы в локальный список и ставит их в очередь на импорт, а также удаляет все удаленные файлы.
файлы в очереди загружаются локально, обрабатываются и затем удаляются локально
обработка состоит из
геокодирование: получить информацию о местоположении (через внешний API)
кодирование высоты: получение высоты в метрах по широте/долготе (через внешний API)
создание миниатюр
извлечение exif-информации
определение цвета
отправка изображения в API распознавания предметов
если изображение содержит данные geo exif
Основные части:
SPA: интерфейс представляет собой одностраничное приложение Angular (SPA).
API: PHP API, созданный с использованием laravel, который вызывает SPA.
Авто: отдельный проект, работающий в фоновом режиме, который также является проектом Laravel PHP, он выполняет всю синхронизацию Dropbox и тегирование/обработку файлов.
Auto-Scaler: небольшой js-проект узла, который масштабирует экземпляры проекта Auto в зависимости от спроса.
Техники:
SPA: JS/Typescript/Angular 7/SASS/Gulp
Автомасштабирование: Node JS
API / Авто: PHP / Laravel / Elasticsearch / MySQL
*: Докер
Mac: добавьте том рабочей области с помощью :cached
. Итак - ./www-workspace:/var/www
становится - ./www-workspace:/var/www:cached
Linux: вам может потребоваться запустить sudo sysctl vm.max_map_count=262144
, чтобы убедиться, что elasticsearch работает правильно.
Picili полностью докеризован.
cd
в корневую папку
создайте и настройте файл env из примера cp .env.sample .env
, обязательно обновив следующие ключи:
APP_KEY (должно быть 32 символа)
APP_URL (например, http://localhost)
DROPBOX_CLIENT_ID (ключ приложения)
DROPBOX_CLIENT_SECRET (секрет приложения)
API_GOOGLE_ELEVATION_KEY
API_OPEN_CAGE_KEY
API_IMAGGA_KEY
API_IMAGGA_SECRET
API_PLANT_NET_KEY
AWS_KEY
AWS_SECRET
AWS_REGION
запустите docker-compose up -d
для сборки
При первом локальном запуске picili вам необходимо сгенерировать необходимые начальные данные:
docker-compose run workspace bash "./local-setup.sh"
picili теперь готов к работе и должен быть доступен по адресу http://localhost
Нажмите «Войти», а затем зарегистрируйтесь, чтобы начать.
Вам нужно будет запустить автоскаляр, чтобы обработка изображений происходила «в фоновом режиме».
Чтобы запустить автоматический процессор(ы): cd /var/www/auto-scaler && npm start
(это следует запускать из контейнера рабочей области — docker-compose run workspace bash "cd /var/www/auto-scaler && npm start"
)
Делайте все, что связано с разработкой, в контейнере рабочей области: docker-compose run workspace bash
Тесты API: cd /var/www/user-api-laravel && vendor/bin/phpunit
Автоматические тесты: cd /var/www/auto && vendor/bin/phpunit
cd /var/www/user-api-laravel && vendor/bin/phpunit --filter testUpdateDropboxFilesource tests/Feature/BlackboxTest
СПА: http://localhost
API напрямую: http://localhost:81
Мой администратор PHP: http://localhost:8080
хост: MySQL
пользователь: root
пароль: пароль (вообще не соответствует значениям env..)
кибана http://localhost:5601/
консольный браузер: http://localhost:5601/app/kibana#/dev_tools/console?_g=()
дежавю http://localhost:1358
Внимательно вводите сведения о кластере. URI должен содержать протокол и порт вместе с хостом: (uri: http://localhost:9200
и индекс: files
).
API TS: http://localhost:3200/graphql
Интерфейс React TS: http://localhost:3201
(запускается из контейнера рабочей области)
удалить резинку: cd /var/www/auto && php artisan elastic-delete
создать эластичный индекс: cd /var/www/auto && php artisan elastic-create
повторный индекс: cd /var/www/auto && php artisan index-all
пересоздать: cd /var/www/auto && php artisan elastic-delete && php artisan elastic-create
все (пересоздать и переиндексировать): cd /var/www/auto && php artisan elastic-delete && php artisan elastic-create && php artisan index-all
хост: 127.0.0.1
пользователь: root
пароль: пароль
Запускается из docker-контейнера spa
. Спа построен и работает в стандартном режиме, поэтому просто поработайте над источником спа, и он будет автоматически восстанавливаться. Если вы хотите войти в контейнер, запустите docker-compose run spa sh
Приложение обслуживается на localhost:80
и взаимодействует с API, который работает на localhost:81
(при условии, что вы уже запустили docker-compose up [-d]
для запуска «бэкэнда».
Если вы планируете редактировать файлы SASS, также запустите docker-compose run spa yarn run gulp-watch
.
Отладка включается с помощью задачи vscode. Добавьте точки останова в любой серверный код, затем нажмите F5, чтобы начать отладку. Приложение приостановит работу, когда достигнет (через http-запрос) точки останова.
локально SPA и API работают на локальных портах 80 и 81 соответственно. В производственной среде они оба работают через порт 80 и обслуживаются как один и тот же веб-сайт. API обслуживает SPA, который был скопирован в общую папку в рамках процесса сборки.
angular - старый - SPA: https://[YOUR IP/SITE]
php — старый — API: https://[YOUR IP/SITE]:81
реакция - новое - SPA: http://[YOUR IP/SITE]:82
(примечание: не https/ssl)
ts - новое - API: https://[YOUR IP/SITE]:3200
bash ./deploy-scripts/initial-deploy
создаст/настроит VPS и настроит проект.
Отдельно:
обновите приложение Dropbox, чтобы иметь разрешенный URI перенаправления: https://[YOUR IP/SITE]/oauth/dropbox
git push/merge изменения в мастер
обновить удаленные файлы, перезапустить изображения (включая автоматическое масштабирование, также перестраивает спа) bash ./deploy-scripts/run-remote-update.sh
*Если изменения были в SPA, очистите кеши (например, Cloudflare).
Ударьте по контейнеру, чтобы увидеть, что происходит:
Подключение к серверу по ssh: docker-machine ssh picili
спа: docker-compose -f docker-compose.prod.yml run spa sh
php-fpm: docker-compose -f docker-compose.prod.yml run php-fpm bash
рабочая область: docker-compose -f docker-compose.prod.yml run workspace bash
Загрузите файл журнала: docker-machine scp picili:/picili/www-workspace/user-api-laravel/storage/logs/laravel.log .
загрузит файл laravel.log
в локальный каталог
Загрузите все журналы (в ./serverlogs
): bash ./deploy-scripts/download.logs.sh