Prechádzať zdrojové kódy

Added support for Thumbor (#1373)

Peter Mein 6 rokov pred
rodič
commit
6a3b3fac2d

+ 21 - 0
DOCUMENTATION/content/documentation/index.md

@@ -1043,6 +1043,27 @@ docker-compose up -d minio
 
 
 
+<br>
+<a name="Use-Thumbor"></a>
+## 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
+
+
 <br>
 <a name="Use-AWS"></a>
 ## Use AWS

+ 116 - 0
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:

+ 116 - 0
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

+ 5 - 0
thumbor/Dockerfile

@@ -0,0 +1,5 @@
+FROM apsl/thumbor
+
+CMD ["thumbor"]
+
+EXPOSE 8000