注: このリポジトリは picili-ts に置き換えられました。
picili は、Dropbox 上の選択したフォルダーと同期する自動画像検索エンジン/ブラウザです。そこにあるすべての画像を自動的に分析し、追加、削除、または変更した画像を常に最新の状態に保ちます。軽量の Web アプリにより、写真の閲覧と検索が容易になります。このウェブアプリは、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
オートスケーラー: ノード 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 は完全に Docker 化されています。
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_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
SPA: http://localhost
API 直接: http://localhost:81
PHP myAdmin: 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
および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
all (再作成と再インデックス): 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
で提供され、 localhost:81
で実行される API と通信します (すでにdocker-compose up [-d]
を実行して「バックエンド」を開始していることを前提としています)。
Sass ファイルを編集する予定がある場合は、 docker-compose run spa yarn run gulp-watch
も実行します。
デバッグは vscode タスクを通じて有効になります。サーバーサイド コードにブレークポイントを追加し、F5 キーを押してデバッグを開始します。アプリは (http リクエスト経由で) ブレークポイントに到達すると一時停止します。
ローカルでは、SPA と API はそれぞれローカルホスト ポート 80 と 81 で実行されます。運用環境では、両方ともポート 80 で実行され、同じ Web サイトとして提供されます。 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 を作成/構成し、プロジェクトをセットアップします。
別途:
許可されたリダイレクト URI を持つように Dropbox アプリを更新します: https://[YOUR IP/SITE]/oauth/dropbox
git Push/変更をマスターにマージする
リモート ファイルを更新し、イメージを再起動します (オートスケーラーを含み、スパも再構築します) bash ./deploy-scripts/run-remote-update.sh
*変更が SPA 内にあった場合は、キャッシュをフラッシュします (cloudflare など)
コンテナにバッシュして、何が起こっているかを確認します。
サーバーに ssh で接続します: 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
ワークスペース: 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