├── .env ├── Caddyfile ├── README.md ├── docker-compose-inits.yml ├── docker-compose.yml ├── download.sh ├── setup.sh ├── taiga-gateway └── taiga.conf └── taiga-manage.sh /.env: -------------------------------------------------------------------------------- 1 | 2 | # Taiga's URLs - Variables to define where Taiga should be served 3 | TAIGA_SCHEME=https # serve Taiga using "http" or "https" (secured) connection 4 | TAIGA_DOMAIN=taiga.your-domain.com # Taiga's base URL 5 | SUBPATH="" # it'll be appended to the TAIGA_DOMAIN (use either "" or a "/subpath") 6 | WEBSOCKETS_SCHEME=wss # events connection protocol (use either "ws" or "wss") 7 | 8 | # Taiga's Secret Key - Variable to provide cryptographic signing 9 | SECRET_KEY="g*IWakUU!PX7u#a@" # Please, change it to an unpredictable value!! 10 | 11 | # Taiga's Database settings - Variables to create the Taiga database and connect to it 12 | POSTGRES_USER=taiga # user to connect to PostgreSQL 13 | POSTGRES_PASSWORD=taiga # database user's password 14 | 15 | # Taiga's SMTP settings - Variables to send Taiga's emails to the users 16 | EMAIL_BACKEND=smtp # use an SMTP server or display the emails in the console (either "smtp" or "console") 17 | EMAIL_HOST=smtp.domain.com # SMTP server address 18 | EMAIL_PORT=465 # default SMTP port 19 | EMAIL_HOST_USER=taiga@domain.com # user to connect the SMTP server 20 | EMAIL_HOST_PASSWORD= # SMTP user's password 21 | EMAIL_DEFAULT_FROM=taiga@domain.com # default email address for the automated emails 22 | # EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive (only set one of those to True) 23 | EMAIL_USE_TLS=False # use TLS (secure) connection with the SMTP server 24 | EMAIL_USE_SSL=True # use implicit TLS (secure) connection with the SMTP server 25 | 26 | # Taiga's RabbitMQ settings - Variables to leave messages for the realtime and asynchronous events 27 | RABBITMQ_USER=taiga # user to connect to RabbitMQ 28 | RABBITMQ_PASS=taiga # RabbitMQ user's password 29 | RABBITMQ_VHOST=taiga # RabbitMQ container name 30 | RABBITMQ_ERLANG_COOKIE=secret-erlang-cookie # unique value shared by any connected instance of RabbitMQ 31 | 32 | # Taiga's Attachments - Variable to define how long the attachments will be accesible 33 | ATTACHMENTS_MAX_AGE=360 # token expiration date (in seconds) 34 | 35 | # Taiga's Telemetry - Variable to enable or disable the anonymous telemetry 36 | ENABLE_TELEMETRY=True 37 | -------------------------------------------------------------------------------- /Caddyfile: -------------------------------------------------------------------------------- 1 | https://taiga.your-domain.com:443 { 2 | header Strict-Transport-Security max-age=31536000; 3 | reverse_proxy 127.0.0.1:8000 4 | # tls admin@example.org 5 | encode zstd gzip 6 | 7 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Installing Taiga with docker-compose. 2 | 3 | ## Quick Installation 4 | 5 | **Before starting the instance, direct the domain (subdomain) to the ip of the server where Taiga will be installed!** 6 | 7 | ## 1. Taiga Server Requirements 8 | From and more 9 | - 2 CPUs 10 | - 2 RAM 11 | - 10 Gb 12 | 13 | Run for Ubuntu 22.04 14 | 15 | ``` bash 16 | sudo apt-get purge needrestart 17 | ``` 18 | 19 | Install docker and docker-compose: 20 | 21 | ``` bash 22 | curl -s https://raw.githubusercontent.com/6Ministers/taiga-io-docker-compose-for-projects/master/setup.sh | sudo bash -s 23 | ``` 24 | 25 | Download Taiga instance: 26 | 27 | 28 | ``` bash 29 | curl -s https://raw.githubusercontent.com/6Ministers/taiga-io-docker-compose-for-projects/master/download.sh | sudo bash -s taiga 30 | ``` 31 | 32 | If `curl` is not found, install it: 33 | 34 | ``` bash 35 | $ sudo apt-get install curl 36 | # or 37 | $ sudo yum install curl 38 | ``` 39 | 40 | Go to the catalog 41 | 42 | ``` bash 43 | cd taiga 44 | ``` 45 | In the configuration file .env`, set the following parameters: 46 | 47 | Install what you need, documentation: 48 | 49 | ``` bash 50 | # Taiga's URLs - Variables to define where Taiga should be served 51 | TAIGA_SCHEME=https # serve Taiga using "http" or "https" (secured) connection 52 | TAIGA_DOMAIN=taiga.your-domain.com # Taiga's base URL 53 | SUBPATH="" # it'll be appended to the TAIGA_DOMAIN (use either "" or a "/subpath") 54 | WEBSOCKETS_SCHEME=wss # events connection protocol (use either "ws" or "wss") 55 | 56 | # Taiga's Secret Key - Variable to provide cryptographic signing 57 | SECRET_KEY="g*IWakUU!PX7u#a@" # Please, change it to an unpredictable value!! 58 | 59 | # Taiga's Database settings - Variables to create the Taiga database and connect to it 60 | POSTGRES_USER=taiga # user to connect to PostgreSQL 61 | POSTGRES_PASSWORD=taiga # database user's password 62 | 63 | # Taiga's SMTP settings - Variables to send Taiga's emails to the users 64 | EMAIL_BACKEND=smtp # use an SMTP server or display the emails in the console (either "smtp" or "console") 65 | EMAIL_HOST=smtp.domain.com # SMTP server address 66 | EMAIL_PORT=465 # default SMTP port 67 | EMAIL_HOST_USER=taiga@domain.com # user to connect the SMTP server 68 | EMAIL_HOST_PASSWORD=tmsa43dfgrertertS9B&63 # SMTP user's password 69 | EMAIL_DEFAULT_FROM=taiga@domain.com.site # default email address for the automated emails 70 | # EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive (only set one of those to True) 71 | EMAIL_USE_TLS=False # use TLS (secure) connection with the SMTP server 72 | EMAIL_USE_SSL=True # use implicit TLS (secure) connection with the SMTP server 73 | 74 | # Taiga's RabbitMQ settings - Variables to leave messages for the realtime and asynchronous events 75 | RABBITMQ_USER=taiga # user to connect to RabbitMQ 76 | RABBITMQ_PASS=taiga # RabbitMQ user's password 77 | RABBITMQ_VHOST=taiga # RabbitMQ container name 78 | RABBITMQ_ERLANG_COOKIE=secret-erlang-cookie # unique value shared by any connected instance of RabbitMQ 79 | 80 | # Taiga's Attachments - Variable to define how long the attachments will be accesible 81 | ATTACHMENTS_MAX_AGE=360 # token expiration date (in seconds) 82 | 83 | # Taiga's Telemetry - Variable to enable or disable the anonymous telemetry 84 | ENABLE_TELEMETRY=True 85 | ``` 86 | 87 | 88 | To change the domain in the `Caddyfile` to your own 89 | 90 | ``` bash 91 | https://taiga.your-domain:443 { 92 | header Strict-Transport-Security max-age=31536000; 93 | reverse_proxy 127.0.0.1:8000 94 | # tls admin@example.org 95 | encode zstd gzip 96 | } 97 | ``` 98 | 99 | **Run Taiga:** 100 | 101 | ``` bash 102 | docker-compose up -d 103 | ``` 104 | 105 | So that the script can run, we make it executable 106 | 107 | ``` bash 108 | chmod +x taiga-manage.sh 109 | ``` 110 | 111 | Then we create a user 112 | 113 | ``` bash 114 | ./taiga-manage.sh createsuperuser 115 | ``` 116 | 117 | * `Login` 118 | * `Email` 119 | * `Password` 120 | 121 | Then open `https://taiga.domain.com:` to access Taiga 122 | 123 | 124 | 125 | 126 | 127 | ## Taiga container management 128 | 129 | **Run Taiga**: 130 | 131 | ``` bash 132 | docker-compose up -d 133 | ``` 134 | 135 | **Restart**: 136 | 137 | ``` bash 138 | docker-compose restart 139 | ``` 140 | 141 | **Restart**: 142 | 143 | ``` bash 144 | sudo docker-compose down && sudo docker-compose up -d 145 | ``` 146 | 147 | **Stop**: 148 | 149 | ``` bash 150 | docker-compose down 151 | ``` 152 | 153 | ## Documentation 154 | 155 | -------------------------------------------------------------------------------- /docker-compose-inits.yml: -------------------------------------------------------------------------------- 1 | version: "3.5" 2 | 3 | x-environment: 4 | &default-back-environment 5 | POSTGRES_DB: "taiga" 6 | POSTGRES_USER: "${POSTGRES_USER}" 7 | POSTGRES_PASSWORD: "${POSTGRES_PASSWORD}" 8 | POSTGRES_HOST: "taiga-db" 9 | TAIGA_SECRET_KEY: "${SECRET_KEY}" 10 | RABBITMQ_USER: "${RABBITMQ_USER}" 11 | RABBITMQ_PASS: "${RABBITMQ_PASS}" 12 | CELERY_ENABLED: "False" 13 | 14 | x-volumes: 15 | &default-back-volumes 16 | - taiga-static-data:/taiga-back/static 17 | - taiga-media-data:/taiga-back/media 18 | # - ./config.py:/taiga-back/settings/config.py 19 | 20 | services: 21 | taiga-manage: 22 | image: taigaio/taiga-back:latest 23 | environment: *default-back-environment 24 | depends_on: 25 | - taiga-db 26 | entrypoint: "python manage.py" 27 | volumes: *default-back-volumes 28 | networks: 29 | - taiga 30 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3.5" 2 | x-environment: 3 | &default-back-environment 4 | # These environment variables will be used by taiga-back and taiga-async. 5 | # Database settings 6 | POSTGRES_DB: "taiga" 7 | POSTGRES_USER: "${POSTGRES_USER}" 8 | POSTGRES_PASSWORD: "${POSTGRES_PASSWORD}" 9 | POSTGRES_HOST: "taiga-db" 10 | # Taiga settings 11 | TAIGA_SECRET_KEY: "${SECRET_KEY}" 12 | TAIGA_SITES_SCHEME: "${TAIGA_SCHEME}" 13 | TAIGA_SITES_DOMAIN: "${TAIGA_DOMAIN}" 14 | TAIGA_SUBPATH: "${SUBPATH}" 15 | # Email settings. 16 | EMAIL_BACKEND: "django.core.mail.backends.${EMAIL_BACKEND}.EmailBackend" 17 | DEFAULT_FROM_EMAIL: "${EMAIL_DEFAULT_FROM}" 18 | EMAIL_USE_TLS: "${EMAIL_USE_TLS}" 19 | EMAIL_USE_SSL: "${EMAIL_USE_SSL}" 20 | EMAIL_HOST: "${EMAIL_HOST}" 21 | EMAIL_PORT: "${EMAIL_PORT}" 22 | EMAIL_HOST_USER: "${EMAIL_HOST_USER}" 23 | EMAIL_HOST_PASSWORD: "${EMAIL_HOST_PASSWORD}" 24 | # Rabbitmq settings 25 | RABBITMQ_USER: "${RABBITMQ_USER}" 26 | RABBITMQ_PASS: "${RABBITMQ_PASS}" 27 | # Telemetry settings 28 | ENABLE_TELEMETRY: "${ENABLE_TELEMETRY}" 29 | # ...your customizations go here 30 | x-volumes: 31 | &default-back-volumes 32 | # These volumens will be used by taiga-back and taiga-async. 33 | - taiga-static-data:/taiga-back/static 34 | - taiga-media-data:/taiga-back/media 35 | # - ./config.py:/taiga-back/settings/config.py 36 | 37 | services: 38 | caddy: 39 | image: caddy:alpine 40 | restart: unless-stopped 41 | container_name: caddy 42 | volumes: 43 | - ./Caddyfile:/etc/caddy/Caddyfile 44 | - ./certs:/certs 45 | - ./config:/config 46 | - ./data:/data 47 | - ./sites:/srv 48 | network_mode: "host" 49 | 50 | taiga-db: 51 | image: postgres:12.3 52 | restart: always 53 | environment: 54 | POSTGRES_DB: "taiga" 55 | POSTGRES_USER: "${POSTGRES_USER}" 56 | POSTGRES_PASSWORD: "${POSTGRES_PASSWORD}" 57 | healthcheck: 58 | test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"] 59 | interval: 2s 60 | timeout: 15s 61 | retries: 5 62 | start_period: 3s 63 | volumes: 64 | - taiga-db-data:/var/lib/postgresql/data 65 | networks: 66 | - taiga 67 | 68 | taiga-back: 69 | image: taigaio/taiga-back:latest 70 | restart: always 71 | environment: *default-back-environment 72 | volumes: *default-back-volumes 73 | networks: 74 | - taiga 75 | depends_on: 76 | taiga-db: 77 | condition: service_healthy 78 | taiga-events-rabbitmq: 79 | condition: service_started 80 | taiga-async-rabbitmq: 81 | condition: service_started 82 | 83 | taiga-async: 84 | image: taigaio/taiga-back:latest 85 | restart: always 86 | entrypoint: ["/taiga-back/docker/async_entrypoint.sh"] 87 | environment: *default-back-environment 88 | volumes: *default-back-volumes 89 | networks: 90 | - taiga 91 | depends_on: 92 | taiga-db: 93 | condition: service_healthy 94 | taiga-events-rabbitmq: 95 | condition: service_started 96 | taiga-async-rabbitmq: 97 | condition: service_started 98 | 99 | taiga-async-rabbitmq: 100 | image: rabbitmq:3.8-management-alpine 101 | restart: always 102 | environment: 103 | RABBITMQ_ERLANG_COOKIE: "${RABBITMQ_ERLANG_COOKIE}" 104 | RABBITMQ_DEFAULT_USER: "${RABBITMQ_USER}" 105 | RABBITMQ_DEFAULT_PASS: "${RABBITMQ_PASS}" 106 | RABBITMQ_DEFAULT_VHOST: "${RABBITMQ_VHOST}" 107 | hostname: "taiga-async-rabbitmq" 108 | volumes: 109 | - taiga-async-rabbitmq-data:/var/lib/rabbitmq 110 | networks: 111 | - taiga 112 | 113 | taiga-front: 114 | image: taigaio/taiga-front:latest 115 | restart: always 116 | environment: 117 | TAIGA_URL: "${TAIGA_SCHEME}://${TAIGA_DOMAIN}" 118 | TAIGA_WEBSOCKETS_URL: "${WEBSOCKETS_SCHEME}://${TAIGA_DOMAIN}" 119 | TAIGA_SUBPATH: "${SUBPATH}" 120 | # ...your customizations go here 121 | networks: 122 | - taiga 123 | # volumes: 124 | # - ./conf.json:/usr/share/nginx/html/conf.json 125 | 126 | taiga-events: 127 | image: taigaio/taiga-events:latest 128 | restart: always 129 | environment: 130 | RABBITMQ_USER: "${RABBITMQ_USER}" 131 | RABBITMQ_PASS: "${RABBITMQ_PASS}" 132 | TAIGA_SECRET_KEY: "${SECRET_KEY}" 133 | networks: 134 | - taiga 135 | depends_on: 136 | taiga-events-rabbitmq: 137 | condition: service_started 138 | 139 | taiga-events-rabbitmq: 140 | image: rabbitmq:3.8-management-alpine 141 | restart: always 142 | environment: 143 | RABBITMQ_ERLANG_COOKIE: "${RABBITMQ_ERLANG_COOKIE}" 144 | RABBITMQ_DEFAULT_USER: "${RABBITMQ_USER}" 145 | RABBITMQ_DEFAULT_PASS: "${RABBITMQ_PASS}" 146 | RABBITMQ_DEFAULT_VHOST: "${RABBITMQ_VHOST}" 147 | hostname: "taiga-events-rabbitmq" 148 | volumes: 149 | - taiga-events-rabbitmq-data:/var/lib/rabbitmq 150 | networks: 151 | - taiga 152 | 153 | taiga-protected: 154 | image: taigaio/taiga-protected:latest 155 | restart: always 156 | environment: 157 | MAX_AGE: "${ATTACHMENTS_MAX_AGE}" 158 | SECRET_KEY: "${SECRET_KEY}" 159 | networks: 160 | - taiga 161 | 162 | taiga-gateway: 163 | image: nginx:1.19-alpine 164 | restart: always 165 | ports: 166 | - "8000:80" 167 | volumes: 168 | - ./taiga-gateway/taiga.conf:/etc/nginx/conf.d/default.conf 169 | - taiga-static-data:/taiga/static 170 | - taiga-media-data:/taiga/media 171 | networks: 172 | - taiga 173 | depends_on: 174 | - taiga-front 175 | - taiga-back 176 | - taiga-events 177 | 178 | 179 | volumes: 180 | taiga-static-data: 181 | taiga-media-data: 182 | taiga-db-data: 183 | taiga-async-rabbitmq-data: 184 | taiga-events-rabbitmq-data: 185 | networks: 186 | taiga: -------------------------------------------------------------------------------- /download.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | DESTINATION=$1 4 | 5 | # clone Flectra directory 6 | git clone --depth=1 https://github.com/6Ministers/taiga-io-docker-compose-for-projects $DESTINATION 7 | rm -rf $DESTINATION/.git 8 | 9 | 10 | -------------------------------------------------------------------------------- /setup.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # This script setups dockerized Ubuntu 22.04. 4 | 5 | set -eu 6 | 7 | install_docker() { 8 | # Install Docker 9 | export DEBIAN_FRONTEND=noninteractive 10 | sudo apt-get -qqy update 11 | DEBIAN_FRONTEND=noninteractive sudo -E apt-get -qqy -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade 12 | sudo apt-get -yy install apt-transport-https ca-certificates curl software-properties-common pwgen gnupg 13 | sudo install -m 0755 -d /etc/apt/keyrings 14 | curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg 15 | sudo chmod a+r /etc/apt/keyrings/docker.gpg 16 | echo \ 17 | "deb [arch=""$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ 18 | ""$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | 19 | sudo tee /etc/apt/sources.list.d/docker.list >/dev/null 20 | sudo apt-get update && sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin 21 | 22 | # Install Docker Compose 23 | sudo ln -sfv /usr/libexec/docker/cli-plugins/docker-compose /usr/local/bin/docker-compose 24 | 25 | # Allow current user to run Docker commands 26 | sudo usermod -aG docker "$USER" 27 | } 28 | 29 | install_docker 30 | -------------------------------------------------------------------------------- /taiga-gateway/taiga.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80 default_server; 3 | 4 | client_max_body_size 100M; 5 | charset utf-8; 6 | 7 | # Frontend 8 | location / { 9 | proxy_pass http://taiga-front/; 10 | proxy_pass_header Server; 11 | proxy_set_header Host $http_host; 12 | proxy_redirect off; 13 | proxy_set_header X-Real-IP $remote_addr; 14 | proxy_set_header X-Scheme $scheme; 15 | } 16 | 17 | # API 18 | location /api/ { 19 | proxy_pass http://taiga-back:8000/api/; 20 | proxy_pass_header Server; 21 | proxy_set_header Host $http_host; 22 | proxy_redirect off; 23 | proxy_set_header X-Real-IP $remote_addr; 24 | proxy_set_header X-Scheme $scheme; 25 | } 26 | 27 | # Admin 28 | location /admin/ { 29 | proxy_pass http://taiga-back:8000/admin/; 30 | proxy_pass_header Server; 31 | proxy_set_header Host $http_host; 32 | proxy_redirect off; 33 | proxy_set_header X-Real-IP $remote_addr; 34 | proxy_set_header X-Scheme $scheme; 35 | } 36 | 37 | # Static 38 | location /static/ { 39 | alias /taiga/static/; 40 | } 41 | 42 | # Media 43 | location /_protected/ { 44 | internal; 45 | alias /taiga/media/; 46 | add_header Content-disposition "attachment"; 47 | } 48 | 49 | # Unprotected section 50 | location /media/exports/ { 51 | alias /taiga/media/exports/; 52 | add_header Content-disposition "attachment"; 53 | } 54 | 55 | location /media/ { 56 | proxy_set_header Host $http_host; 57 | proxy_set_header X-Real-IP $remote_addr; 58 | proxy_set_header X-Scheme $scheme; 59 | proxy_set_header X-Forwarded-Proto $scheme; 60 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 61 | proxy_pass http://taiga-protected:8003/; 62 | proxy_redirect off; 63 | } 64 | 65 | # Events 66 | location /events { 67 | proxy_pass http://taiga-events:8888/events; 68 | proxy_http_version 1.1; 69 | proxy_set_header Upgrade $http_upgrade; 70 | proxy_set_header Connection "upgrade"; 71 | proxy_connect_timeout 7d; 72 | proxy_send_timeout 7d; 73 | proxy_read_timeout 7d; 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /taiga-manage.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # This Source Code Form is subject to the terms of the Mozilla Public 4 | # License, v. 2.0. If a copy of the MPL was not distributed with this 5 | # file, You can obtain one at http://mozilla.org/MPL/2.0/. 6 | # 7 | # Copyright (c) 2021-present Kaleidos Ventures SL 8 | 9 | set -x 10 | exec docker compose -f docker-compose.yml -f docker-compose-inits.yml run --rm taiga-manage $@ 11 | --------------------------------------------------------------------------------