Opening the main page goes to "discover"

Good morning,

I deployed the Taiga in docker, i’m receiving the error.

image

Inspect get the following websocket errors.

Inspect console

Basically, the design I have is Ubuntu 22.04 VM. With Nginx and Docker at the same level.

I have a container for PostGresSQL and Taiga separated.

network design

Below is the configuration of the “docker-compose.yml” .

version: "3.5"

x-environment:
  &default-back-environment
  # These environment variables will be used by taiga-back and taiga-async.
  # Database settings
  POSTGRES_DB: "taiga"
  POSTGRES_USER: "${POSTGRES_USER}"
  POSTGRES_PASSWORD: "${POSTGRES_PASSWORD}"
  POSTGRES_HOST: "postgres_db"
  POSTGRES_PORT: "5432"
  # Taiga settings
  TAIGA_SECRET_KEY: "${SECRET_KEY}"
  TAIGA_SITES_SCHEME: "${TAIGA_SCHEME}"
  TAIGA_SITES_DOMAIN: "${TAIGA_DOMAIN}"
  TAIGA_SUBPATH: "${SUBPATH}"
  # Email settings.
  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 settings
  RABBITMQ_USER: "${RABBITMQ_USER}"
  RABBITMQ_PASS: "${RABBITMQ_PASS}"
  # Telemetry settings
  ENABLE_TELEMETRY: "${ENABLE_TELEMETRY}"
  # ...your customizations go here

x-volumes:
  &default-back-volumes
  # These volumens will be used by taiga-back and taiga-async.
  - taiga-static-data:/taiga-back/static
  - taiga-media-data:/taiga-back/media
  # - ./config.py:/taiga-back/settings/config.py


services:
  taiga-back:
    image: taigaio/taiga-back:latest
    environment: *default-back-environment
    volumes: *default-back-volumes
    networks:
      - taiga
      - postgres-db
    depends_on:
      taiga-events-rabbitmq:
        condition: service_started
      taiga-async-rabbitmq:
        condition: service_started

  taiga-async:
    image: taigaio/taiga-back:latest
    entrypoint: ["/taiga-back/docker/async_entrypoint.sh"]
    environment: *default-back-environment
    volumes: *default-back-volumes
    networks:
      - taiga
      - postgres-db

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

  taiga-front:
    image: taigaio/taiga-front:latest
    environment:
      TAIGA_URL: "${TAIGA_SCHEME}://${TAIGA_DOMAIN}"
      TAIGA_WEBSOCKETS_URL: "${WEBSOCKETS_SCHEME}://${TAIGA_DOMAIN}"
      TAIGA_SUBPATH: "${SUBPATH}"
      # ...your customizations go here
    networks:
      - taiga
    # volumes:
    #   - ./conf.json:/usr/share/nginx/html/conf.json
    ports: 
      - "9000:80"


  taiga-events:
    image: taigaio/taiga-events:latest
    environment:
      RABBITMQ_USER: "${RABBITMQ_USER}"
      RABBITMQ_PASS: "${RABBITMQ_PASS}"
      TAIGA_SECRET_KEY: "${SECRET_KEY}"
    networks:
      - taiga
    depends_on:
      taiga-events-rabbitmq:
        condition: service_started

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

  taiga-protected:
    image: taigaio/taiga-protected:latest
    environment:
      MAX_AGE: "${ATTACHMENTS_MAX_AGE}"
      SECRET_KEY: "${SECRET_KEY}"
    networks:
      - taiga

volumes:
  taiga-static-data:
  taiga-media-data:
  taiga-async-rabbitmq-data:
  taiga-events-rabbitmq-data:

networks:
  taiga:
  postgres-db:
    external:
      name: postgres-db

Nginx reverse proxy.

#taiga

server {
    server_name taiga.example.com;
      location / {
    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_redirect off;
    proxy_pass http://localhost:9000/;
  }
      # Events
  location /events {
      proxy_pass http://localhost:9000/events;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      proxy_set_header Host $host;
      proxy_connect_timeout 7d;
      proxy_send_timeout 7d;
      proxy_read_timeout 7d;
  }
    
    listen 443 ssl;
    ssl_certificate /etc/letsencrypt/live/taiga.example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/taiga.example.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot

    client_max_body_size 0;
    large_client_header_buffers 4 32k;
    charset utf-8;

    # log files
    access_log /var/log/nginx/taiga.access.log;
    error_log /var/log/nginx/taiga.error.log;
}

