For a while, I have been looking for a task/ticket management solution that I could self-host on my own. Using Docker you can run a huge number of apps and services on your hardware, and for the past 5 years now that is all I have been doing.

No matter if it's a password manager, chat platform, blog (like this one), or comment section, if you can configure it in Docker, you will be good to go.

Now, while having a self-hosted ticket platform does raise some questions, the main thing is that I found it :D. Sure there is a lot of them out there, and I mean a lot. But most of them are lacking some elements and none is 100% perfect (paid or open-source). The same goes with trudesk..

So why trudesk.? Well, it's light, it doesn't require a lot of containers to run and maintain, and it supports multi-user setup, and notifications (via email, but it is a start). Also, it is mobile-friendly, which puts it at the top of the list even over some well-established platforms like OSTicket.

Did I also mention that it supports themes and customizations? Well, it does.

Multiple themes to choose from and you can customize them further

Setting it up over Docker is a snap using the docker-compose file from the GitHub repository, but I will explain some details as well as some problems that you might run into.

Personally, I use Portainer as my Docker management platform of choice. You can use it as well if you want, or use a pure command-line-based docker-compose. Either way, you will end up with a total of three (3) containers in the end.

docker-compose for trudesk.

This is a slightly more customized compose file than the original one, but nothing to write home about.

version: '2.1'
services:
  trudesk:
    image: polonel/trudesk:latest
    restart: always
    ports:
      - "8118:8118"
    dns:
      - "8.8.8.8"
      - "1.1.1.1"
    environment:
      NODE_ENV: production
      TRUDESK_DOCKER: "true"
      TD_MONGODB_SERVER: mongo
      TD_MONGODB_DATABASE: trudesk
      ELATICSEARCH_URI: "http://elasticsearch:9200"
    volumes:
      - /volume1/docker/trudesk/uploads:/usr/src/trudesk/public/uploads
      - /volume1/docker/trudesk/backups:/usr/src/trudesk/backups
  mongo:
    image: mongo:latest
    restart: always
    ports:
      - "27017:27017"
    volumes:
      - /volume1/docker/trudesk/mongo/var:/var/lib/mongo
      - /volume1/docker/trudesk/mongo/config:/data/configdb
      - /volume1/docker/trudesk/mongo/db:/data/db

  elasticsearch:
    image: elasticsearch:8.0.0
    restart: always
    environment:
      - xpack.security.enabled=false
      - xpack.security.http.ssl.enabled=false
      - node.name=estrudesk01
      - cluster.initial_master_nodes=estrudesk01
      - discovery.seed_hosts=estrudesk01
      - bootstrap.memory_lock=true
    mem_limit: 1073741824
    ulimits:
      memlock:
        soft: -1
        hard: -1
    ports:
      - "9200:9200"
      - "9300:9300"
    volumes:
      - /volume1/docker/trudesk/elasticsearch:/usr/share/elasticsearch/data

The main changes here are volume mappings for the database element (MongoDB) and some Elasticsearch parameters.

‼️
NOTE: At the time of this article, ElasticSearch support was still in beta, and not working really well. In some cases, there is a problem with even configuring it correctly. Also, it is completely optional, so it is not crucial to have it running in order to use truedesk.

If you want, you can completely remove the elasticseach section from the compose file and still make it run just fine.

CPU utilization with elasticsearch running

Also, if you consider running Elasticsearch, be sure to have enough CPU power to handle the task. The image above is from an RS3614XS model with an i3 CPU. As you can see, it is very hungry, so bear that in mind.

One thing to note here regarding email notification configuration. If you want to have that up and running you might have to change the dns variable to match your gateway (router) IP address in order to be able to send notifications.

‼️
NOTE: If you want to send successful notifications on new tickets being created as well as changes on them, then you might have to change the DNS settings!

This means that you can use these compose parameters instead of the one listed above:

    dns:
      - "192.168.1.0" #enter your router/gateway IP address
      - "1.1.1.1"

Using the Portainer stacks feature, you can run the compose file, let Portainer download all the images, and create all the containers. Once completed, the result will be similar to this one.

trudesk. stack up and running. The app, DB and Elasticsearch

Accessing the app itself, open up your browser and point it to the following address: http://your_NAS_IP:8118 . This will open up the default landing page for truedesk. and allow you to configure the initial administrator account.

Once logged in, you will be ready to create new users, and groups, configure notifications, and customize your setup as you see fit.

trudesk. as a solution offers full support for being run over reverse proxy in case you want to expose it to the web over an HTTPS secure protocol covered by a valid SSL. If you need any help with that, be sure to check my reverse proxy guides using either the built-in Synology one or my personal preference, a Docker-hosted NGINX one.

trudesk. functions and settings

Just wanted to show some of the options that are possible with this solution and to get a better overview of the UI itself.

Creating a ticket and getting the overview is probably the main thing that you will expect to work with as many options as possible.

trudesk. ticket overview

Opening and starting a new ticket will present the form that has all that you might expect initially. The description editor supports markdown so you can use it that way and if you have no idea what that is, just use the predefined function buttons to format your text.

truedesk. ticket form
List of active tickets

The ticket detail form has much more information to display, and of course, both parties can use it to add attachments, change the status, comment, set a due date, tag, and much more.

Detailed ticket form. Options are all over, including the comment section, due date, tags, and more

While out of the box trudesk. offers a lot, and it is pretty much a turn-key solution, you can use the settings section to customize it further.

Ticket settings and options

As you can see from the image above there is plenty of settings that you can configure like new ticket types, priorities, tags, and even open the platform for public access for users that are unregistered.

Public unregistered user ticket submission wizard

I could go on, but don't want to turn this article into a list of screenshots. Best to spin up this solution on your own and try it out. I am also evaluating it for now, and I like it for what it offers and what I need out of a platform like this.

The developer, Chris Brame is very active with this project, as well as with any open issues on GitHub and the overall development. Just like the Bookstack app that I use as my wiki/KB platform of choice, I do hope that taskdesk. will also become a better and more trusted ticketing solution that I can advocate for.

If you have any questions, comments, or suggestions, let me know in the comment section below.