From dec9890cd61a1fb1b3f83f1519f7385d077009a0 Mon Sep 17 00:00:00 2001 From: Ak4zh Date: Tue, 22 Feb 2022 00:06:20 +0530 Subject: [PATCH] added imagor and imagor-aws (#626) * added imagor and imagor-aws * added imagor_unsafe env var in aws version * updated app description * fixed icon name * renamed aws to s3 as it supports all s3 compatible storage --- public/v4/apps/imagor-local.yml | 49 +++++++++++++++ public/v4/apps/imagor-s3.yml | 104 +++++++++++++++++++++++++++++++ public/v4/logos/imagor-local.png | Bin 0 -> 6962 bytes public/v4/logos/imagor-s3.png | Bin 0 -> 6962 bytes 4 files changed, 153 insertions(+) create mode 100644 public/v4/apps/imagor-local.yml create mode 100644 public/v4/apps/imagor-s3.yml create mode 100644 public/v4/logos/imagor-local.png create mode 100644 public/v4/logos/imagor-s3.png diff --git a/public/v4/apps/imagor-local.yml b/public/v4/apps/imagor-local.yml new file mode 100644 index 0000000..f25e341 --- /dev/null +++ b/public/v4/apps/imagor-local.yml @@ -0,0 +1,49 @@ +captainVersion: 4 +services: + $$cap_appname: + image: shumc/imagor:$$cap_imagor_version + volumes: + - $$cap_appname-data:/mnt/data + environment: + PORT: 80 + IMAGOR_UNSAFE: $$cap_env_imagor_unsafe + IMAGOR_SECRET: $$cap_env_imagor_secret + FILE_LOADER_BASE_DIR: /mnt/data + FILE_STORAGE_BASE_DIR: /mnt/data + FILE_RESULT_STORAGE_BASE_DIR: /mnt/data/result + restart: always +caproverOneClickApp: + variables: + - id: $$cap_imagor_version + label: App Version + description: Check out their Docker page for the valid tags https://hub.docker.com/r/shumc/imagor/tags + defaultValue: '0.8.11' + validRegex: /^([^\s^\/])+$/ + + - id: $$cap_env_imagor_unsafe + label: Imagor Undafe + description: unsafe URL for testing (valid value 1 or 0) + defaultValue: 1 + validRegex: /^\d$/ + + - id: $$cap_env_imagor_secret + label: Imagor Secret + description: Secret key for URL signature + defaultValue: $$cap_gen_random_hex(32) + validRegex: /^([^\s^\/])+$/ + + instructions: + start: |- + Imagor is a fast, Docker-ready image processing server written in Go. + This app will store the images in local file system, using mounted volume. + If you want to s3 buckets use the Imagor S3 instead. + GitHub: https://github.com/cshum/imagor + end: |- + $$cap_appname deployed successfuly. + Imagor is currently running in unsafe mode for easier testing. + In production environment, it is highly recommended turning off IMAGOR_UNSAFE + by setting the IMAGOR_UNSAFE to 0 or removing the IMAGOR_UNSAFE environment variable + displayName: Imagor (Local storage) + isOfficial: true + description: Imagor is a fast, Docker-ready image processing server written in Go. (Stores images locally as docker volumes) + documentation: https://github.com/cshum/imagor diff --git a/public/v4/apps/imagor-s3.yml b/public/v4/apps/imagor-s3.yml new file mode 100644 index 0000000..997ea63 --- /dev/null +++ b/public/v4/apps/imagor-s3.yml @@ -0,0 +1,104 @@ +captainVersion: 4 +services: + $$cap_appname: + image: shumc/imagor:$$cap_imagor_version + environment: + PORT: 80 + IMAGOR_UNSAFE: $$cap_env_imagor_unsafe + IMAGOR_SECRET: $$cap_env_imagor_secret + AWS_ACCESS_KEY_ID: $$cap_env_aws_key_id + AWS_SECRET_ACCESS_KEY: $$cap_env_aws_secret_access_key + AWS_REGION: $$cap_env_aws_region + + S3_LOADER_BUCKET: $$cap_env_s3_loader_bucket + S3_LOADER_BASE_DIR: $$cap_env_s3_loader_bucket_dir + + S3_STORAGE_BUCKET: $$cap_env_s3_storage_bucket + S3_STORAGE_BASE_DIR: $$cap_env_s3_storage_bucket_dir + + S3_RESULT_STORAGE_BUCKET: $$cap_env_s3_result_storage_bucket + S3_RESULT_STORAGE_BASE_DIR: $$cap_env_s3_result_storage_bucket_dir + restart: always +caproverOneClickApp: + variables: + - id: $$cap_imagor_version + label: App Version + description: Check out their Docker page for the valid tags https://hub.docker.com/r/shumc/imagor/tags + defaultValue: '0.8.11' + validRegex: /^([^\s^\/])+$/ + + - id: $$cap_env_imagor_unsafe + label: Imagor Undafe + description: unsafe URL for testing (valid value 1 or 0) + defaultValue: 1 + validRegex: /^\d$/ + + - id: $$cap_env_imagor_secret + label: Imagor Secret + description: Secret key for URL signature + defaultValue: $$cap_gen_random_hex(32) + validRegex: /^([^\s^\/])+$/ + + - id: $$cap_env_aws_key_id + label: AWS Key ID + description: AWS Access Key Id + defaultValue: '' + validRegex: /^([^\s^\/])+$/ + + - id: $$cap_env_aws_secret_access_key + label: AWS Key Secret Access Key + description: AWS key secret access key + defaultValue: '' + validRegex: /^([^\s^\/])+$/ + + - id: $$cap_env_aws_region + label: AWS Region + description: AWS region + defaultValue: '' + validRegex: /^([^\s^\/])+$/ + + - id: $$cap_env_s3_loader_bucket + label: AWS S3 Loader Bucket + description: enable S3 loader by specifying bucket + defaultValue: 'mybucket' + + - id: $$cap_env_s3_loader_bucket_dir + label: AWS S3 Loader Bucket Directory + description: optional + defaultValue: 'images' + + - id: $$cap_env_s3_storage_bucket + label: AWS S3 Storage Bucket + description: enable S3 storage by specifying bucket + defaultValue: 'mybucket' + + - id: $$cap_env_s3_storage_bucket_dir + label: AWS S3 Storage Bucket Directory + description: optional + defaultValue: 'images' + + - id: $$cap_env_s3_result_storage_bucket + label: AWS S3 Result Storage Bucket + description: enable S3 result storage by specifying bucket + defaultValue: 'mybucket' + + - id: $$cap_env_s3_result_storage_bucket_dir + label: AWS S3 Result Storage Bucket Directory + description: optional + defaultValue: 'images/result' + + instructions: + start: |- + Imagor is a fast, Docker-ready image processing server written in Go. + This app will store the images in S3 bucket. + If you want to store the images locally as docker volume use Imagor Local instead. + GitHub: https://github.com/cshum/imagor + end: |- + $$cap_appname deployed successfuly. + Imagor is currently running in unsafe mode for easier testing. + In production environment, it is highly recommended turning off IMAGOR_UNSAFE + by setting the IMAGOR_UNSAFE to 0 or removing the IMAGOR_UNSAFE environment variable + displayName: Imagor (S3 storage) + isOfficial: true + description: Imagor is a fast, Docker-ready image processing server written in Go. (Stores images in S3 bucket) + documentation: https://github.com/cshum/imagor diff --git a/public/v4/logos/imagor-local.png b/public/v4/logos/imagor-local.png new file mode 100644 index 0000000000000000000000000000000000000000..8aae46624bbf806ca0fc1002b1b3df4be56951c3 GIT binary patch literal 6962 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 literal 0 HcmV?d00001 diff --git a/public/v4/logos/imagor-s3.png b/public/v4/logos/imagor-s3.png new file mode 100644 index 0000000000000000000000000000000000000000..8aae46624bbf806ca0fc1002b1b3df4be56951c3 GIT binary patch literal 6962 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 literal 0 HcmV?d00001