Installing taiga in portainer & Nginx Proxy Manager

Hello,

I’m trying to install it from portainer, with the following yml format, its works but all the services have no published ports, and I don’t know how they communicate with each other (I change the name of services using underscore instead of dash, for example from taiga-back to taiga_back).

version: "3.9"

volumes:
  taiga_db_volume:
  taiga_back_static_volume:
  taiga_back_media_volume:
  taiga_async_rabbitmq_volume:
  taiga_events_rabbitmq_volume:

networks:
  taiga_network:

services:
  taiga_db:
    image: postgres:12.3
    volumes:
      - taiga_db_volume:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: taiga
      POSTGRES_USER: xxxxxxxxxxxxxx
      POSTGRES_PASSWORD: xxxxxxxxxxxxxx
    networks:
      - taiga_network

  taiga_async_rabbitmq:
    image: rabbitmq:3.8-management-alpine
    volumes:
      - taiga_async_rabbitmq_volume:/var/lib/rabbitmq
    environment:
      RABBITMQ_ERLANG_COOKIE: secret-erlang-cookie
      RABBITMQ_DEFAULT_USER: xxxxxxxxxxxxxx
      RABBITMQ_DEFAULT_PASS: xxxxxxxxxxxxxx
      RABBITMQ_DEFAULT_VHOST: xxxxxxxxxxxxxx
    networks:
      - taiga_network
      
  taiga_events_rabbitmq:
    image: rabbitmq:3.8-management-alpine
    volumes:
      - taiga_events_rabbitmq_volume:/var/lib/rabbitmq
    environment:
      RABBITMQ_ERLANG_COOKIE: secret-erlang-cookie
      RABBITMQ_DEFAULT_USER: xxxxxxxxxxxxxx
      RABBITMQ_DEFAULT_PASS: xxxxxxxxxxxxxx
      RABBITMQ_DEFAULT_VHOST: xxxxxxxxxxxxxx
    networks:
      - taiga_network

  taiga_back:
    image: taigaio/taiga-back:latest
    environment:
      - TAIGA_SCHEME=https
      - TAIGA_DOMAIN=xxxxxxxxxxxxxx
      - SUBPATH=""
      - WEBSOCKETS_SCHEME=ws
      - TAIGA_SECRET_KEY=xxxxxxxxxxxxxx
      - POSTGRES_USER=xxxxxxxxxxxxxx      
      - POSTGRES_PASSWORD=xxxxxxxxxxxxxx
      - POSTGRES_HOST=taiga_db      
      - EMAIL_BACKEND=smtp
      - EMAIL_HOST=xxxxxxxxxxxxxx
      - EMAIL_PORT=587
      - EMAIL_HOST_USER=xxxxxxxxxxxxxx
      - EMAIL_HOST_PASSWORD=xxxxxxxxxxxxxx
      - EMAIL_DEFAULT_FROM=xxxxxxxxxxxxxx
      - EMAIL_USE_TLS=True
      - EMAIL_USE_SSL=False
      - RABBITMQ_USER=xxxxxxxxxxxxxx
      - RABBITMQ_PASS=xxxxxxxxxxxxxx
      - RABBITMQ_VHOST=taiga
      - RABBITMQ_ERLANG_COOKIE=secret-erlang-cookie
      - ATTACHMENTS_MAX_AGE=360
      - ENABLE_TELEMETRY=False
      - PUBLIC_REGISTER_ENABLED=false
      - SESSION_COOKIE_SECURE=true
      - CSRF_COOKIE_SECURE=true
    volumes:
      - taiga_back_static_volume:/taiga-back/static
      - taiga_back_media_volume:/taiga-back/media
    networks:
      - taiga_network

  taiga_async:
    image: taigaio/taiga-back:latest
    entrypoint:
      - /taiga-back/docker/async_entrypoint.sh
    environment:
      - TAIGA_SCHEME=https
      - TAIGA_DOMAIN=xxxxxxxxxxxxxx
      - SUBPATH=""
      - WEBSOCKETS_SCHEME=ws
      - TAIGA_SECRET_KEY=xxxxxxxxxxxxxx
      - POSTGRES_USER=xxxxxxxxxxxxxx
      - POSTGRES_PASSWORD=xxxxxxxxxxxxxx
      - POSTGRES_HOST=taiga_db
      - EMAIL_BACKEND=smtp
      - EMAIL_HOST=xxxxxxxxxxxxxx
      - EMAIL_PORT=587
      - EMAIL_HOST_USER=xxxxxxxxxxxxxx
      - EMAIL_HOST_PASSWORD=xxxxxxxxxxxxxx
      - EMAIL_DEFAULT_FROM=xxxxxxxxxxxxxx
      - EMAIL_USE_TLS=True
      - EMAIL_USE_SSL=False
      - RABBITMQ_USER=xxxxxxxxxxxxxx
      - RABBITMQ_PASS=xxxxxxxxxxxxxx
      - RABBITMQ_VHOST=taiga
      - RABBITMQ_ERLANG_COOKIE=secret-erlang-cookie
      - ATTACHMENTS_MAX_AGE=360
      - ENABLE_TELEMETRY=False
      - PUBLIC_REGISTER_ENABLED=false
      - SESSION_COOKIE_SECURE=true
      - CSRF_COOKIE_SECURE=true     
    volumes:
      - taiga_back_static_volume:/taiga-back/static
      - taiga_back_media_volume:/taiga-back/media
    networks:
      - taiga_network

  taiga_front:
    image: taigaio/taiga-front:latest
    environment:
      TAIGA_URL: https://xxxxxxxxxxxxxx
      TAIGA_WEBSOCKETS_URL: wss://xxxxxxxxxxxxxx
      TAIGA_SUBPATH: ""
      PUBLIC_REGISTER_ENABLED: "false"
    networks:
      - taiga_network

  taiga_protected:
    image: taigaio/taiga-protected:latest
    environment:
      ATTACHMENTS_MAX_AGE: 360
      SECRET_KEY: xxxxxxxxxxxxxx
    networks:
      - taiga_network
      
  taiga_events:
    image: taigaio/taiga-events:latest
    environment:
      RABBITMQ_USER: xxxxxxxxxxxxxx
      RABBITMQ_PASS: xxxxxxxxxxxxxx
      SECRET_KEY: xxxxxxxxxxxxxx
    networks:
      - taiga_network

