diff --git a/productivity/taiga/.env.example b/productivity/taiga/.env.example new file mode 100644 index 0000000..ba43f91 --- /dev/null +++ b/productivity/taiga/.env.example @@ -0,0 +1,21 @@ +DOMAIN=www.example.com +TAIGA_SECRET_KEY=change-this-to-a-secure-random-string +TAIGA_ADMIN_USERNAME=admin +TAIGA_ADMIN_EMAIL=admin@example.com +TAIGA_ADMIN_PASSWORD=admin + +# Postgres +POSTGRES_HOST=postgres +POSTGRES_PORT=5432 +POSTGRES_USER=taiga_user +POSTGRES_PASSWORD=securepassword +POSTGRES_DB=taiga + +# RabbitMQ +RABBITMQ_HOST=rabbitmq +RABBITMQ_USER=taiga_user +RABBITMQ_PASSWORD=securepassword + +CELERY_ENABLED=False +CELERY_BROKER=amqp://${RABBITMQ_USER}:${RABBITMQ_PASSWORD}@${RABBITMQ_HOST}:5672/ +CELERY_ALWAYS_EAGER=False diff --git a/productivity/taiga/.gitignore b/productivity/taiga/.gitignore new file mode 100644 index 0000000..4c49bd7 --- /dev/null +++ b/productivity/taiga/.gitignore @@ -0,0 +1 @@ +.env diff --git a/productivity/taiga/README.md b/productivity/taiga/README.md new file mode 100644 index 0000000..ae4a9d7 --- /dev/null +++ b/productivity/taiga/README.md @@ -0,0 +1,12 @@ +# Taiga +Open source Agile project management tool. + +## Setup +1. Fill out `.env` from the example. You are supposed to be able to set admin credentials here but I had issues with that. Use a util like `openssl` for key generation. +2. Setup credentials using python util: +``` +docker exec -it taiga-back python3 manage.py createsuperuser --username admin --email admin@example.com +``` +``` +``` +Note: I had issues doing this call while RabbitMQ was enabled via this Celery util. I set `CELERY_ENABLED=false` to get the call to work. This is supposed to have us use some slower utility as an alternative. AI assured me I could re-enable after the fact but I did not just to be safe. diff --git a/productivity/taiga/docker-compose.yml b/productivity/taiga/docker-compose.yml new file mode 100644 index 0000000..69650ab --- /dev/null +++ b/productivity/taiga/docker-compose.yml @@ -0,0 +1,80 @@ +networks: + traefik: + external: true + taiga: + driver: bridge + +services: + taiga-front: + image: taigaio/taiga-front:latest + container_name: taiga-front + restart: always + environment: + - TAIGA_API_URL=https://${DOMAIN}/api/v1 + - TAIGA_EVENTS_URL=wss://${DOMAIN}/events + networks: + - taiga + - traefik + depends_on: + - taiga-back + labels: + - traefik.http.routers.taiga.rule=Host(`${DOMAIN}`) + - traefik.http.routers.taiga.tls=true + - traefik.http.routers.taiga.tls.certresolver=lets-encrypt + - traefik.http.services.taiga.loadbalancer.server.port=80 + + taiga-back: + image: taigaio/taiga-back:latest + container_name: taiga-back + restart: always + env_file: + - .env + volumes: + - /pwspool/software/taiga/back/data:/taiga-back/data + - /pwspool/software/taiga/back/media:/taiga-back/media + networks: + - taiga + - traefik + depends_on: + - postgres + - rabbitmq + - taiga-events + labels: + - traefik.http.routers.taiga-back.rule=Host(`${DOMAIN}`) && PathPrefix(`/api`) + - traefik.http.routers.taiga-back.tls=true + - traefik.http.routers.taiga-back.tls.certresolver=lets-encrypt + - traefik.http.services.taiga-back.loadbalancer.server.port=8000 + + taiga-events: + image: taigaio/taiga-events:latest + container_name: taiga-events + restart: always + environment: + - TAIGA_SECRET=${TAIGA_SECRET_KEY} + - TAIGA_BACK_HOST=http://taiga-back:8000 + networks: + - taiga + + postgres: + image: postgres:13 + container_name: taiga-db + restart: always + networks: + - taiga + environment: + POSTGRES_DB: ${POSTGRES_DB} + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + volumes: + - /pwspool/software/taiga/db:/var/lib/postgresql/data + + rabbitmq: + image: rabbitmq:3-management + container_name: taiga-rabbitmq + restart: always + networks: + - taiga + environment: + - RABBITMQ_DEFAULT_USER=${RABBITMQ_USER} + - RABBITMQ_DEFAULT_PASS=${RABBITMQ_PASSWORD} +