Redmine

I was surprised to discover recently that good old Redmine not only still exists in 2022, but it thrives in various unexpected ways. Redmine is another one of those boring tech things that I love.

When I was running akosma software, more than a decade ago, I used to run two instances of it, one for my projects and another for my trainings. It’s simple, it works, it does what it has to do, and more. It has an impressive set of features and can be extended in oh so many ways:

First Surprise

But we’re in 2023, with Kubernetes and Cloud Native apps and 12 Factor apps and whatnot. Let us begin by the obvious first surprise:

$ docker run --rm --publish 8080:3000 redmine:5.0.5-alpine

Yes, the container works as-is perfectly well, and localhost:8080 shows a fully working demo version, accessible with the username and password admin which must be changed at first login. This demo version uses a SQLite database that is not preserved when the container dies.

The container images are stored in Docker Hub with a matching repository full of Dockerfile on GitHub.

Second Surprise

And the second surprise is that this very container works in OpenShift off-the-box. Not all monolithic apps work so easily on OpenShift, a platform that is quite picky in terms of security settings, and this is a very nice surprise.

To give an example, a few days ago I tried to run the Shlink URL shortener application written in PHP on OpenShift, and to make a long story short: it’s impossible. Don’t even try. Some apps are just not made to be run on Kubernetes, or not even on containers1.

In any case, I would totally reuse Redmine again in the future, should I start a small software consultancy business again. And even more now that I see that I could run it in OpenShift.


  1. The biggest problem with Shlink, in particular, was its (ab)use of configuration files accessed in write mode when the application starts in various locations. Oh, and insisting in using its own PHP-based CLI to initialize API keys and other things. There’s a reason why the 12 Factor App website recommends using environment variables instead. ↩︎