Can I install it with this way (portainer to run the compose & nginx proxy manager for handling the traffic) ? or I need to install nginx (taiga-gateway service), and if so what the configuration for nginx to link with these services?

Thanks

hi @wajdyessam welcome to our community!

I’m not portainer user so maybe on this topic another user may help. Regarding containers, they don’t need to expose ports to the host in order to communicate; containers use a network, and communicate thanks to a hostname (which is the service name in a docker-compose environment for instance).

Now, the gateway is an important piece for running Taiga, and it’s the recommended way; that said, you can use just one nginx in the host. You’ll need to craft the configuration yourself using the configuration for this container.

Cheers!

1 Like

Thanks for quick answer, its works after adding the nginx conf file and use the service name with -.

here the updated yml that works on portainer:

version: "3.9"

volumes:
  taiga_db_volume:
  taiga_back_static_volume:
  taiga_back_media_volume:
  taiga_async_rabbitmq_volume:
  taiga_events_rabbitmq_volume:

x-backend-variables: &backend-variables
  environment:
    - TAIGA_SITES_SCHEME=https
    - TAIGA_SITES_DOMAIN=xxxxxxxxxxxxx
    - SUBPATH=""
    - WEBSOCKETS_SCHEME=ws
    - TAIGA_SECRET_KEY=xxxxxxxxxxxxx
    - POSTGRES_USER=xxxxxxxxxxxxx      
    - POSTGRES_PASSWORD=xxxxxxxxxxxxx
    - POSTGRES_HOST=taiga-db      
    - EMAIL_BACKEND=smtp
    - EMAIL_HOST=xxxxxxxxxxxxx
    - EMAIL_PORT=587
    - EMAIL_HOST_USER=xxxxxxxxxxxxx
    - EMAIL_HOST_PASSWORD=xxxxxxxxxxxxx
    - EMAIL_DEFAULT_FROM=xxxxxxxxxxxxx
    - EMAIL_USE_TLS=True
    - EMAIL_USE_SSL=False
    - RABBITMQ_USER=xxxxxxxxxxxxx
    - RABBITMQ_PASS=xxxxxxxxxxxxx
    - RABBITMQ_VHOST=taiga
    - RABBITMQ_ERLANG_COOKIE=xxxxxxxxxxxxx
    - ATTACHMENTS_MAX_AGE=360
    - ENABLE_TELEMETRY=False
    - PUBLIC_REGISTER_ENABLED=false
    - SESSION_COOKIE_SECURE=true
    - CSRF_COOKIE_SECURE=true

