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.
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.
If you want, you can completely remove the elasticseach section from the compose file and still make it run just fine.
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.
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.
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.
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.
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.
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.
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.
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.