Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
145 changes: 145 additions & 0 deletions blueprints/taiga/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
version: "3.8"

x-environment: &default-back-environment
POSTGRES_DB: taiga
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_HOST: taiga-db
TAIGA_SECRET_KEY: ${SECRET_KEY}
TAIGA_SITES_SCHEME: ${TAIGA_SCHEME}
TAIGA_SITES_DOMAIN: ${TAIGA_DOMAIN}
TAIGA_SUBPATH: ${SUBPATH}
EMAIL_BACKEND: django.core.mail.backends.${EMAIL_BACKEND}.EmailBackend
DEFAULT_FROM_EMAIL: ${EMAIL_DEFAULT_FROM}
EMAIL_USE_TLS: ${EMAIL_USE_TLS}
EMAIL_USE_SSL: ${EMAIL_USE_SSL}
EMAIL_HOST: ${EMAIL_HOST}
EMAIL_PORT: ${EMAIL_PORT}
EMAIL_HOST_USER: ${EMAIL_HOST_USER}
EMAIL_HOST_PASSWORD: ${EMAIL_HOST_PASSWORD}
RABBITMQ_USER: ${RABBITMQ_USER}
RABBITMQ_PASS: ${RABBITMQ_PASS}
RABBITMQ_VHOST: ${RABBITMQ_VHOST}
ENABLE_TELEMETRY: ${ENABLE_TELEMETRY}
PUBLIC_REGISTER_ENABLED: ${PUBLIC_REGISTER_ENABLED}

x-back-volumes: &default-back-volumes
- taiga-static-data:/taiga-back/static
- taiga-media-data:/taiga-back/media

services:
taiga-db:
image: postgres:12.3
restart: unless-stopped
environment:
POSTGRES_DB: taiga
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"]
interval: 2s
timeout: 15s
retries: 5
start_period: 3s
volumes:
- taiga-db-data:/var/lib/postgresql/data

taiga-back:
image: taigaio/taiga-back:latest
restart: unless-stopped
environment: *default-back-environment
volumes: *default-back-volumes
depends_on:
taiga-db:
condition: service_healthy
taiga-events-rabbitmq:
condition: service_started
taiga-async-rabbitmq:
condition: service_started

taiga-async:
image: taigaio/taiga-back:latest
restart: unless-stopped
entrypoint: ["/taiga-back/docker/async_entrypoint.sh"]
environment: *default-back-environment
volumes: *default-back-volumes
depends_on:
taiga-db:
condition: service_healthy
taiga-events-rabbitmq:
condition: service_started
taiga-async-rabbitmq:
condition: service_started

taiga-async-rabbitmq:
image: rabbitmq:3.8-management-alpine
restart: unless-stopped
hostname: taiga-async-rabbitmq
environment:
RABBITMQ_ERLANG_COOKIE: ${RABBITMQ_ERLANG_COOKIE}
RABBITMQ_DEFAULT_USER: ${RABBITMQ_USER}
RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASS}
RABBITMQ_DEFAULT_VHOST: ${RABBITMQ_VHOST}
volumes:
- taiga-async-rabbitmq-data:/var/lib/rabbitmq

taiga-front:
image: taigaio/taiga-front:latest
restart: unless-stopped
environment:
TAIGA_URL: ${TAIGA_SCHEME}://${TAIGA_DOMAIN}
TAIGA_WEBSOCKETS_URL: ${WEBSOCKETS_SCHEME}://${TAIGA_DOMAIN}
TAIGA_SUBPATH: ${SUBPATH}
PUBLIC_REGISTER_ENABLED: ${PUBLIC_REGISTER_ENABLED_FRONT}

taiga-events:
image: taigaio/taiga-events:latest
restart: unless-stopped
environment:
RABBITMQ_USER: ${RABBITMQ_USER}
RABBITMQ_PASS: ${RABBITMQ_PASS}
RABBITMQ_VHOST: ${RABBITMQ_VHOST}
TAIGA_SECRET_KEY: ${SECRET_KEY}
depends_on:
taiga-events-rabbitmq:
condition: service_started

taiga-events-rabbitmq:
image: rabbitmq:3.8-management-alpine
restart: unless-stopped
hostname: taiga-events-rabbitmq
environment:
RABBITMQ_ERLANG_COOKIE: ${RABBITMQ_ERLANG_COOKIE}
RABBITMQ_DEFAULT_USER: ${RABBITMQ_USER}
RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASS}
RABBITMQ_DEFAULT_VHOST: ${RABBITMQ_VHOST}
volumes:
- taiga-events-rabbitmq-data:/var/lib/rabbitmq

