注意:此儲存庫已被 picili-ts 取代。
picili 是一個自動圖片搜尋引擎/瀏覽器,可與您的 Dropbox 上選定的資料夾同步。它會自動分析那裡的所有圖片,以了解您添加、刪除或更改的任何圖片。輕量級網頁應用程式可輕鬆瀏覽和搜尋您的圖片。此網頁應用程式旨在與 picili 對圖片進行分類的不同類型標籤緊密結合。它使用一些外部 API 來協助標記,但設計為保留在每個 API 的免費層中。所以只需要支付一個VPS的費用。
產生的標籤類型 | 需要 GPS exif 數據 | 使用外部API |
---|---|---|
目錄 | ||
日期 | ||
exif數據 | ||
主題 | ✓ | |
地址/地點 | ✓ | ✓ |
海拔 | ✓ | ✓ |
植物種類 | ✓ | |
車牌號 | ✓ | |
文字/OCR | ✓ |
它是如何運作的
設定
正在研究 picili
部署
用戶透過 OAuth 註冊並連接他們的 Dropbox 帳戶
然後用戶在其保管箱上輸入一個資料夾,用於儲存他們的圖片
picili 每 x 分鐘輪詢一次 dropbox,取得檔案清單。
與迄今為止已識別的所有文件進行比較。
將所有新檔案新增至本機清單並將它們排隊等待匯入,並刪除所有現已刪除的檔案。
排隊的檔案均在本地下載、處理,然後在本地刪除
處理包括
地理編碼:取得位置資訊(透過外部 API)
海拔編碼:從緯度/經度導出海拔(以公尺為單位)(透過外部 API)
建立縮圖
擷取exif訊息
確定顏色
將圖片傳送至主題識別 API
如果圖片包含geo exif數據
主要零件:
SPA:前端是 Angular 單頁應用程式(SPA)
API:使用 Laravel 製作的 PHP API,SPA 呼叫該 API
Auto:一個在背景運行的單獨項目,也是一個 Laravel PHP 項目,它負責所有 dropbox 同步和檔案標記/處理。
Auto-Scaler:一個小型 Node 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
進入根資料夾
從範例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_秘密
API_PLANT_NET_KEY
AWS_KEY
AWS_秘密
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
使用者:根
密碼:密碼(完全不遵循環境值..)
kibana http://localhost:5601/
控制台瀏覽器:http://localhost:5601/app/kibana#/dev_tools/console?_g=()
dejavu http://localhost:1358
仔細輸入集群詳細信息,URI 應包含協議和端口以及主機:(uri: http://localhost:9200
和索引: 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
內運行。 Spa 是按照標準建造和運行的,因此只需處理 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 上運行,並作為同一個網站提供服務。該 API 為 SPA 提供服務,該 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 並設定專案。
分別:
更新您的 Dropbox 應用程式以具有允許的重定向 URI: https://[YOUR IP/SITE]/oauth/dropbox
git 推送/合併更改到 master
更新遠端文件,重新啟動映像(包括自動縮放器,也重建 spa) 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