danack / imagick-contained
此软件包最新版本(dev-master)没有提供许可证信息。
dev-master
2019-05-16 13:37 UTC
This package is auto-updated.
Last update: 2024-09-17 02:03:41 UTC
README
运行 Imagick/ImageMagick 的更安全方式
简介
此容器使用 Supervisor 运行一些后台工作进程,这些工作进程将为您处理图像。
这应该会使 Imagick 的使用更加安全,因为它
-
避免了长时间留下开放的Web请求。
-
这意味着任何存在的漏洞都无法访问您的系统的大部分内容。
此项目目前是一个“概念验证”。它需要进行大量工作才能准备投入生产。问题在这里:https://github.com/Danack/ImagickContained/issues
添加到 docker-compose
将类似以下内容添加到您的 docker-compose 文件中。
imagick_contained:
build: vendor/danack/imagick_contained
volumes:
- ./images/input:/var/app/images/input
- ./images/output:/var/app/images/output
- ./lib:/var/app/lib
- ./vendor:/var/app/vendor
告诉您的应用程序如何创建 RedisImagickTaskQueue
function createRedisImagickTaskQueue()
{
$host = 'imagick_contained';
$port = 6379;
$redis = new \Redis();
$redis->connect($host, $port);
//$redis->auth($password);
$redis->ping();
return new \ImagickContained\RedisImagickTaskQueue($redis);
}
而不是直接调用 Imagick,将工作推送到队列,然后检查工作是否完成
public function getQueuedImage(ImagickTaskQueue $imagickTaskQueue)
{
$number = random_int(1000000, 10000000);
$filename = __DIR__ . "/../../../images/output/ImagickTest_$number.png";
if (file_exists($filename) === true) {
return new ImageResponse($filename, ImageResponse::TYPE_PNG);
}
$task = ImagickTask::create(
'Example\ImagickTest::drawFilledPattern',
[$filename]
);
$imagickTaskQueue->pushImagickTask($task);
// wait for up to 1 second for the image to process
for ($i=0; $i<200; $i++) {
if ($imagickTaskQueue->isTaskStatusSuccess($task) === true) {
return new ImageResponse($filename, ImageResponse::TYPE_PNG);
}
usleep(5000);
}
return new NotFoundResponse("Image still being processed");
}