From 6a3b3fac2de9fc44f56fa58f5349378238990fbf Mon Sep 17 00:00:00 2001 From: Peter Mein Date: Sun, 16 Sep 2018 14:21:13 +0200 Subject: [PATCH] Added support for Thumbor (#1373) --- DOCUMENTATION/content/documentation/index.md | 21 ++++ docker-compose.yml | 116 +++++++++++++++++++ env-example | 116 +++++++++++++++++++ thumbor/Dockerfile | 5 + 4 files changed, 258 insertions(+) create mode 100644 thumbor/Dockerfile diff --git a/DOCUMENTATION/content/documentation/index.md b/DOCUMENTATION/content/documentation/index.md index c3668d19..78dadf82 100644 --- a/DOCUMENTATION/content/documentation/index.md +++ b/DOCUMENTATION/content/documentation/index.md @@ -1043,6 +1043,27 @@ docker-compose up -d minio +
+ +## Use Thumbor + +Thumbor is a smart imaging service. It enables on-demand crop, resizing and flipping of images. ([Thumbor](https://github.com/thumbor/thumbor)) + +1 - Configure Thumbor: + - Checkout all the options under the thumbor settings + + +2 - Run the Thumbor Container (`minio`) with the `docker-compose up` command. Example: + +```bash +docker-compose up -d thumbor +``` + +3 - Navigate to an example image on `http://localhost:8000/unsafe/300x300/i.imgur.com/bvjzPct.jpg` + +For more documentation on Thumbor visit the [Thumbor documenation](http://thumbor.readthedocs.io/en/latest/index.html) page + +
## Use AWS diff --git a/docker-compose.yml b/docker-compose.yml index 990506c9..cb5056e1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -707,6 +707,122 @@ services: networks: - backend +### Thumbor ######################################### + thumbor: + build: ./thumbor + volumes: + - ${DATA_SAVE_PATH}/thumbor/data:/data + - ${DATA_SAVE_PATH}/thumbor/data:/logs + ports: + - "${THUMBOR_PORT}:8000" + environment: + - THUMBOR_LOG_FORMAT=${THUMBOR_LOG_FORMAT} + - THUMBOR_LOG_DATE_FORMAT=${THUMBOR_LOG_DATE_FORMAT} + - MAX_WIDTH=${MAX_WIDTH} + - MAX_HEIGHT=${MAX_HEIGHT} + - MIN_WIDTH=${MIN_WIDTH} + - MIN_HEIGHT=${MIN_HEIGHT} + - ALLOWED_SOURCES=${ALLOWED_SOURCES} + - QUALITY=${QUALITY} + - WEBP_QUALITY=${WEBP_QUALITY} + - PNG_COMPRESSION_LEVEL=${PNG_COMPRESSION_LEVEL} + - AUTO_WEBP=${AUTO_WEBP} + - MAX_AGE=${MAX_AGE} + - MAX_AGE_TEMP_IMAGE=${MAX_AGE_TEMP_IMAGE} + - RESPECT_ORIENTATION=${RESPECT_ORIENTATION} + - IGNORE_SMART_ERRORS=${IGNORE_SMART_ERRORS} + - PRESERVE_EXIF_INFO=${PRESERVE_EXIF_INFO} + - ALLOW_ANIMATED_GIFS=${ALLOW_ANIMATED_GIFS} + - USE_GIFSICLE_ENGINE=${USE_GIFSICLE_ENGINE} + - USE_BLACKLIST=${USE_BLACKLIST} + - LOADER=${LOADER} + - STORAGE=${STORAGE} + - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} + - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} + - RESULT_STORAGE=${RESULT_STORAGE} + - ENGINE=${ENGINE} + - SECURITY_KEY=${SECURITY_KEY} + - ALLOW_UNSAFE_URL=${ALLOW_UNSAFE_URL} + - ALLOW_OLD_URLS=${ALLOW_OLD_URLS} + - FILE_LOADER_ROOT_PATH=${FILE_LOADER_ROOT_PATH} + - HTTP_LOADER_CONNECT_TIMEOUT=${HTTP_LOADER_CONNECT_TIMEOUT} + - HTTP_LOADER_REQUEST_TIMEOUT=${HTTP_LOADER_REQUEST_TIMEOUT} + - HTTP_LOADER_FOLLOW_REDIRECTS=${HTTP_LOADER_FOLLOW_REDIRECTS} + - HTTP_LOADER_MAX_REDIRECTS=${HTTP_LOADER_MAX_REDIRECTS} + - HTTP_LOADER_FORWARD_USER_AGENT=${HTTP_LOADER_FORWARD_USER_AGENT} + - HTTP_LOADER_DEFAULT_USER_AGENT=${HTTP_LOADER_DEFAULT_USER_AGENT} + - HTTP_LOADER_PROXY_HOST=${HTTP_LOADER_PROXY_HOST} + - HTTP_LOADER_PROXY_PORT=${HTTP_LOADER_PROXY_PORT} + - HTTP_LOADER_PROXY_USERNAME=${HTTP_LOADER_PROXY_USERNAME} + - HTTP_LOADER_PROXY_PASSWORD=${HTTP_LOADER_PROXY_PASSWORD} + - HTTP_LOADER_CA_CERTS=${HTTP_LOADER_CA_CERTS} + - HTTP_LOADER_VALIDATE_CERTS=${HTTP_LOADER_VALIDATE_CERTS} + - HTTP_LOADER_CLIENT_KEY=${HTTP_LOADER_CLIENT_KEY} + - HTTP_LOADER_CLIENT_CERT=${HTTP_LOADER_CLIENT_CERT} + - HTTP_LOADER_CURL_ASYNC_HTTP_CLIENT=${HTTP_LOADER_CURL_ASYNC_HTTP_CLIENT} + - STORAGE_EXPIRATION_SECONDS=${STORAGE_EXPIRATION_SECONDS} + - STORES_CRYPTO_KEY_FOR_EACH_IMAGE=${STORES_CRYPTO_KEY_FOR_EACH_IMAGE} + - FILE_STORAGE_ROOT_PATH=${FILE_STORAGE_ROOT_PATH} + - UPLOAD_MAX_SIZE=${UPLOAD_MAX_SIZE} + - UPLOAD_ENABLED=${UPLOAD_ENABLED} + - UPLOAD_PHOTO_STORAGE=${UPLOAD_PHOTO_STORAGE} + - UPLOAD_DELETE_ALLOWED=${UPLOAD_DELETE_ALLOWED} + - UPLOAD_PUT_ALLOWED=${UPLOAD_PUT_ALLOWED} + - UPLOAD_DEFAULT_FILENAME=${UPLOAD_DEFAULT_FILENAME} + - MONGO_STORAGE_SERVER_HOST=${MONGO_STORAGE_SERVER_HOST} + - MONGO_STORAGE_SERVER_PORT=${MONGO_STORAGE_SERVER_PORT} + - MONGO_STORAGE_SERVER_DB=${MONGO_STORAGE_SERVER_DB} + - MONGO_STORAGE_SERVER_COLLECTION=${MONGO_STORAGE_SERVER_COLLECTION} + - REDIS_STORAGE_SERVER_HOST=${REDIS_STORAGE_SERVER_HOST} + - REDIS_STORAGE_SERVER_PORT=${REDIS_STORAGE_SERVER_PORT} + - REDIS_STORAGE_SERVER_DB=${REDIS_STORAGE_SERVER_DB} + - REDIS_STORAGE_SERVER_PASSWORD=${REDIS_STORAGE_SERVER_PASSWORD} + - REDIS_RESULT_STORAGE_SERVER_HOST=${REDIS_RESULT_STORAGE_SERVER_HOST} + - REDIS_RESULT_STORAGE_SERVER_PORT=${REDIS_RESULT_STORAGE_SERVER_PORT} + - REDIS_RESULT_STORAGE_SERVER_DB=${REDIS_RESULT_STORAGE_SERVER_DB} + - REDIS_RESULT_STORAGE_SERVER_PASSWORD=${REDIS_RESULT_STORAGE_SERVER_PASSWORD} + - MEMCACHE_STORAGE_SERVERS=${MEMCACHE_STORAGE_SERVERS} + - MIXED_STORAGE_FILE_STORAGE=${MIXED_STORAGE_FILE_STORAGE} + - MIXED_STORAGE_CRYPTO_STORAGE=${MIXED_STORAGE_CRYPTO_STORAGE} + - MIXED_STORAGE_DETECTOR_STORAGE=${MIXED_STORAGE_DETECTOR_STORAGE} + - META_CALLBACK_NAME=${META_CALLBACK_NAME} + - DETECTORS=${DETECTORS} + - FACE_DETECTOR_CASCADE_FILE=${FACE_DETECTOR_CASCADE_FILE} + - OPTIMIZERS=${OPTIMIZERS} + - JPEGTRAN_PATH=${JPEGTRAN_PATH} + - PROGRESSIVE_JPEG=${PROGRESSIVE_JPEG} + - RESULT_STORAGE_EXPIRATION_SECONDS=${RESULT_STORAGE_EXPIRATION_SECONDS} + - RESULT_STORAGE_FILE_STORAGE_ROOT_PATH=${RESULT_STORAGE_FILE_STORAGE_ROOT_PATH} + - RESULT_STORAGE_STORES_UNSAFE=${RESULT_STORAGE_STORES_UNSAFE} + - REDIS_QUEUE_SERVER_HOST=${REDIS_QUEUE_SERVER_HOST} + - REDIS_QUEUE_SERVER_PORT=${REDIS_QUEUE_SERVER_PORT} + - REDIS_QUEUE_SERVER_DB=${REDIS_QUEUE_SERVER_DB} + - REDIS_QUEUE_SERVER_PASSWORD=${REDIS_QUEUE_SERVER_PASSWORD} + - SQS_QUEUE_KEY_ID=${SQS_QUEUE_KEY_ID} + - SQS_QUEUE_KEY_SECRET=${SQS_QUEUE_KEY_SECRET} + - SQS_QUEUE_REGION=${SQS_QUEUE_REGION} + - USE_CUSTOM_ERROR_HANDLING=${USE_CUSTOM_ERROR_HANDLING} + - ERROR_HANDLER_MODULE=${ERROR_HANDLER_MODULE} + - ERROR_FILE_LOGGER=${ERROR_FILE_LOGGER} + - ERROR_FILE_NAME_USE_CONTEXT=${ERROR_FILE_NAME_USE_CONTEXT} + - SENTRY_DSN_URL=${SENTRY_DSN_URL} + - TC_AWS_REGION=${TC_AWS_REGION} + - TC_AWS_ENDPOINT=${TC_AWS_ENDPOINT} + - TC_AWS_STORAGE_BUCKET=${TC_AWS_STORAGE_BUCKET} + - TC_AWS_STORAGE_ROOT_PATH=${TC_AWS_STORAGE_ROOT_PATH} + - TC_AWS_LOADER_BUCKET=${TC_AWS_LOADER_BUCKET} + - TC_AWS_LOADER_ROOT_PATH=${TC_AWS_LOADER_ROOT_PATH} + - TC_AWS_RESULT_STORAGE_BUCKET=${TC_AWS_RESULT_STORAGE_BUCKET} + - TC_AWS_RESULT_STORAGE_ROOT_PATH=${TC_AWS_RESULT_STORAGE_ROOT_PATH} + - TC_AWS_STORAGE_SSE=${TC_AWS_STORAGE_SSE} + - TC_AWS_STORAGE_RRS=${TC_AWS_STORAGE_RRS} + - TC_AWS_ENABLE_HTTP_LOADER=${TC_AWS_ENABLE_HTTP_LOADER} + - TC_AWS_ALLOWED_BUCKETS=${TC_AWS_ALLOWED_BUCKETS} + - TC_AWS_STORE_METADATA=${TC_AWS_STORE_METADATA} + networks: + - frontend + - backend + ### AWS EB-CLI ################################################ aws: build: diff --git a/env-example b/env-example index aa16e5f8..89929d37 100644 --- a/env-example +++ b/env-example @@ -365,6 +365,122 @@ CADDY_CONFIG_PATH=./caddy/caddy LARAVEL_ECHO_SERVER_PORT=6001 +### DOCKER-SYNC ######################################################################################################## + +# osx: 'native_osx' (default) +# windows: 'unison' +# linux: docker-sync not required + +DOCKER_SYNC_STRATEGY=native_osx + +### THUMBOR ############################################################################################################ + +THUMBOR_PORT=8000 +THUMBOR_LOG_FORMAT="%(asctime)s %(name)s:%(levelname)s %(message)s" +THUMBOR_LOG_DATE_FORMAT="%Y-%m-%d %H:%M:%S" +MAX_WIDTH=0 +MAX_HEIGHT=0 +MIN_WIDTH=1 +MIN_HEIGHT=1 +ALLOWED_SOURCES=[] +QUALITY=80 +WEBP_QUALITY=None +PNG_COMPRESSION_LEVEL=6 +AUTO_WEBP=False +MAX_AGE=86400 +MAX_AGE_TEMP_IMAGE=0 +RESPECT_ORIENTATION=False +IGNORE_SMART_ERRORS=False +PRESERVE_EXIF_INFO=False +ALLOW_ANIMATED_GIFS=True +USE_GIFSICLE_ENGINE=False +USE_BLACKLIST=False +LOADER=thumbor.loaders.http_loader +STORAGE=thumbor.storages.file_storage +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +RESULT_STORAGE=thumbor.result_storages.file_storage +ENGINE=thumbor.engines.pil +SECURITY_KEY="MY_SECURE_KEY" +ALLOW_UNSAFE_URL=True +ALLOW_OLD_URLS=True +FILE_LOADER_ROOT_PATH=/data/loader +HTTP_LOADER_CONNECT_TIMEOUT=5 +HTTP_LOADER_REQUEST_TIMEOUT=20 +HTTP_LOADER_FOLLOW_REDIRECTS=True +HTTP_LOADER_MAX_REDIRECTS=5 +HTTP_LOADER_FORWARD_USER_AGENT=False +HTTP_LOADER_DEFAULT_USER_AGENT="Thumbor/5.2.1" +HTTP_LOADER_PROXY_HOST=None +HTTP_LOADER_PROXY_PORT=None +HTTP_LOADER_PROXY_USERNAME=None +HTTP_LOADER_PROXY_PASSWORD=None +HTTP_LOADER_CA_CERTS=None +HTTP_LOADER_VALIDATE_CERTS=True +HTTP_LOADER_CLIENT_KEY=None +HTTP_LOADER_CLIENT_CERT=None +HTTP_LOADER_CURL_ASYNC_HTTP_CLIENT=False +STORAGE_EXPIRATION_SECONDS=2592000 +STORES_CRYPTO_KEY_FOR_EACH_IMAGE=False +FILE_STORAGE_ROOT_PATH=/data/storage +UPLOAD_MAX_SIZE=0 +UPLOAD_ENABLED=False +UPLOAD_PHOTO_STORAGE=thumbor.storages.file_storage +UPLOAD_DELETE_ALLOWED=False +UPLOAD_PUT_ALLOWED=False +UPLOAD_DEFAULT_FILENAME=image +MONGO_STORAGE_SERVER_HOST=mongo +MONGO_STORAGE_SERVER_PORT=27017 +MONGO_STORAGE_SERVER_DB=thumbor +MONGO_STORAGE_SERVER_COLLECTION=images +REDIS_STORAGE_SERVER_HOST=redis +REDIS_STORAGE_SERVER_PORT=6379 +REDIS_STORAGE_SERVER_DB=0 +REDIS_STORAGE_SERVER_PASSWORD=None +REDIS_RESULT_STORAGE_SERVER_HOST=redis +REDIS_RESULT_STORAGE_SERVER_PORT=6379 +REDIS_RESULT_STORAGE_SERVER_DB=0 +REDIS_RESULT_STORAGE_SERVER_PASSWORD=None +MEMCACHE_STORAGE_SERVERS=["localhost:11211",] +MIXED_STORAGE_FILE_STORAGE=thumbor.storages.no_storage +MIXED_STORAGE_CRYPTO_STORAGE=thumbor.storages.no_storage +MIXED_STORAGE_DETECTOR_STORAGE=thumbor.storages.no_storage +META_CALLBACK_NAME=None +DETECTORS=[] +FACE_DETECTOR_CASCADE_FILE=haarcascade_frontalface_alt.xml +OPTIMIZERS=[] +JPEGTRAN_PATH=/usr/bin/jpegtran +PROGRESSIVE_JPEG=True +FILTERS=["thumbor.filters.brightness", "thumbor.filters.contrast", "thumbor.filters.rgb", "thumbor.filters.round_corner", "thumbor.filters.quality", "thumbor.filters.noise", "thumbor.filters.watermark", "thumbor.filters.equalize", "thumbor.filters.fill", "thumbor.filters.sharpen", "thumbor.filters.strip_icc", "thumbor.filters.frame", "thumbor.filters.grayscale", "thumbor.filters.rotate", "thumbor.filters.format", "thumbor.filters.max_bytes", "thumbor.filters.convolution", "thumbor.filters.blur", "thumbor.filters.extract_focal", "thumbor.filters.no_upscale"] +RESULT_STORAGE_EXPIRATION_SECONDS=0 +RESULT_STORAGE_FILE_STORAGE_ROOT_PATH=/data/result_storage +RESULT_STORAGE_STORES_UNSAFE=False +REDIS_QUEUE_SERVER_HOST=redis +REDIS_QUEUE_SERVER_PORT=6379 +REDIS_QUEUE_SERVER_DB="0" +REDIS_QUEUE_SERVER_PASSWORD=None +SQS_QUEUE_KEY_ID=None +SQS_QUEUE_KEY_SECRET=None +SQS_QUEUE_REGION=us-east-1 +USE_CUSTOM_ERROR_HANDLING=False +ERROR_HANDLER_MODULE=thumbor.error_handlers.sentry +ERROR_FILE_LOGGER=None +ERROR_FILE_NAME_USE_CONTEXT="False" +SENTRY_DSN_URL= +TC_AWS_REGION=eu-west-1 +TC_AWS_ENDPOINT=None +TC_AWS_STORAGE_BUCKET= +TC_AWS_STORAGE_ROOT_PATH= +TC_AWS_LOADER_BUCKET= +TC_AWS_LOADER_ROOT_PATH= +TC_AWS_RESULT_STORAGE_BUCKET= +TC_AWS_RESULT_STORAGE_ROOT_PATH= +TC_AWS_STORAGE_SSE=False +TC_AWS_STORAGE_RRS=False +TC_AWS_ENABLE_HTTP_LOADER=False +TC_AWS_ALLOWED_BUCKETS=False +TC_AWS_STORE_METADATA=False + ### SOLR ################################################## SOLR_VERSION=5.5 diff --git a/thumbor/Dockerfile b/thumbor/Dockerfile new file mode 100644 index 00000000..ee36c2e3 --- /dev/null +++ b/thumbor/Dockerfile @@ -0,0 +1,5 @@ +FROM apsl/thumbor + +CMD ["thumbor"] + +EXPOSE 8000