Deploy

Free credit available Limited time

Self hosted GitLab. We will run the server.

One container, TLS and your own domain. The slowest deploy in the catalog and worth the wait.

GitLab CE 19.3.1, the open source DevOps platform, deploys as a one-click template onto a dedicated server Selfhost.dev provisions, secures and runs, across six locations on three continents. A European 8 GB server is $0.03/hr, about $23 a month, for as many users as you like.

Launch GitLab

One click. One container. The template deploys in about twenty-five minutes.

+$5.00 added at signup · deployment choice preserved · no card

GitLab CE 19.3.1, pinned/PostgreSQL and Redis bundled in/Custom domain and SSL, automatic/A European 8 GB server, $0.03/hr, and 8 GB is a hard floor

What is GitLab self hosted?

Your repositories.
On your own machine.

What it is. Self hosted GitLab is GitLab Community Edition running on a server you control rather than on GitLab.com. You get repositories, merge requests, issues and CI runners, with the source code, the database and every artefact on a machine that is yours.

Who it is for. Teams whose code cannot sit on someone else's infrastructure, and anyone who wants CI without a per-seat bill. The common thread is a compliance or control requirement, not a cost one.

When to use it. When source code has to stay on infrastructure you can point at, or when the sixth user arrives and GitLab.com stops being free. Not when you need working email on day one.

One-click template (live today)

Self hosted GitLab requirements

Eight gigabytes, and why that is not negotiable.

What GitLab CE needsThis deployment
Memory8 GB, and it is a hard floor. The platform refuses GitLab on anything smaller
DatabasePostgreSQL, bundled inside the image
Cache and queuesRedis, bundled inside the image
Deploy timeAbout 25 minutes for the template. The slowest in the catalog
MailNone, and it cannot be configured with an environment variable. smtp_enable = false is compiled into the omnibus config
Inbound SSHWorks only if you request a public port
Architecturex86 or ARM
What Selfhost.dev providesDetail
The serverA European 8 GB machine is $0.03/hr, about $23 a month, in one of six locations across three continents
HTTPSAutomatic, on the generated hostname or your own domain
BackupsOptional. Daily, whole VM, last 7 kept, +20% of the server price
MonitoringMetrics, logs, and a health check every 60 seconds
Root accessYour SSH key, a root shell on your own server
Database alternativeGitLab bundles its own Postgres. A separate managed PostgreSQL instance is the route if you outgrow it
MCP tools189 across 31 modules

Specifications current as of September 2026.

What launches: GitLab CE in Docker

One container, and it is a large one.

GitLab CE ships as a single omnibus container, with its own PostgreSQL and Redis inside rather than as sidecars. That is why it wants 8 GB to itself, and why the template takes about twenty-five minutes: first boot runs the full migration suite before the interface answers.

ContainerImageRole
gitlab (routed)gitlab/gitlab-ce:19.3.1-ce.0The whole platform: web, Git, CI coordinator, Postgres and Redis inside one image

The proxy configuration GitLab usually gets wrong

external_url is your HTTPS address with nginx["listen_https"] = false and listen_port = 80. That exact combination makes GitLab emit https:// clone URLs while its internal nginx listens on plain HTTP behind a terminating proxy. Get it wrong and every clone URL it hands out is unusable.

Tuned down on purpose, for a small host

prometheus_monitoring is off, saving 0.5 to 1 GB. puma worker_processes is 2, sidekiq max_concurrency is 9, both below GitLab's defaults, and shm_size is 256m. Deliberate choices for a single-server install, and why CE fits on 8 GB at all.

The tag is pinned. A floating latest is how a live GitLab gets dragged onto a new major and runs an irreversible migration nobody asked for. 19.3.1-ce.0 does not move unless you move it.

What we set up for you

The settings that decide whether it works at all.

SettingWhat we set, and why
external_urlYour HTTPS address, with listen_https=false and listen_port=80 so clone URLs come out right
GITLAB_ROOT_PASSWORDSet before first boot. GitLab never comes up on a documented default password on Selfhost.dev
gitlab_signup_enabledfalse. Public registration is closed, so a public URL does not become a public GitLab
prometheus_monitoringOff, saving 0.5 to 1 GB
puma / sidekiq2 workers, concurrency 9, tuned for a single host
gitlab_shell_ssh_portSet when you ask for a public port, so git over SSH works
TLS and domainCertificate issued and renewed, on the generated hostname or your own