.env file

# Taiga's URLs - Variables to define where Taiga should be served
TAIGA_SCHEME=https  # serve Taiga using "http" or "https" (secured) connection
TAIGA_DOMAIN=taiga.example.com:9000  # Taiga's base URL
SUBPATH="" # it'll be appended to the TAIGA_DOMAIN (use either "" or a "/subpath")
WEBSOCKETS_SCHEME=wss  # events connection protocol (use either "ws" or "wss")

# Taiga's Secret Key - Variable to provide cryptographic signing
SECRET_KEY="xxxxxxx"  # Please, change it to an unpredictable value!!

# Taiga's Database settings - Variables to create the Taiga database and connect to it
POSTGRES_USER=taiga  # user to connect to PostgreSQL
POSTGRES_PASSWORD=xxxxxxxx  # database user's password

# Taiga's SMTP settings - Variables to send Taiga's emails to the users
EMAIL_BACKEND=console  # use an SMTP server or display the emails in the console (either "smtp" or "console")
EMAIL_HOST=mail.example.com # SMTP server address
EMAIL_PORT=465   # default SMTP port
EMAIL_HOST_USER=taiga@example.com  # user to connect the SMTP server
EMAIL_HOST_PASSWORD=xxxxxxx  # SMTP user's password
EMAIL_DEFAULT_FROM=taiga@example.com  # default email address for the automated emails
# EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive (only set one of those to True)
EMAIL_USE_TLS=True  # use TLS (secure) connection with the SMTP server
EMAIL_USE_SSL=False  # use implicit TLS (secure) connection with the SMTP server

# Taiga's RabbitMQ settings - Variables to leave messages for the realtime and asynchronous events
RABBITMQ_USER=taiga  # user to connect to RabbitMQ
RABBITMQ_PASS=xxxx  # RabbitMQ user's password
RABBITMQ_VHOST=xxxx  # RabbitMQ container name
RABBITMQ_ERLANG_COOKIE=secret-erlang-cookie  # unique value shared by any connected instance of RabbitMQ

# Taiga's Attachments - Variable to define how long the attachments will be accesible
ATTACHMENTS_MAX_AGE=360  # token expiration date (in seconds)

# Taiga's Telemetry - Variable to enable or disable the anonymous telemetry
ENABLE_TELEMETRY=True

If anyone can point me in the right direction.
Thanks in advance.

Regards.

hi @Zumo welcome to our community.

It would be useful to have the docker logs so we can see if there is a problem with the configuration or with the networking.

Cheers!

Good morning @yami,

Thank you so much for taking a look into this.

I have restarted the docker in order to get the initial entries.

https://pastebin.com/Hm9SLibV

I’m using PasteBin due to the initial logs exceed the number of characters authorised.

Do you need the

docker logs --details
of which containers?

  • taiga-docker_taiga-async-rabbitmq_1
  • taiga-docker_taiga-async_1
  • taiga-docker_taiga-back_1
  • taiga-docker_taiga-events-rabbitmq_1
  • taiga-docker_taiga-events_1
  • taiga-docker_taiga-front_1
  • taiga-docker_taiga-protected_1

Hey @Zumo

in the logs you may see some errors, you probably should check:

taiga-async_1 | [2024-01-15 10:31:31,110: ERROR/MainProcess] consumer: Cannot connect to amqp://taiga:**@taiga-async-rabbitmq:5672/taiga: [Errno 111] Connection refused

However, the console log had problems connecting even the API, so I’d start with taiga-back and taiga-db.

Cheers!

docker logs --details

