Launch and SSH to AWS Instance
Type sudo su
Type yum update -y
Type yum groupinstall "Development Tools" -y
Type pip install --upgrade pip
(pip resides at /usr/local/bin/pip, pip version 8.0.2, python version 2.7.10)
Type yum install libjpeg-turbo-devel libjpeg-turbo-utils libtiff-devel libpng-devel pngcrush jasper-devel libwebp-devel libcurl-devel cmake -y
Type /usr/local/bin/pip uninstall pycurl
Type export PYCURL_SSL_LIBRARY=nss
Type /usr/local/bin/pip install pycurl
Type /usr/local/bin/pip install --upgrade setuptools
Type /usr/local/bin/pip install numpy
git clone https://github.com/kohler/gifsicle.git
cd gifsicle
./bootstrap.sh
./configure
make
make install
cd ../
rm -rf gifsicle/
Gifscile is installed at /usr/local/bin/gifscile
Type /usr/local/bin/pip install thumbor
Type /usr/local/bin/thumbor-config > /etc/thumbor.conf
Type vim /etc/thumbor.conf
RESPECT_ORIENTATION = True
...
SECURITY_KEY = 'xehbyQKFPsp6gh64yDEnCUEGEecC
...
DETECTORS = [
'thumbor.detectors.face_detector',
'thumbor.detectors.feature_detector'
]
...
OPTIMIZERS = [
'thumbor.optimizers.jpegtran',
'thumbor.optimizers.gifsicle',
'thumbor.optimizers.pngcrush'
]
JPEGTRAN_PATH = '/usr/bin/jpegtran'
GIFSICLE_PATH = '/usr/local/bin/gifsicle'
PNGCRUSH_PATH = '/usr/bin/pngcrush'
Also enable FILTERS[] needed.
vim /usr/local/lib64/python2.7/site-packages/thumbor/optimizers/pngcrush.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
# thumbor imaging service
# https://github.com/thumbor/thumbor/wiki
# Licensed under the MIT license:
# http://www.opensource.org/licenses/mit-license
import os
import subprocess
from thumbor.optimizers import BaseOptimizer
from thumbor.utils import logger
class Optimizer(BaseOptimizer):
def __init__(self, context):
super(Optimizer, self).__init__(context)
self.runnable = True
self.pngcrush_path = self.context.config.PNGCRUSH_PATH
if not (os.path.isfile(self.pngcrush_path) and os.access(self.pngcrush_path, os.X_OK)):
logger.error("ERROR pngcrush path '{0}' is not accessible".format(self.pngcrush_path))
self.runnable = False
def should_run(self, image_extension, buffer):
return 'png' in image_extension and self.runnable
def optimize(self, buffer, input_file, output_file):
command = '%s -reduce -q %s %s ' % (
self.pngcrush_path,
input_file,
output_file,
)
with open(os.devnull) as null:
subprocess.call(command, shell=True, stdin=null)
vim /usr/local/lib64/python2.7/site-packages/thumbor/optimizers/gifsicle.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
# thumbor imaging service
# https://github.com/globocom/thumbor/wiki
# Licensed under the MIT license:
# http://www.opensource.org/licenses/mit-license
# Copyright (c) 2011 globo.com timehome@corp.globo.com
import os
from thumbor.optimizers import BaseOptimizer
class Optimizer(BaseOptimizer):
def should_run(self, image_extension, buffer):
return 'gif' in image_extension
def optimize(self, buffer, input_file, output_file):
gifsicle_path = self.context.config.GIFSICLE_PATH
command = '%s --optimize --output %s %s ' % (
gifsicle_path,
output_file,
input_file,
)
os.system(command)
Type /usr/local/bin/pip install supervisor
Type echo_supervisord_conf > /etc/supervisord.conf
Type vim /etc/supervisord.conf
[program:thumbor]
command=/usr/local/bin/thumbor --ip=127.0.0.1 --port=900%(process_num)s --conf=/etc/thumbor.conf
process_name=thumbor900%(process_num)s
numprocs=4
stdout_logfile=/var/log/thumbor900%(process_num)s.stdout.log
stderr_logfile=/var/log/thumbor900%(process_num)s.stderr.log
Supervisor socket is at /tmp/supervisor.sock
Supervisor log file is at /tmp/supervisord.log
Supervisor pid file is at /tmp/supervisord.pid
Type sudo vim /etc/init.d/supervisord
#! /bin/sh
### BEGIN INIT INFO
# Provides: supervisord
# Required-Start: $remote_fs
# Required-Stop: $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Supervisor init script
# Description: Supervisor init script
### END INIT INFO
# Supervisord auto-start
#
# description: Auto-starts supervisord
# processname: supervisord
# pidfile: /tmp/supervisord.pid
SUPERVISORD=/usr/local/bin/supervisord
SUPERVISORCTL=/usr/local/bin/supervisorctl
ARGS="-c /etc/supervisord.conf"
case $1 in
start)
echo -n "Starting supervisord: "
$SUPERVISORD $ARGS
echo
;;
stop)
echo -n "Stopping supervisord: "
$SUPERVISORCTL shutdown
;;
restart)
echo -n "Stopping supervisord: "
$SUPERVISORCTL shutdown
echo -n "Starting supervisord: "
$SUPERVISORD $ARGS
echo
;;
esac
Type chmod +x supervisord
Type chkconfig --add supervisord
Type chkconfig supervisord on
/etc/init.d/supervisord start
/etc/init.d/supervisord stop
/etc/init.d/supervisord restart
Type sudo yum install nginx -y
Type chkconfig nginx on
Type vim /etc/nginx/conf.d/thumbor.conf
upstream thumbor {
server 127.0.0.1:9000;
server 127.0.0.1:9001;
server 127.0.0.1:9002;
server 127.0.0.1:9003;
}
server {
listen 80;
server_name thumbor.vanitee.com;
client_max_body_size 10M;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header HOST $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://thumbor;
proxy_redirect off;
}
}
Type vim /etc/nginx/nginx.conf
Use pound sign (#) to comment out all server {}
so that port 80 is freed up for thumbor
Type service nginx restart
wget https://github.com/Itseez/opencv/archive/3.1.0.zip
unzip 3.1.0.zip
mkdir release
cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PYTHON_SUPPORT=ON ..
make
make install
Reference: http://www.dadoune.com/blog/best-thumbnailing-solution-set-up-thumbor-on-aws/