Learn Measure Blog About
A pile of photos.

How to install the Thumbor image CDN

Thumbor can be used for free to resize, compress, and transform images on-demand.

Katie Hempenius
Katie Hempenius

Image CDNs make it easy to dynamically optimize the aesthetics and performance of your images. Unlike most image CDNs, Thumbor is open-source and can be used for free to resize, compress, and transform images. It's suitable for production use; Wikipedia and Square both use Thumbor.

This guide explains how to install Thumbor on your own server. Once installed, you'll be able to use Thumbor as an API for transforming your images.

Intro

You'll be installing Thumbor on a VM running Ubuntu 16.04. Ubuntu 16.04 is a very common image and these instructions are intended to work on any cloud provider. Creating a VM might sound like more work than installing Thumbor on your local machine, but the minutes that you take to create a VM will probably save you hours or days of frustration trying to get Thumbor to properly install on your local machine. Although easy to use, Thumbor is notoriously difficult to install but these instructions simplify the process. If dependencies download quickly, the installation can be completed in 5 to 10 minutes.

Prerequisites

This post assumes that you know how to create a Ubuntu 16.04 LTS VM on a cloud platform like Google Cloud, AWS, or Azure and how to use command line tools to set up the VM.

Install Thumbor Dependencies

Update and upgrade Ubuntu's already-installed packages:

sudo apt-get update -y && sudo apt-get upgrade -y

Install pip, the package manager for Python. Later you'll install Thumbor with pip.

sudo apt-get install -y python-pip

Install Thumbor's dependencies. Thumbor's documentation does not explicitly mention these dependencies, but Thumbor will not install successfully without them.

# ssl packages
sudo apt-get install -y libcurl4-openssl-dev libssl-dev
# computer vision packages
sudo apt-get install -y python-opencv libopencv-dev
# image format packages
sudo apt-get install -y libjpeg-dev libpng-dev libwebp-dev webp

Install Thumbor

Install Thumbor using pip.

sudo pip install thumbor

Note: Many Python developers use virtualenv to manage their packages. For the sake of simplicity, these instructions do not use virtualenv. If you are installing Thumbor in a standalone environment, virtualenv is not necessary. If you choose to use virtualenv, note that Thumbor requires Python 2.7 and will not work with newer versions of pip (e.g., these instructions use pip 8.1.1).

If you've successfully installed Thumbor, this should work:

thumbor --help

Run Thumbor

Run Thumbor. Debug logging is optional but can be helpful when you're getting started.

thumbor --log-level debug

Thumbor is now running.

Open Firewall Port

By default, Thumbor runs on port 8888. If your VM's IP address is 12.123.12.122, then you would access Thumbor from the web browser at http://12.123.12.123:8888/.../$IMAGE.

However, this probably won't work for you (yet) because cloud providers usually require that you explicitly open firewall ports before they will accept incoming traffic.

Update the firewall to expose port 8888. Here's more information on how to do this for: Google Cloud, AWS, and Azure. Note that for Google Cloud you need to first assign a static IP address to your VM and then allow an external HTTP connection.

Try It Out

Thumbor is now accessible and ready for use. Try it out by visiting the following URL:

http://YOUR_VIRTUAL_MACHINE:8888/unsafe/100x100/https://web.dev/install-thumbor/hero.jpg

Note that this URL uses HTTP. Thumbor uses HTTP by default but can be configured to use HTTPS.

You should see an image that is 100 pixels wide by 100 pixels tall. Thumbor has taken the image hero.jpg and size specified in the URL string and served the result. You can replace the image in the URL string (i.e., https://web.dev/install-thumbor/hero.jpg) with any other image (e.g., https://your-site.com/cat.jpg) and Thumbor will resize that image too.

Appendix: Configuring Systemd

This step explains how to make sure that the Thumbor process keeps running, even after the VM has been restarted. This step is important for production sites, but optional if you're just playing around with Thumbor.

Systemd is the "system and service manager" for Linux operating systems. systemd makes it easy to configure when services (processes) run.

You will be configuring systemd to automatically start Thumbor on VM boot. If the VM is restarted, the Thumbor process will automatically restart as well. This is much more reliable than relying on user intervention to start Thumbor.

Navigate to the /lib/systemd/system directory. This directory contains the service files for systemd.

cd /lib/systemd/system

As superuser, create a thumbor.service file.

sudo touch thumbor.service

Using your favorite text editor (vim and nano come pre-installed on Ubuntu or you can install another editor), add the following configuration to thumbor.service. This configuration will run /usr/local/bin/thumbor (i.e. the Thumbor binary) once networking is available and will restart Thumbor on failure.

[Unit]

Description=Service for Thumbor image CDN

Documentation=https://thumbor.readthedocs.io/en/latest/

After=network.target

[Service]

ExecStart=/usr/local/bin/thumbor

Restart=on-failure

[Install]

WantedBy=multi-user.target

systemctl is the utility used to manage systemd. Use the start command to start Thumbor.

sudo systemctl start thumbor.service

Note: If Thumbor is currently running, you should stop it before attempting to start Thumbor using systemctl.

Next, "enable" Thumbor. This means that Thumbor will automatically start on boot.

sudo systemctl enable thumbor.service

Verify that you've successfully configured systemd by running the status command.

systemctl status thumbor.service

If you've successfully set up thumbor.service to use systemd, the status should show that it is enabled and active.

Systemctl displaying the status of Thumbor
Last updated: Improve article