taiga-docker_taiga-back_1 -> https://pastebin.com/1wA0hVVS
taiga-docker_taiga-front_1 -> https://pastebin.com/7q61xtjG
taiga-docker_taiga-events_1 -> https://pastebin.com/KFCDAuy0
taiga-docker_taiga-protected_1 -> https://pastebin.com/mKnst5J9
taiga-docker_taiga-async_1 -> https://pastebin.com/fFSMC4Cv
taiga-docker_taiga-async-rabbitmq_1 -> https://pastebin.com/qHa16YGm
taiga-docker_taiga-events-rabbitmq_1 -> https://pastebin.com/TFa6yx5e

I have no taiga-db. The DB is in another container, so probably I’m missing something like a connection in the compose file of taiga.

This what I’m using to connect to the DB

  POSTGRES_DB: "taiga"
  POSTGRES_USER: "${POSTGRES_USER}"
  POSTGRES_PASSWORD: "${POSTGRES_PASSWORD}"
  POSTGRES_HOST: "postgres_db"
  POSTGRES_PORT: "5432"
networks:
  taiga:
  postgres-db:
      name: postgres-db
      external: true

I do believe that the connection with the DB is working, should I use the postgres URI instead of the this configuration?

DATABASE_URL: postgres://host:5432

I’d suggest to try first as the documentation and then moving pieces. This way, we can know if Taiga is working as intended (or not).

Cheers!

It seems that I got the DB issue solved although now I’m receiving a new error in the taiga-docker_taiga-back_1 log:

Give permission to taiga:taiga

Going through the documentation I see no information to a user that needs to be created.

Also I forgot to post this, I can confirm that Taiga docker is connected to the DB.

docker network inspect postgres-db
[
    {
        "Name": "postgres-db",
        "Id": "bbb498649142f7aeffba47e8cf861961ed9b76ddaff4876e20e55e2d9f16335a",
        "Created": "2023-10-16T11:19:50.287458434Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
 "264c6374a7c3131b65c5f677022fd9d3c1697e8357da25a7a0338953f2f0675e": {
                "Name": "taiga-docker_taiga-async_1",
                "EndpointID": "dd6a08cf091ab1afd4af4577934209d7de7a048d005ae6c8ca0d0e1e6dd82687",
                "MacAddress": "02:42:ac:12:00:05",
                "IPv4Address": "172.18.0.5/16",
                "IPv6Address": ""
            },
            "2aba81bd223e197d41a3d7c08aea1cd29078b1b40f0d95c7c66bb3f143c4e428": {
                "Name": "taiga-docker_taiga-back_1",
                "EndpointID": "8c06bb3f549033aede2666247370487f1dbc4919ce90ef6927e47c590429cc74",
                "MacAddress": "02:42:ac:12:00:07",
                "IPv4Address": "172.18.0.7/16",
                "IPv6Address": ""
            },
            "5da6ac35d257d51fbf452833b5d2a3b29223eccae9a7fc4855df18882c7154a4": {
                "Name": "PostgresCont",
                "EndpointID": "4e8a217a001a4ba4d8cd62df52be9d793d8ec5a0bfac229557503db64ba12efe",
                "MacAddress": "02:42:ac:12:00:03",
                "IPv4Address": "172.18.0.3/16",
                "IPv6Address": ""
            },
        },
        "Options": {},
        "Labels": {}
    }
]

Also database is being populated:

taiga=# \dt
                                List of relations
 Schema |                          Name                           | Type  | Owner
