注意:此存储库已被 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