No Selfhost.dev template ever boots on a documented default password. Where an app ships one, we replace it before the container is reachable, and if that seeding fails the instance boots locked rather than open.

How to self host GitLab in four steps

From zero to live.
No server to set up.

Four steps. One container, and the migrations are the slow part.

1

1. Choose GitLab and an 8 GB server

Pick one of six locations across three continents, then submit. Smaller servers are refused, because 8 GB is a hard floor the platform enforces rather than a recommendation.

2

2. Wait out the migrations

The container starts and runs GitLab's full database migration suite before the interface answers. About twenty-five minutes, and do not restart it: interrupting the migrations usually needs a fresh deployment.

3

3. Sign in as root

Use the password the console created during deployment. Public sign-up is already disabled, so a public URL does not become a public GitLab.

4

4. Make it yours

Add your domain from Settings with a TXT record, create your first group, and add an SMTP relay before you invite the team.

What we run, and what you run

The line between our job and yours.

Selfhost.dev runsYou run
The server, its OS and its provisioningGitLab CE, and when to upgrade it
The container and the network around itYour groups, projects and permissions
TLS certificates and renewalYour domain's DNS records
The reverse proxy and the generated HTTPS hostnameSMTP, which you must add yourself
Optional whole-server backupsExports you take yourself, whenever you want
The 8 GB floor enforcementCI runners, and whether to add more

Selfhost.dev manages the server, not GitLab. There is no GitLab administration service, no upgrade scheduling and no support contract for the application. What there is instead is a machine with root on it, running CE, at one flat hourly rate with no seat count attached.

What an 8 GB server handles

One heavy workload, and this is it.

The platform reserves 1,536 MB for the host and counts GitLab as one heavy workload at 2,048 MB, so an 8 GB server has room for two more heavy workloads beside it. In practice most people give GitLab the machine to itself.

QuestionAnswer
GitLab on 8 GBThe platform, its bundled Postgres and Redis, with room beside it
Below 8 GBRefused by the platform. Not slow, refused
CI runnersThe bundled coordinator schedules jobs. Heavy pipelines want their own runner on a second server

No concurrent-user or pipelines-per-hour figure appears here, because no first-party measurement of this template exists.

GitLab self hosted pricing

CE is free. The server is the bill.

GitLab Community Edition is free software and Selfhost.dev does not charge for it. You pay for the server it runs on and nothing else. A European 8 GB server is $0.03/hr, about $23 a month if you leave it running, billed hourly against prepaid credits. There is no seat count, no plan above it and no licence to buy.

ServerRAMEuropeMonthly at 730 hrs
cx33 (minimum, and required)8 GB$0.03/hr$23.36
cx4316 GB$0.06/hr$46.72

Europe only. Outside Europe the console selects a different machine at a different rate: the US 8 GB equivalent is ccx13 at about $119 a month. Price it in your own location, no signup.

ItemCost
GitLab CE, the software$0. It is free and open source
Its bundled PostgreSQL and Redis$0
HTTPS certificate and custom domain$0
Users, seats or contributors$0 at any number
Bandwidth$0. Traffic is included in the server price
Optional daily backups+20% of the server price

If your credit balance reaches zero the server stops and GitLab goes offline. Data is retained while the server exists, so topping up brings it back as it was. A server that is deleted takes its backup images with it, which is why a project export or an SSH copy kept elsewhere is worth the ten minutes. Signing up adds $5 in free credit, no card needed.

What every GitLab deployment gets

Five things the platform actually does.

  • Every service is health-checked every 60 seconds.
  • A stalled deploy is retried automatically, not abandoned.
  • A deploy is never reported done until the URL actually answers, which on a twenty-five minute GitLab migration matters more than anywhere else in the catalog.
  • Your version does not move. gitlab-ce:19.3.1-ce.0 is pinned. A floating tag is how a live GitLab gets dragged onto a new major and runs an irreversible migration.
  • GitLab never boots on a documented default password, and public sign-up ships closed.
Sizing sheet

Working out what a GitLab server costs?

Send yourself the sizing and the monthly figure for an 8 GB machine in your own location, plus the SMTP options that work with a self hosted GitLab. One email, no newsletter.

