Best practice deploying multiple projects to the same server with runner and docker

We’re using Gitlab and Gitlab runner for a couple of years now and we’re loving it. Normally we have a server per project. Each project can have multiple services which can come from different Gitlab projects. Those projects share a runner, each service uses a different port, each is accessible from the outer world by using that port without any proxy or other tooling.

For some small internal projects, we use Dokku (basically a self hosted Heroku), but I’m falling out of love with it due to some weird issues I can’t seem to solve. The great thing about is that I can just git push to the Dokku server and the project gets deployed to its own subdomain. I now want this kind of functionality with just gitlab-runner.

Basically I want to add a new project to gitlab, create a gitlab-ci file that deploys the project to the server as a docker container, but also makes it so it’s available from its own subdomain using port 80 or 443. Preferably without needing to explicitly add another subdomain to a proxy manually.

I suppose I could do this by having another ci chain run to update a separate proxy service? But is there a way to have it all self-contained from within the project? I also know that I could setup Kubernetes for this, but this seems vastly overkill for the small services that I want to run.

I struggle to find a relevant article or guide on how to do this. I’m sure it’s out there, but I can’t find it. Any links, pointers would work for me.