--------+---------------------------------------------------------+-------+-------
 public | attachments_attachment                                  | table | taiga
 public | auth_group                                              | table | taiga
 public | auth_group_permissions                                  | table | taiga
 public | auth_permission                                         | table | taiga
 public | contact_contactentry                                    | table | taiga
 public | custom_attributes_epiccustomattribute                   | table | taiga
 public | custom_attributes_epiccustomattributesvalues            | table | taiga
 public | custom_attributes_issuecustomattribute                  | table | taiga
 public | custom_attributes_issuecustomattributesvalues           | table | taiga
 public | custom_attributes_taskcustomattribute                   | table | taiga
 public | custom_attributes_taskcustomattributesvalues            | table | taiga
 public | custom_attributes_userstorycustomattribute              | table | taiga
 public | custom_attributes_userstorycustomattributesvalues       | table | taiga
 public | django_admin_log                                        | table | taiga
 public | django_content_type                                     | table | taiga
 public | django_migrations                                       | table | taiga
 public | django_session                                          | table | taiga
 public | djmail_message                                          | table | taiga
 public | easy_thumbnails_source                                  | table | taiga
 public | easy_thumbnails_thumbnail                               | table | taiga
 public | easy_thumbnails_thumbnaildimensions                     | table | taiga
 public | epics_epic                                              | table | taiga
 public | epics_relateduserstory                                  | table | taiga
 public | external_apps_application                               | table | taiga
 public | external_apps_applicationtoken                          | table | taiga
 public | feedback_feedbackentry                                  | table | taiga
 public | history_historyentry                                    | table | taiga
 public | issues_issue                                            | table | taiga
 public | likes_like                                              | table | taiga
 public | milestones_milestone                                    | table | taiga
 public | notifications_historychangenotification                 | table | taiga
 public | notifications_historychangenotification_history_entries | table | taiga
 public | notifications_historychangenotification_notify_users    | table | taiga
 public | notifications_notifypolicy                              | table | taiga
 public | notifications_watched                                   | table | taiga
 public | notifications_webnotification                           | table | taiga
 public | projects_epicstatus                                     | table | taiga
 public | projects_issueduedate                                   | table | taiga
 public | projects_issuestatus                                    | table | taiga
 public | projects_issuetype                                      | table | taiga
 public | projects_membership                                     | table | taiga
 public | projects_points                                         | table | taiga
 public | projects_priority                                       | table | taiga
 public | projects_project                                        | table | taiga
 public | projects_projectmodulesconfig                           | table | taiga
 public | projects_projecttemplate                                | table | taiga
 public | projects_severity                                       | table | taiga
 public | projects_swimlane                                       | table | taiga
 public | projects_swimlaneuserstorystatus                        | table | taiga
 public | projects_taskduedate                                    | table | taiga
 public | projects_taskstatus                                     | table | taiga
 public | projects_userstoryduedate                               | table | taiga
 public | projects_userstorystatus                                | table | taiga
 public | references_reference                                    | table | taiga
 public | settings_userprojectsettings                            | table | taiga
 public | tasks_task                                              | table | taiga
 public | telemetry_instancetelemetry                             | table | taiga
 public | timeline_timeline                                       | table | taiga
 public | token_denylist_denylistedtoken                          | table | taiga
 public | token_denylist_outstandingtoken                         | table | taiga
 public | users_authdata                                          | table | taiga
 public | users_role                                              | table | taiga
 public | users_user                                              | table | taiga
 public | userstorage_storageentry                                | table | taiga
 public | userstories_rolepoints                                  | table | taiga
 public | userstories_userstory                                   | table | taiga
 public | userstories_userstory_assigned_users                    | table | taiga
 public | votes_vote                                              | table | taiga
 public | votes_votes                                             | table | taiga
 public | webhooks_webhook                                        | table | taiga
 public | webhooks_webhooklog                                     | table | taiga
 public | wiki_wikilink                                           | table | taiga
 public | wiki_wikipage                                           | table | taiga
(73 rows)

I don’t believe that is an issue with the database…

Hi @Zumo

with this log, I’d check filesystem permissions and which user is running the containers.

Cheers!

Good morning @yami,

I’m running the docker with a rootless user created for that effect, is running the rest of containers just fine. All the files have the same permissions.

Again for me is standard procedure applications should not run in root, so for that I followed a hardening guide that mentions to create either a docker user and group or just the group and that’s what I did.

My question now stands if the taiga docker needs to have a taiga user and group created to the system in order to run?

I know for a fact that some dockers create their own users once the docker is running.

One of containers created a user to run a memcache.

user@hostname:/$ docker inspect $(docker ps -q) --format '{{.Config.User}} {{.Name}}
memcache /compose_cache_1

forgot to add this part of the user permissions.

user@hostname:/$ id user
uid=1000(user) gid=1000(user) groups=1000(user),4(adm),24(cdrom),30(dip),46(plugdev),110(lxd),999(docker)

Hi @Zumo

Taiga is intended to run as a non-root user, but it doesn’t need to exist a user taiga in the host.

Cheers!