GitLab.com vs GitLab hosting on your own server

Free to five people. Then a conversation.

Our template is GitLab CE, and CE does not contain Premium or Ultimate features at all, so this is not our GitLab against their Premium. The comparison is CE on your own server against GitLab.com Free, which is hosted, free and genuinely good up to five people. GitLab.com Free stops at five users per top-level group, and at the sixth user GitLab stops publishing a price at all: Premium reads "Let's talk" and Ultimate reads "Contact us for custom pricing". A European 8 GB server here is $23.36 a month, flat, for as many users as the machine will carry, and the figure is on this page because we are willing to print it.

GitLab.com FreeGitLab.com PremiumGitLab CE here
Price$0Not published. "Let's talk"$23.36/mo flat for the server
Users5 per top-level groupUnlimited licensedUnlimited
Compute minutes400/mo10,000/moYour own server, no meter
Storage10 GiBAdd-on, $5/mo per 10 GiBThe server's disk
Where the code livesGitLab's infrastructureGitLab's infrastructureA machine you chose, in one of six locations
Root accessNoNoYes, over SSH
Premium and Ultimate featuresNoYesNo. CE does not contain them
EmailWorksWorksDoes not send until you add a relay

GitLab.com prices checked first-party at about.gitlab.com/pricing on 13 September 2026. Our figure is a European 8 GB server at 730 hours.

When GitLab.com is the better choice

If your team needs working email, use GitLab.com. This deployment cannot send password resets or member invitations until you add an SMTP relay yourself, and for most teams that is a genuine reason to stay on their free tier rather than a detail to work around. GitLab.com is hosted, free at the entry tier, maintained by the people who write GitLab, and it sends email.

GitLab hosting versus a VPS you set up yourself

Same hardware. Different twenty-five minutes.

It is the same hardware. We run on Hetzner, which is where most people putting GitLab on a VPS end up anyway. The machine is not the difference.

A raw VPSThis template
Docker and the omnibus configYours to install and writeAlready running
external_url and proxy headersYours to get right, and clone URLs break when you do notConfigured before first boot
Memory tuning for a small hostYours to work out. Default GitLab will not fit comfortablyPuma, Sidekiq and Prometheus already tuned
TLS certificateCertbot, plus a renewal cron you have to rememberIssued and renewed
Root accessYesYes, the same
Time to a working GitLabAn afternoon, if the migrations behaveAbout twenty-five minutes for the template

What you do not give up is root. SSH in, docker exec, take a backup, change the config. This is the same VPS with the awkward hours already spent. If all you need is CI, Jenkins self hosted is the lighter template.

Two things decide whether this deployment suits you

Eight gigabytes, and no email.

It needs 8 GB and it cannot send email. The platform refuses GitLab on anything smaller, and the template ships with smtp_enable = false compiled into its omnibus configuration, so password resets and member invitations will not deliver until you add a relay yourself.

Self hosted GitLab limitations

Six things to know before you deploy.

  • No email at all, and it is not a settings change. GitLab ships here with smtp_enable = false compiled into its configuration. Password resets will not arrive and invitations will not send. This is not an empty variable you fill in from the console: it means editing the omnibus config inside the container and reconfiguring. Add an SMTP relay before you invite anyone, or add your team by username.
  • Eight GB is a hard floor. The platform refuses GitLab on a server below 8 GB. Not degraded, refused. Budget $23.36 a month for a European machine before anything else.
  • The slowest deploy in the catalog. About twenty-five minutes, because first boot runs GitLab's full database migration suite before the web interface answers. Never restart it mid-provision: interrupting the migrations leaves the database in a state that usually needs a fresh deployment.
  • Registry and Pages are not configured. The container registry and GitLab Pages are part of CE but are not switched on in this template. They can be enabled by hand inside the container; nothing here does it for you.
  • Inbound SSH needs a public port. git over SSH works only if you request a public port for the deployment. Without it, clone and push over HTTPS.
  • CE is not Premium. Merge approvals, epics, advanced roles and security dashboards are Premium and Ultimate features. They are not in CE and no hosting arrangement adds them. If you need them, buy a GitLab plan; that is a licensing fact, not a hosting one.

GitLab backup and restore

Every clone your team holds is already a copy.