taiga-protected:
image: taigaio/taiga-protected:latest
restart: unless-stopped
environment:
MAX_AGE: ${ATTACHMENTS_MAX_AGE}
SECRET_KEY: ${SECRET_KEY}

taiga-gateway:
image: nginx:1.19-alpine
restart: unless-stopped
expose:
- 80
volumes:
- ../files/volumes/nginx/taiga.conf:/etc/nginx/conf.d/default.conf:ro
- taiga-static-data:/taiga/static:ro
- taiga-media-data:/taiga/media:ro
depends_on:
- taiga-front
- taiga-back
- taiga-events

volumes:
taiga-static-data:
taiga-media-data:
taiga-db-data:
taiga-async-rabbitmq-data:
taiga-events-rabbitmq-data:
Binary file added blueprints/taiga/logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
114 changes: 114 additions & 0 deletions blueprints/taiga/template.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
[variables]
main_domain = "${domain}"
postgres_user = "taiga"
postgres_password = "${password:32}"
secret_key = "${password:64}"
rabbitmq_user = "taiga"
rabbitmq_password = "${password:32}"
rabbitmq_erlang_cookie = "${password:32}"

[config]
env = [
"TAIGA_SCHEME=https",
"TAIGA_DOMAIN=${main_domain}",
"WEBSOCKETS_SCHEME=wss",
"SUBPATH=",
"SECRET_KEY=${secret_key}",
"POSTGRES_USER=${postgres_user}",
"POSTGRES_PASSWORD=${postgres_password}",
"EMAIL_BACKEND=console",
"EMAIL_HOST=smtp.example.com",
"EMAIL_PORT=587",
"EMAIL_HOST_USER=user",
"EMAIL_HOST_PASSWORD=password",
"EMAIL_DEFAULT_FROM=changeme@example.com",
"EMAIL_USE_TLS=False",
"EMAIL_USE_SSL=False",
"RABBITMQ_USER=${rabbitmq_user}",
"RABBITMQ_PASS=${rabbitmq_password}",
"RABBITMQ_VHOST=taiga",
"RABBITMQ_ERLANG_COOKIE=${rabbitmq_erlang_cookie}",
"ATTACHMENTS_MAX_AGE=360",
"ENABLE_TELEMETRY=False",
"PUBLIC_REGISTER_ENABLED=False",
"PUBLIC_REGISTER_ENABLED_FRONT=false",
]

[[config.domains]]
serviceName = "taiga-gateway"
port = 80
host = "${main_domain}"
path = "/"

[[config.mounts]]
filePath = "/volumes/nginx/taiga.conf"
content = """
server {
listen 80 default_server;

client_max_body_size 100M;
charset utf-8;

location / {
proxy_pass http://taiga-front/;
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
}

location /api/ {
proxy_pass http://taiga-back:8000/api/;
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
}

location /admin/ {
proxy_pass http://taiga-back:8000/admin/;
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
}

location /static/ {
alias /taiga/static/;
}

location /_protected/ {
internal;
alias /taiga/media/;
add_header Content-disposition "attachment";
}

location /media/exports/ {
alias /taiga/media/exports/;
add_header Content-disposition "attachment";
}

location /media/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://taiga-protected:8003/;
proxy_redirect off;
}

location /events {
proxy_pass http://taiga-events:8888/events;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_connect_timeout 7d;
proxy_send_timeout 7d;
proxy_read_timeout 7d;
}
}
"""
18 changes: 18 additions & 0 deletions meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -6061,6 +6061,24 @@
"backup"
]
},
{
"id": "taiga",
"name": "Taiga",
"version": "latest",
"description": "Taiga is a free and open-source project management platform for agile developers, designers and project managers.",
"logo": "logo.png",
"links": {
"github": "https://github.com/taigaio/taiga-docker",
"website": "https://taiga.io/",
"docs": "https://docs.taiga.io/"
},
"tags": [
"project-management",
"agile",
"scrum",
"kanban"
]
},
{
"id": "tailscale-exitnode",
"name": "Tailscale Exit nodes",
Expand Down
Loading