x-rabbitmq-variables: &rabbitmq-variables
  environment:
    - RABBITMQ_ERLANG_COOKIE=xxxxxxxxxxxxx
    - RABBITMQ_DEFAULT_USER=xxxxxxxxxxxxx
    - RABBITMQ_DEFAULT_PASS=xxxxxxxxxxxxx
    - RABBITMQ_DEFAULT_VHOST=taiga
      
networks:
  taiga_network:

services:
  taiga-db:
    image: postgres:12.3
    volumes:
      - taiga_db_volume:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: taiga
      POSTGRES_USER: xxxxxxxxxxxxx
      POSTGRES_PASSWORD: xxxxxxxxxxxxx
    networks:
      - taiga_network
 
  taiga-back:
    image: taigaio/taiga-back:latest
    <<: *backend-variables
    volumes:
      - taiga_back_static_volume:/taiga-back/static
      - taiga_back_media_volume:/taiga-back/media
    networks:
      - taiga_network

  taiga-async:
    image: taigaio/taiga-back:latest
    entrypoint:
      - /taiga-back/docker/async_entrypoint.sh
    <<: *backend-variables     
    volumes:
      - taiga_back_static_volume:/taiga-back/static
      - taiga_back_media_volume:/taiga-back/media
    networks:
      - taiga_network

  taiga-front:
    image: taigaio/taiga-front:latest
    environment:
      TAIGA_URL: https://xxxxxxxxxxxxx
      TAIGA_WEBSOCKETS_URL: wss://xxxxxxxxxxxxx
      TAIGA_SUBPATH: ""
      PUBLIC_REGISTER_ENABLED: "false"
    networks:
      - taiga_network

  taiga-protected:
    image: taigaio/taiga-protected:latest
    environment:
      ATTACHMENTS_MAX_AGE: 360
      SECRET_KEY: xxxxxxxxxxxxx
    networks:
      - taiga_network
      
  taiga-events:
    image: taigaio/taiga-events:latest
    environment:
      RABBITMQ_USER: xxxxxxxxxxxxx
      RABBITMQ_PASS: xxxxxxxxxxxxx
      SECRET_KEY: xxxxxxxxxxxxx
    networks:
      - taiga_network
      
  taiga-async-rabbitmq:
    image: rabbitmq:3.8-management-alpine
    volumes:
      - taiga_async_rabbitmq_volume:/var/lib/rabbitmq
    <<: *rabbitmq-variables
    networks:
      - taiga_network
      
  taiga-events-rabbitmq:
    image: rabbitmq:3.8-management-alpine
    volumes:
      - taiga_events_rabbitmq_volume:/var/lib/rabbitmq
    <<: *rabbitmq-variables
    networks:
      - taiga_network

  taiga-gateway:
    image: nginx:1.19-alpine
    ports:
      - 8083:80
    volumes:
      - /root/taiga.conf:/etc/nginx/conf.d/default.conf
      - taiga_back_static_volume:/taiga-back/static
      - taiga_back_media_volume:/taiga-back/media
    networks:
      - taiga_network
      

Edit: I have an issue on loading images, but its resolved now, this is my conf for reference after changing the alais name to taiga-back

server {
    server_name xxxxxxxxxxxxxxx;
    listen 80 default_server;
    client_max_body_size 100M;
    charset utf-8;

    # Frontend
    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;
    }

    # API
    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;
    }

    # Admin
    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;
    }

    # Static
    location /static/ {
        alias /taiga-back/static/;
    }

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

    # Unprotected section
    location /media/exports/ {
        alias /taiga-back/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;
    }

    # Events
    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;
    }
}

Everything is works now

Thanks

1 Like