What a backup covers

Daily, optional, 20% of the server price. One image is the container, its bundled PostgreSQL and Redis, and every volume together, including repositories and CI artefacts. The last seven are kept, rotating.

They do not survive deletion

Backup images live with the server. If the server is destroyed, they go with it. A backup protects you from a mistake, not from an unpaid bill.

Your own copy, whenever you want one

gitlab-backup create writes a complete tar of repositories, database, uploads and CI artefacts. Add your public key, docker exec in, run it, copy the archive off over SSH. GitLab's own tool, and it restores onto any GitLab of the same version.

Nothing here is designed to make leaving hard

Repositories are Git, so every clone is already a copy, and gitlab-backup create takes the rest. No export button, and no lock either.

Moving an existing GitLab here

Two routes, and one of them is a tarball.

From another self-managed GitLab

Run gitlab-backup create on the old instance, copy the archive across, and restore it here with gitlab-backup restore. Versions must match, so check the old instance is on 19.3.1 or upgrade this one to meet it before restoring.

From GitLab.com

Use GitLab's per-project export: Settings, General, Advanced, Export project. Each export is a file you import here from the new-project screen. Repositories, issues, merge requests, milestones and wiki come across.

Two things to expect. Per-project export does not carry CI/CD variables or registry images, so those are set again by hand. And invitation emails will not send from this deployment, so add your team by username rather than by email invite, or configure SMTP first. We do not perform the migration: there is no migration service and no import API, and both routes are things you run.

Frequently asked questions

Is GitLab free?
GitLab Community Edition is free and open source, with no user limit and no licence to buy. What costs money is the server it runs on. On Selfhost.dev that is a European 8 GB machine at about $23 a month for any number of users. Premium and Ultimate features are separate paid products and are not part of CE.
How much does self hosted GitLab cost?
You pay for the server and nothing else. A European 8 GB server is $0.03 an hour, about $23 a month if you leave it running, billed hourly against prepaid credits. GitLab CE adds no fee at any user count. Outside Europe the machine differs; the US equivalent is roughly $119 a month. See pricing.
Can GitLab send email from this deployment?
No, not without work from you. This template ships with SMTP hardcoded off, so password resets and member invitations will not deliver. Adding a relay means editing GitLab's omnibus configuration inside the container and reconfiguring. Plan for it before inviting anyone, or add team members by username instead of by email.
Why does GitLab need 8 GB?
GitLab CE runs as one omnibus container holding the web application, Git services, the CI coordinator, PostgreSQL and Redis together. That is a lot in one process tree. Selfhost.dev refuses the template on anything smaller, so 8 GB is a hard floor rather than a recommendation you can ignore.
Does this include Premium or Ultimate features?
No. This template runs Community Edition, and merge approvals, epics, advanced roles and security dashboards are licensed features that CE does not contain. No hosting arrangement, ours or anyone else's, adds them. If your team needs those, buy a GitLab plan; that is a licensing decision rather than a hosting one.
How do I move an existing GitLab here?
From another self-managed instance, run gitlab-backup create on the old one and restore the archive here with matching versions. From GitLab.com, use per-project export and import each file from the new-project screen. Repositories, issues and merge requests come across; CI variables and registry images do not.
Can I use my own domain?
Yes. Every deployment gets a generated HTTPS hostname first, and you add your own domain afterwards from the resource Settings screen: set the DNS records, verify with a TXT record, and the certificate is issued automatically. GitLab's external_url is configured to follow it so clone URLs stay correct.
What happens to my repositories if my credit balance reaches zero?
The server stops and GitLab goes offline. Data is retained while the server exists, so topping up brings it back as it was. A deleted server takes its backup images with it. Every Git clone your team holds is already a full copy, which is the safety net here.

About Selfhost.dev

Selfhost.dev is a managed self hosting platform for developers and small teams. Open source apps and databases on dedicated servers you control, billed by the hour, in six locations across three continents.

Best for: GitLab, Jenkins, Grafana, MinIO and managed PostgreSQL, MySQL, Redis and ClickHouse.

Self host GitLab. We will run the server.

GitLab CE, free software, unlimited users
A European 8 GB server, about $23 a month, bandwidth included
Root SSH and gitlab-backup create, yours to take elsewhere
Launch GitLab