참고: 이 저장소는 picili-ts로 대체되었습니다.
picili는 보관용 계정에서 선택한 폴더와 동기화되는 자동화된 이미지 검색 엔진/브라우저입니다. 이 앱은 거기에 있는 모든 사진을 자동으로 분석하여 추가, 제거 또는 변경한 모든 사진을 최신 상태로 유지합니다. 가벼운 웹 앱을 사용하면 사진을 쉽게 찾아보고 검색할 수 있습니다. 웹앱은 picili가 사진을 분류하는 다양한 종류의 태그와 긴밀하게 정렬되도록 설계되었습니다. 태그 지정을 지원하기 위해 일부 외부 API를 사용하지만 각각의 무료 계층 내에 유지되도록 설계되었습니다. 따라서 VPS에 대해서만 비용을 지불하면 됩니다.
생성된 태그 유형 | GPS EXIF 데이터가 필요합니다 | 외부 API를 사용합니다. |
---|---|---|
디렉토리 | ||
날짜 | ||
EXIF 데이터 | ||
주제 | ✓ | |
주소 / 위치 | ✓ | ✓ |
높이 | ✓ | ✓ |
식물 종 | ✓ | |
번호판 | ✓ | |
텍스트/OCR | ✓ |
작동 방식
설정
picili 작업 중
배포 중
사용자는 OAuth를 통해 Dropbox 계정을 등록하고 연결합니다.
그런 다음 사용자는 보관용 계정에 사진을 저장하는 폴더를 입력합니다.
picili는 x분마다 Dropbox를 폴링하여 파일 목록을 가져옵니다.
지금까지 식별한 모든 파일과 비교합니다.
새 항목을 로컬 목록에 추가하고 가져오기 대기열에 추가하며 현재 삭제된 파일을 제거합니다.
대기 중인 파일은 각각 로컬로 다운로드되어 처리된 후 로컬로 삭제됩니다.
처리는 다음과 같이 구성됩니다.
지오코딩: 위치 정보 가져오기(외부 API를 통해)
고도 인코딩: 위도/경도에서 미터 단위의 고도를 파생합니다(외부 API를 통해).
축소판 만들기
EXIF 정보 추출
색상 결정
피사체 인식 API로 사진 보내기
사진에 지리 EXIF 데이터가 포함되어 있는 경우
주요 부품:
SPA: 프런트 엔드는 Angular SPA(단일 페이지 애플리케이션)입니다.
API: SPA가 호출하는 laravel을 사용하여 만든 PHP API
자동: Laravel PHP 프로젝트이기도 한 백그라운드에서 실행되는 별도의 프로젝트입니다. 이 프로젝트는 모든 보관용 계정 동기화 및 파일 태그 지정/처리를 수행합니다.
Auto-Scaler: 수요에 따라 Auto 프로젝트의 인스턴스를 확장하는 작은 노드 js 프로젝트
기술:
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: Elasticsearch가 올바르게 실행될 수 있도록 sudo sysctl vm.max_map_count=262144
실행해야 할 수도 있습니다.
Picili는 완전히 고정되어 있습니다.
cd
루트 폴더에 넣습니다
샘플 cp .env.sample .env
에서 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_비밀
AWS_지역
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
SPA: http://localhost
API 직접: http://localhost:81
PHP myAdmin: http://localhost:8080
호스트: mysql
사용자: 루트
비밀번호: 비밀번호(env 값을 전혀 따르지 않습니다..)
키바나 http://localhost:5601/
콘솔 브라우저: http://localhost:5601/app/kibana#/dev_tools/console?_g=()
데자부 http://localhost:1358
클러스터 세부 정보를 주의 깊게 입력하세요. URI에는 호스트와 함께 프로토콜과 포트가 포함되어야 합니다. (uri: http://localhost:9200
및 index: files
)
TS API: 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
사용자: 루트
비밀번호: 비밀번호
docker 컨테이너 spa
내에서 실행됩니다. 스파는 표준으로 구축 및 실행되므로 스파 소스에 대한 작업만 하면 자동으로 계속 재구축됩니다. 컨테이너에 들어가려면 docker-compose run spa sh
실행하세요.
앱은 localhost:80
에서 제공되며 localhost:81
에서 실행되는 API와 통신합니다('백엔드'를 시작하기 위해 이미 docker-compose up [-d]
실행했다고 가정).
Sass 파일을 편집할 계획이라면 docker-compose run spa yarn run gulp-watch
도 실행하세요.
디버깅은 vscode 작업을 통해 활성화됩니다. 서버측 코드에 중단점을 추가한 다음 F5 키를 눌러 디버깅을 시작합니다. http 요청을 통해 중단점에 도달하면 앱이 일시 중지됩니다.
로컬에서는 SPA와 API가 각각 localhost 포트 80과 81에서 실행됩니다. 프로덕션에서는 둘 다 포트 80에서 실행되며 동일한 웹 사이트로 제공됩니다. API는 빌드 프로세스의 일부로 공용 폴더에 복사된 SPA를 제공합니다.
각도 - 기존 - 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를 생성/구성하고 프로젝트를 설정합니다.
별도로:
허용된 리디렉션 URI를 갖도록 Dropbox 앱을 업데이트하세요: https://[YOUR IP/SITE]/oauth/dropbox
git 푸시/마스터 변경 사항 병합
원격 파일 업데이트, 이미지 다시 시작(자동 스케일러 포함, 스파 재구축) 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