Docker Setup on ARM

How to Setup Taiga with Docker on an ARM Machine

Recently, I wanted to deploy Taiga on an ARM machine and was a bit confused that there is no official Docker image for Taiga. At first, this seemed to prevent using the official docker-compose setup.

After some digging, I realized it would be best to modify the setup so that it can run on ARM. Surprisingly, this was quite easy and straightforward, mostly thanks to the very well-organized structure of the Taiga repositories – thank you, Taiga devs!

As I do not have enought capacity to maintain my own images for taiga, I decided to create some simple instructions, such that anyone can reproduce the process.

Before we start, the obligatory disclaimer:
This is not an official guide. I am in no way associated with Taiga. And there is no warranty whatsoever if you use this guide, that the world will not explode in a big mess. And there is no warranty either that it wouldn’t, if you don’t.

The Actual HOWTO

The process is quite simple: clone the official taiga-docker repository and all other repos required to build the Docker images, right into that repository. Switch to the stable branch everywhere. Modify the Dockerfile of each repository for ARM compatibility. Then modify docker-compose.yml in the taiga-docker repository to use your custom builds instead of the official images. From that point on, follow the
official Docker setup guide, and you’re done.

Step-by-Step Guide

  1. Clone all repositories and set them to use the stable branch for production:
    git clone --branch stable --single-branch https://github.com/taigaio/taiga-docker
    cd taiga-docker
    git clone --branch stable --single-branch https://github.com/taigaio/taiga-back
    git clone --branch stable --single-branch https://github.com/taigaio/taiga-front
    git clone --branch stable --single-branch https://github.com/taigaio/taiga-protected
    git clone --branch stable --single-branch https://github.com/taigaio/taiga-events
    
  2. Edit taiga-docker/docker-compose.yml and replace the image sections with build sections. Here’s a diff:
    --- a/docker-compose.yml
    +++ b/docker-compose.yml
    @@ -55,7 +55,9 @@ services:
         - taiga
    
      taiga-back:
    -    image: taigaio/taiga-back:latest
    +    build:
    +      context: ./taiga-back/
    +      dockerfile: docker/Dockerfile
         environment: *default-back-environment
         volumes: *default-back-volumes
         networks:
    @@ -69,7 +71,9 @@ services:
           condition: service_started
    
      taiga-async:
    -    image: taigaio/taiga-back:latest
    +    build:
    +      context: ./taiga-back/
    +      dockerfile: docker/Dockerfile
         entrypoint: ["/taiga-back/docker/async_entrypoint.sh"]
         environment: *default-back-environment
         volumes: *default-back-volumes
    @@ -97,7 +101,9 @@ services:
         - taiga
    
      taiga-front:
    -    image: taigaio/taiga-front:latest
    +    build:
    +      context: ./taiga-front/
    +      dockerfile: docker/Dockerfile
         environment:
           TAIGA_URL: "${TAIGA_SCHEME}://${TAIGA_DOMAIN}"
           TAIGA_WEBSOCKETS_URL: "${WEBSOCKETS_SCHEME}://${TAIGA_DOMAIN}"
    @@ -109,7 +115,9 @@ services:
         #   - ./conf.json:/usr/share/nginx/html/conf.json
    
      taiga-events:
    -    image: taigaio/taiga-events:latest
    +    build:
    +      context: ./taiga-events/
    +      dockerfile: docker/Dockerfile
         environment:
           RABBITMQ_USER: "${RABBITMQ_USER}"
           RABBITMQ_PASS: "${RABBITMQ_PASS}"
    @@ -134,17 +142,19 @@ services:
         - taiga
    
      taiga-protected:
    -    image: taigaio/taiga-protected:latest
    +    build:
    +      context: ./taiga-protected/
    +      dockerfile: docker/Dockerfile
         environment:
           MAX_AGE: "${ATTACHMENTS_MAX_AGE}"
           SECRET_KEY: "${SECRET_KEY}"
    
  3. Now the really “hard” part. The Dockerfiles must be replaced with ARM versions. That means that you will need to copy each of the following Dockerfiles and politely ask an AI of your choosing to translate it to an ARM version of it. You may also ask impolitely and get the same results.
    taiga-docker/taiga-back/docker/Dockerfile
    taiga-docker/taiga-front/docker/Dockerfile
    taiga-docker/taiga-protected/docker/Dockerfile
    taiga-docker/taiga-events/docker/Dockerfile
    
  4. That’s it! After this, proceed with the
    official Docker setup guide.

One thing I forgot as a follow up post, since I couldn’t find out how to edit the original post:

At one point I had to edit the requirements.txt in taiga-back, that was the only change besides the Dockerfiles:

diff --git a/requirements.txt b/requirements.txt
index a9dcd725..17077896 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -153,7 +153,7 @@ prompt-toolkit==3.0.52
     # via click-repl
 psd-tools==1.9.34
     # via -r requirements.in
-psycopg2==2.9.10
+psycopg2-binary==2.9.10
     # via -r requirements.in
 pycparser==2.23
     # via cffi