Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Thumbor 7 #103

Merged
merged 86 commits into from
May 6, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
51000af
refs #67 Thumbor 7.0.0a2
Feb 29, 2020
87ba78c
fixing procs to 1, to bypass circus issue... tests might pass?
Feb 29, 2020
354a14f
updated semaphore vars
Feb 29, 2020
701c060
Revert "updated semaphore vars"
Feb 29, 2020
f5d9b72
kk-multiprocess build
Mar 7, 2020
2c08977
updating benchmarks
Mar 7, 2020
531483d
merging multiproc + 7a2 => 7a5
May 10, 2020
d0e0935
fallback values
May 10, 2020
bd0a981
allowing custom commands in entrypoint
May 10, 2020
f8d4f41
fixed command
May 10, 2020
0f4f151
empty commit
May 10, 2020
0eb9938
Restore OS packages
gingerlime Aug 22, 2021
2ddabaf
Currently working without using tc-aws
heynemann Jan 7, 2022
0c65988
Merge branch 'heynemann-thumbor-7a5' into thumbor-7a5
Jan 8, 2022
5654566
preparing for thumbor 7.0
Jan 8, 2022
117f688
removed proc-requirements copy
Jan 8, 2022
4f5ed01
I think we still need envtpl for the config
Jan 8, 2022
c241912
moving lib-requirements to requirements
Jan 8, 2022
1e6bf20
using python 3.9
Jan 8, 2022
6819c56
Merge branch 'master' into thumbor-7
gingerlime Jan 9, 2022
c7d48f0
cleanup; switching to nginx-proxy/nginx-proxy (github project moved)
Jan 9, 2022
d29863c
removed build for deprecated nginx-proxy
Jan 9, 2022
209ebe0
apparently, the docker hub image still uses jwilder...
Jan 9, 2022
6a2a3b0
Merge branch 'master' of github.com:MinimalCompact/thumbor into thumb…
Jan 9, 2022
c1801a2
update cairosvg
Jan 21, 2022
813cee4
envtpl version to 0.7.2 to fix AttributeError: module 'jinja2' has no…
mbarouski Jun 28, 2022
d337145
Merge pull request #106 from maximka777/thumbor-7
gingerlime Jun 28, 2022
c1dd14e
Create GHA for building
danquack Apr 25, 2023
338f36a
bump to thumbor 7.4.7 (latest)
danquack Apr 25, 2023
13384d6
Merge pull request #118 from danquack/gha
gingerlime Apr 25, 2023
a1bc573
Merge branch 'thumbor-7' into deps
gingerlime Apr 25, 2023
e0cb21e
Merge pull request #119 from danquack/deps
gingerlime Apr 25, 2023
7d244c9
moved requirements to txt ; updated community versions to latest with…
Apr 26, 2023
b57595c
fixed typos
Apr 26, 2023
e520fa5
added bats tests to github actions
Apr 26, 2023
319e988
split bats install and run
Apr 26, 2023
2dbff17
nginx-proxy-cache image might be required for testing
Apr 26, 2023
d2a44f7
fixes bats tests (#120)
gingerlime Apr 26, 2023
971699d
refactor github action to run sequentially (#121)
gingerlime Apr 28, 2023
da93faf
testing thumbor-7 push
Apr 28, 2023
fe1fd8e
removed semaphore ; update push for thumbor-7
Apr 28, 2023
d334975
explicit branch names
Apr 28, 2023
d461962
adding gha caching
Apr 28, 2023
8a6381d
switching to ghcr.io
Apr 28, 2023
1196f56
login to ghcr.io
Apr 28, 2023
263740c
testing push
Apr 28, 2023
4f63c79
trying explicit username/repo name
Apr 28, 2023
945aba6
Revert "trying explicit username/repo name"
Apr 28, 2023
b6b95b5
Revert "testing push"
Apr 28, 2023
5224474
Revert "Revert "testing push""
Apr 28, 2023
e273779
fix tags
Apr 28, 2023
53f564e
removing local tag for push
Apr 28, 2023
2112da5
change order
Apr 28, 2023
5152050
explicit registry name
Apr 28, 2023
f8610f5
another attempt to push to ghcr (using personal access token)
Apr 28, 2023
a95da14
another attempt with GITHUB_TOKEN
Apr 28, 2023
6e148cd
switching to personal access token
Apr 28, 2023
4a31dc4
docker login
danquack Apr 28, 2023
39fe365
use action
danquack Apr 28, 2023
a54933e
Merge pull request #123 from danquack/patch-1
gingerlime Apr 28, 2023
f40ef14
One more pass at trying to get this to work
danquack Apr 28, 2023
5f59538
Merge pull request #125 from MinimalCompact/danquack-patch-2
gingerlime Apr 28, 2023
de1c5b4
Revert "One more pass at trying to get this to work"
Apr 28, 2023
5efb523
Revert "use action"
Apr 28, 2023
2e691f4
Revert "docker login"
Apr 28, 2023
b1bba12
Remove Multi Arch support from SIMD (#126)
danquack Apr 28, 2023
b5b0fe7
updated docs + recipes for GHCR
Apr 28, 2023
82ab38a
adding retry to tests (setup using docker-compose can be unpredictable)
Apr 28, 2023
354ad6c
local tags for testing
Apr 28, 2023
3e573cc
base tag for testing
Apr 28, 2023
3247b6d
explicitly using :test tags
Apr 28, 2023
b402d76
improve workflow to login to ghcr only when pushing
Apr 29, 2023
ad2d62d
showing available images
Apr 29, 2023
94715bc
better caching?
Apr 29, 2023
1b5a064
adding more info before running tests about images
Apr 29, 2023
4ec37b5
switched from imgur (returns 429) to freeimage.host
Apr 29, 2023
79441f1
fixes tests with new cached data
Apr 29, 2023
35570f2
updated docs to remove imgur and use freeimage.host
Apr 29, 2023
2a4b61b
Overwrite host address 0.0.0.0 with THUMBOR_HOST (#129)
gingerlime Apr 29, 2023
10a70ac
refs ghcr.io
Apr 29, 2023
9da0893
typo
Apr 29, 2023
4e06a62
cleanup circus
Apr 29, 2023
1cafbfd
syncing remotecv with explicit thumbor version
Apr 29, 2023
8478102
tweak build script to add pull and adjust platform for remotecv
Apr 29, 2023
5171f81
should fix remotecv problem
Apr 29, 2023
6987d1d
getting ready to merge to master
May 6, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
48 changes: 48 additions & 0 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: Build test and push
on:
pull_request:
workflow_dispatch:
permissions:
contents: read
packages: write
jobs:
build-test-push:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: get thumbor version
id: thumbor
run: |
echo "VERSION=$(cat thumbor/requirements.txt| grep thumbor== | cut -d= -f 3)" >> $GITHUB_OUTPUT
- name: build images and load them for testing
run: |
./build --extra "--load --cache-from=type=gha --cache-to=type=gha" --branch "${GITHUB_REF_NAME}"
- name: install bats
run: |
git clone https://github.com/bats-core/bats-core.git
cd bats-core
sudo ./install.sh /usr/local
- name: run bats tests
uses: nick-fields/retry@v2
with:
timeout_minutes: 10
max_attempts: 3
command: |
docker image ls -a
for filename in tests/*.bats; do sudo bats --tap "$filename" || exit 1; done
- name: login to ghcr.io
if: github.head_ref == 'thumbor-7' || github.ref == 'refs/heads/master'
uses: docker/login-action@v2
with:
registry: ghcr.io
username: minimalcompact
password: ${{ secrets.GH_TOKEN }}
- name: push when master
if: github.ref == 'refs/heads/master'
run: |
./build --multiarch --push --branch master
33 changes: 0 additions & 33 deletions .semaphore/semaphore.yml

This file was deleted.

12 changes: 7 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,23 +8,25 @@ Key Features and Goals:

* The latest version of thumbor and dependencies, in a docker image
* Supports both solo thumbor and multiprocess in one image
* [Nginx frontend docker image with built-in caching](nginx-proxy-cache/README.md), using [nginx-proxy](https://github.com/jwilder/nginx-proxy)
* [Nginx frontend docker image with built-in caching](nginx-proxy-cache/README.md), using [nginx-proxy](https://github.com/nginx-proxy/nginx-proxy)
* SIMD support via docker tags
* remotecv docker image (for async smart cropping and feature detection)
* Clear version tagging to match Thumbor versions
* NOTE: from Thumbor 7.x images are no longer updated on docker hub and were moved to **ghcr.io**
`latest` will be deleted from docker hub eventually

## Quick Start

```
$ docker run -p 80:80 minimalcompact/thumbor
$ wget http://localhost/unsafe/500x150/i.imgur.com/Nfn80ck.png
$ docker run -p 80:80 ghcr.io/minimalcompact/thumbor
$ wget http://localhost/unsafe/500x150/iili.io/H8m6pHv.png
```

multi-process

```
$ docker run -p 80:80 -e THUMBOR_NUM_PROCESSES=8 minimalcompact/thumbor
$ wget http://localhost/unsafe/500x150/i.imgur.com/Nfn80ck.png
$ docker run -p 80:80 -e THUMBOR_NUM_PROCESSES=8 ghcr.io/minimalcompact/thumbor
$ wget http://localhost/unsafe/500x150/iili.io/H8m6pHv.png

```

Expand Down
4 changes: 2 additions & 2 deletions benchmarks/locust/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM python:3.6
FROM python:3.9

RUN python3.6 -m pip install locustio==0.11.0
RUN python3.9 -m pip install locustio==0.14.5

EXPOSE 8089
EXPOSE 5557
Expand Down
6 changes: 2 additions & 4 deletions benchmarks/locust/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
version: "3"
services:
thumbor:
image: minimalcompact/thumbor
image: ghcr.io/minimalcompact/thumbor
environment:
# we can control the number of processes and threads via ENV
- THUMBOR_NUM_PROCESSES=${THUMBOR_NUM_PROCESSES:-1}
- ENGINE_THREADPOOL_SIZE=${ENGINE_THREADPOOL_SIZE:-0}
# this would allow CORS from any origin (you can restrict to specific origins if you want)
- CORS_ALLOW_ORIGIN=*
# returns a webp image if browser Accept headers match
Expand All @@ -27,7 +26,6 @@ services:
environment:
- THUMBOR_DOCKER_PROCS=${THUMBOR_DOCKER_PROCS:-1}
- THUMBOR_NUM_PROCESSES=${THUMBOR_NUM_PROCESSES:-1}
- ENGINE_THREADPOOL_SIZE=${ENGINE_THREADPOOL_SIZE:-0}
volumes:
- ./scripts:/opt/scripts
- ./reports:/opt/reports
Expand All @@ -41,7 +39,7 @@ services:
--master
--expect-slaves 3
--only-summary
--csv=/opt/reports/${THUMBOR_DOCKER_PROCS}-${THUMBOR_NUM_PROCESSES}-${ENGINE_THREADPOOL_SIZE}"
--csv=/opt/reports/${THUMBOR_DOCKER_PROCS}-${THUMBOR_NUM_PROCESSES}"
# this is the locust slave. We can control the number of slaves using docker-compose scale
locust-slave:
build:
Expand Down
27 changes: 4 additions & 23 deletions benchmarks/locust/run_benchmark
Original file line number Diff line number Diff line change
Expand Up @@ -4,37 +4,18 @@ docker-compose build
docker-compose down

for procs in 1 3 6 9; do
for threads in 0 3 6; do
export THUMBOR_DOCKER_PROCS=1
for docker_procs in 1 3 6 9; do
export THUMBOR_DOCKER_PROCS=$docker_procs
export THUMBOR_NUM_PROCESSES=$procs
export ENGINE_THREADPOOL_SIZE=$threads

echo
echo "***************** BEGIN BENCHMARK WITH ${THUMBOR_DOCKER_PROCS} Docker processes, ${THUMBOR_NUM_PROCESSES} thumbor processes and ${ENGINE_THREADPOOL_SIZE} threads ********************"
echo "***************** BEGIN BENCHMARK WITH ${THUMBOR_DOCKER_PROCS} Docker processes, ${THUMBOR_NUM_PROCESSES} thumbor processes ********************"
echo
docker-compose up -d --scale locust-slave=3 --scale thumbor=${THUMBOR_DOCKER_PROCS} --force-recreate --always-recreate-deps --renew-anon-volumes
docker-compose logs -f locust
docker-compose down
echo
echo "***************** END BENCHMARK WITH ${THUMBOR_DOCKER_PROCS} Docker processes, ${THUMBOR_NUM_PROCESSES} thumbor processes and ${ENGINE_THREADPOOL_SIZE} threads ********************"
echo
done
done

for procs in 3 6 9; do
for threads in 0 3 6; do
export THUMBOR_DOCKER_PROCS=$procs
export THUMBOR_NUM_PROCESSES=1
export ENGINE_THREADPOOL_SIZE=$threads

echo
echo "***************** BEGIN BENCHMARK WITH ${THUMBOR_DOCKER_PROCS} Docker processes, ${THUMBOR_NUM_PROCESSES} thumbor processes and ${ENGINE_THREADPOOL_SIZE} threads ********************"
echo
docker-compose up -d --scale locust-slave=3 --scale thumbor=${THUMBOR_DOCKER_PROCS} --force-recreate --always-recreate-deps --renew-anon-volumes
docker-compose logs -f locust
docker-compose down
echo
echo "***************** END BENCHMARK WITH ${THUMBOR_DOCKER_PROCS} Docker processes, ${THUMBOR_NUM_PROCESSES} thumbor processes and ${ENGINE_THREADPOOL_SIZE} threads ********************"
echo "***************** END BENCHMARK WITH ${THUMBOR_DOCKER_PROCS} Docker processes, ${THUMBOR_NUM_PROCESSES} thumbor processes ********************"
echo
done
done
Expand Down
3 changes: 2 additions & 1 deletion benchmarks/locust/scripts/benchmark.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from locust import HttpLocust, TaskSet, task
from locust import HttpLocust, TaskSet, task, between


class HealthTaskSet(TaskSet):
Expand All @@ -17,3 +17,4 @@ def fit_in(self):

class Benchmark(HttpLocust):
task_set = SimpleTaskSet
wait_time = between(0, 0.1)
109 changes: 71 additions & 38 deletions build
Original file line number Diff line number Diff line change
@@ -1,48 +1,81 @@
#!/bin/bash
set -e

echo "--> BUILDING minimalcompact/thumbor"
docker build --pull -f thumbor/Dockerfile -t minimalcompact/thumbor thumbor/
# introspecting version by running the built image
THUMBOR_VERSION=`docker run --rm minimalcompact/thumbor bash -c "pip freeze |grep ^thumbor== | cut -d= -f 3"`
echo "THUMBOR VERSION: $THUMBOR_VERSION"
PLATFORM="linux/amd64"
EXTRA_ARGUMENTS=""
while true; do
case "$1" in
### Push requires authentication to minimalcompact docker hub
-p | --push)
EXTRA_ARGUMENTS="${EXTRA_ARGUMENTS} --push"
shift
;;
-b | --branch)
BRANCH="$2";
shift 2
;;
### Images have issues building multi arch, so hold behind a feature flag
-m | --multiarch)
PLATFORM="${PLATFORM},linux/arm64"
shift
;;
## Create should be run once, or in ci, if docker buildx ls doesnt contain supported platforms
-c | --create)
docker buildx create --use
shift
;;
-e | --extra )
EXTRA_ARGUMENTS="${EXTRA_ARGUMENTS} $2"
shift 2
;;
* ) break ;;
esac
done

THUMBOR_VERSION=$(cat thumbor/requirements.txt| grep thumbor== | cut -d= -f 3)

echo "--> TAGGING minimalcompact/thumbor:$THUMBOR_VERSION"
docker tag minimalcompact/thumbor minimalcompact/thumbor:$THUMBOR_VERSION
echo "--> TAGGING minimalcompact/thumbor:latest"
docker tag minimalcompact/thumbor minimalcompact/thumbor:latest
echo "Branch: ${BRANCH} | Thumbor version: ${THUMBOR_VERSION}"
echo "*******************************************************"

echo "--> BUILDING minimalcompact/thumbor-nginx-proxy-cache"
[ "$BRANCH" == "master" ] && EXTRA_TAG="--tag ghcr.io/minimalcompact/thumbor-nginx-proxy-cache:latest"
docker buildx build $EXTRA_ARGUMENTS --platform $PLATFORM --pull -f nginx-proxy-cache/Dockerfile \
--tag ghcr.io/minimalcompact/thumbor-nginx-proxy-cache:test \
--tag ghcr.io/minimalcompact/thumbor-nginx-proxy-cache:$THUMBOR_VERSION \
$EXTRA_TAG \
nginx-proxy-cache/

echo "--> BUILDING minimalcompact/thumbor"
[ "$BRANCH" == "master" ] && EXTRA_TAG="--tag ghcr.io/minimalcompact/thumbor:latest"
docker buildx build $EXTRA_ARGUMENTS --platform $PLATFORM --pull -f thumbor/Dockerfile \
--tag ghcr.io/minimalcompact/thumbor:test \
--tag ghcr.io/minimalcompact/thumbor:$THUMBOR_VERSION \
$EXTRA_TAG \
thumbor/

echo "--> BUILDING minimalcompact/thumbor:simd-sse4"
docker build --build-arg SIMD_LEVEL=sse4 -f thumbor/Dockerfile -t minimalcompact/thumbor-simd-sse4 thumbor/
echo "--> TAGGING minimalcompact/thumbor:$THUMBOR_VERSION-simd-sse4"
docker tag minimalcompact/thumbor-simd-sse4 minimalcompact/thumbor:$THUMBOR_VERSION-simd-sse4
echo "--> TAGGING minimalcompact/thumbor:latest-simd-sse4"
docker tag minimalcompact/thumbor-simd-sse4 minimalcompact/thumbor:latest-simd-sse4
[ "$BRANCH" == "master" ] && EXTRA_TAG="--tag ghcr.io/minimalcompact/thumbor:latest-simd-sse4t"
## SSE doesnt support multi arch
docker buildx build $EXTRA_ARGUMENTS --platform linux/amd64 --build-arg SIMD_LEVEL=sse4 --pull -f thumbor/Dockerfile \
--tag ghcr.io/minimalcompact/thumbor:$THUMBOR_VERSION-simd-sse4 \
$EXTRA_TAG \
thumbor/

echo "--> BUILDING minimalcompact/thumbor:simd-avx2"
docker build --build-arg SIMD_LEVEL=avx2 -f thumbor/Dockerfile -t minimalcompact/thumbor-simd-avx2 thumbor/
echo "--> TAGGING minimalcompact/thumbor:$THUMBOR_VERSION-simd-avx2"
docker tag minimalcompact/thumbor-simd-avx2 minimalcompact/thumbor:$THUMBOR_VERSION-simd-avx2
echo "--> TAGGING minimalcompact/thumbor:latest-simd-avx2"
docker tag minimalcompact/thumbor-simd-avx2 minimalcompact/thumbor:latest-simd-avx2

echo "--> BUILDING minimalcompact/thumbor-nginx-proxy (DEPRECATED)"
docker build --pull -f nginx-proxy/Dockerfile -t minimalcompact/thumbor-nginx-proxy nginx-proxy/
echo "--> TAGGING minimalcompact/thumbor-nginx-proxy:$THUMBOR_VERSION"
docker tag minimalcompact/thumbor-nginx-proxy minimalcompact/thumbor-nginx-proxy:$THUMBOR_VERSION
echo "--> TAGGING minimalcompact/thumbor-nginx-proxy:latest"
docker tag minimalcompact/thumbor-nginx-proxy minimalcompact/thumbor-nginx-proxy:latest

echo "--> BUILDING minimalcompact/thumbor-nginx-proxy-cache"
docker build --pull -f nginx-proxy-cache/Dockerfile -t minimalcompact/thumbor-nginx-proxy-cache nginx-proxy-cache/
echo "--> TAGGING minimalcompact/thumbor-nginx-proxy-cache:$THUMBOR_VERSION"
docker tag minimalcompact/thumbor-nginx-proxy-cache minimalcompact/thumbor-nginx-proxy-cache:$THUMBOR_VERSION
echo "--> TAGGING minimalcompact/thumbor-nginx-proxy-cache:latest"
docker tag minimalcompact/thumbor-nginx-proxy-cache minimalcompact/thumbor-nginx-proxy-cache:latest
[ "$BRANCH" == "master" ] && EXTRA_TAG="--tag ghcr.io/minimalcompact/thumbor:latest-simd-avx2"
## AVX2 Doesnt support multi arch
docker buildx build $EXTRA_ARGUMENTS --platform linux/amd64 --build-arg SIMD_LEVEL=avx2 --pull -f thumbor/Dockerfile \
--tag ghcr.io/minimalcompact/thumbor:$THUMBOR_VERSION-simd-avx2 \
$EXTRA_TAG \
thumbor/

echo "--> BUILDING minimalcompact/remotecv"
docker build --build-arg THUMBOR_TAG=latest -f remotecv/Dockerfile -t minimalcompact/remotecv remotecv/
echo "--> TAGGING minimalcompact/remotecv:$THUMBOR_VERSION"
docker tag minimalcompact/remotecv minimalcompact/remotecv:$THUMBOR_VERSION
echo "--> TAGGING minimalcompact/remotecv:latest"
docker tag minimalcompact/remotecv minimalcompact/remotecv:latest
[ "$BRANCH" == "master" ] && EXTRA_TAG="--tag ghcr.io/minimalcompact/remotecv:latest"
docker buildx build $EXTRA_ARGUMENTS --platform $PLATFORM --build-arg THUMBOR_TAG=$THUMBOR_VERSION --pull -f remotecv/Dockerfile \
--tag ghcr.io/minimalcompact/remotecv:$THUMBOR_VERSION \
$EXTRA_TAG \
remotecv/

echo "*******************************************************"
echo Docker images:
docker image ls -a
4 changes: 2 additions & 2 deletions nginx-proxy-cache/README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# Minimal Compact thumbor nginx proxy cache

A caching proxy for thumbor based on [nginx-proxy](https://github.com/jwilder/nginx-proxy)
A caching proxy for thumbor based on [nginx-proxy](https://github.com/nginx-proxy/nginx-proxy)

## Basics

[nginx-proxy](https://github.com/jwilder/nginx-proxy) provides a way to dynamically attach docker images and get them proxied by Nginx.
[nginx-proxy](https://github.com/nginx-proxy/nginx-proxy) provides a way to dynamically attach docker images and get them proxied by Nginx.

This image adds a proxy caching layer into `nginx-proxy`, using the built-in `proxy_cache` directive.

Expand Down
9 changes: 0 additions & 9 deletions nginx-proxy/Dockerfile

This file was deleted.

42 changes: 0 additions & 42 deletions nginx-proxy/deprecated.sh

This file was deleted.

5 changes: 0 additions & 5 deletions nginx-proxy/imgpath.js

This file was deleted.