Most minimal GitLab installation possible

What is the most minimal GitLab installation possible?

I only need GitLab Rails and the GitLab CI/CD pipeline with 1 GitLab Runner, nothing else. I don’t need redundancy, HA, fault-tolerance, scale, nothing. I want just the bare minimum to get it running.

I tried to infer this info from the docs but in the components page it lists a lot of components as being ‘core,’ stating that core components are all required for basic GitLab functionality. However, in the installation from source, it doesn’t look like all the ‘core’ components are needed, so I’m not sure.

This will not be for production, it will be a hobby system for private use, completely internal and not Internet-facing.

Ideally I’ll build everything from source.


Why build from source?

If you want a simple, basic setup, I’d suggest you use Docker installation on one machine, and use simple Linux GitLab Runner on the second machine. This is super simple to maintain / upgrade, as all the components are inside one docker image and you don’t need to bother with configuring everything separately.


Is the Docker image the most minimal architecture possible? My understanding was that it had a lot of services builtin since it’s based off of the Omnibus package. I just want the most minimal installation with the fewest services possible, but I can’t find some info in the docs, e.g. if Gitaly is really required or I can do without it (this is not about Gitaly specifically, it’s just an example; I wanna know which is the exact essential, can’t-do-without components).

If you want to disable services, you configure /etc/gitlab/gitlab.rb appropriately to disable the ones you don’t want. Gitaly is required, otherwise you have no repositories to push/pull from. And since CI/CD pipelines run from repositories, you need it.

This is how mine looks service wise when I cut out the stuff I don’t need:

[root@gitlab ~]# gitlab-ctl status
run: gitaly: (pid 2141) 257870s; run: log: (pid 2139) 257870s
run: gitlab-workhorse: (pid 2140) 257870s; run: log: (pid 2138) 257870s
run: logrotate: (pid 39060) 2268s; run: log: (pid 2125) 257870s
run: nginx: (pid 2134) 257870s; run: log: (pid 2123) 257870s
run: postgresql: (pid 2135) 257870s; run: log: (pid 2130) 257870s
run: puma: (pid 2137) 257870s; run: log: (pid 2136) 257870s
run: redis: (pid 2124) 257870s; run: log: (pid 2120) 257870s
run: sidekiq: (pid 2129) 257870s; run: log: (pid 2127) 257870s

that is pretty much what is needed on a single server as a minimum. Building from source doesn’t change that.