Self-hosting GitLab
Your own GitLab, on your server: the code stays with you, no per-user subscription. Here's how I deploy it cleanly — Docker, HTTPS, backups, CI runners — and the sizing you shouldn't underestimate.
Your own GitLab, on your server: the code stays with you, no per-user subscription. Here's how I deploy it cleanly — Docker, HTTPS, backups, CI runners — and the sizing you shouldn't underestimate.
Two reasons dominate: sovereignty (source code never leaves your infra, useful for compliance) and cost at large team size (no per-seat license). The flip side: you’re the admin — backups, updates, availability.
The deployment principle (Docker, reverse proxy, HTTPS) is the same as in my Langfuse on EC2 guide.
GitLab CE fits in a single Docker container, with config, logs and data in persisted volumes. The Omnibus image even handles the Let’s Encrypt certificate on its own.
GitLab is hungry: count 4 GB RAM minimum, 8 GB comfortable. Below that, the first boot fails or crawls — don’t skimp on the instance.
GitLab without a runner runs no pipeline. A runner is a separate process that executes your CI jobs; you register it against the instance with a token.
Once runners are in place, you write your pipelines as in using GitLab CI/CD well.
The point that separates a serious self-host from a time bomb. GitLab has a built-in backup command — but it doesn’t include the config and secrets, which you must back up separately.
A backup never restored isn’t a backup. Test a full restore on a separate VM — that’s the whole point of backups that actually work.
Self-hosting GitLab means taking back control of your code and CI, in exchange for the admin responsibility. A Docker container, a well-sized instance, runners, and above all tested backups: with that, your GitLab is as reliable as the SaaS, and it's yours.
GitLab — Install docs ↗