CloudEstimate

Size GitLab Self-Managed on Google Cloud

Extra Small — up to 500 users

Monthly cost

$359.40

Annual cost

$4,313/year

Line-item breakdown

Compute $276.90
Storage $82.50
Other $0.00

Components provisioned

Role Instance vCPU GB RAM Storage
Application 1 × n2-standard-4 4 16 200 GB
Database 1 × n2-standard-4 4 16 250 GB
Cache 1 × n2-standard-2 2 8
Object Storage Gateway 1 × n2-standard-2 2 8 300 GB

Why this sizing

This Extra Small GitLab deployment supports up to 500 users with no high availability. The primary cost driver is compute, specifically the four n2-standard instances. The architecture includes two n2-standard-4 instances for core services and two n2-standard-2 instances for supporting roles, reflecting a distributed but non-redundant setup. This configuration prioritizes minimal cost over resilience or scalability beyond 500 users.

Export

Share the current URL or copy the launch Terraform baseline.

Google Cloud Terraform baseline
terraform {
  required_version = ">= 1.6.0"

  required_providers {
    google = {
      source  = "hashicorp/google"
      version = "~> 6.0"
    }
  }
}

variable "project_id" {
  description = "Google Cloud project ID for this deployment."
  type        = string
  default     = "replace-with-project-id"
}

provider "google" {
  project = var.project_id
  region  = "us-central1"
  zone    = "us-central1-a"
}

# Generated for Google Cloud from the current estimate state.

resource "google_compute_disk" "application_1_data" {
  count = 1
  name  = "gitlab-application-1-data-${count.index + 1}"
  type  = "pd-ssd"
  zone  = "us-central1-a"
  size  = 200
}

resource "google_compute_instance" "application_1" {
  count        = 1
  name         = "gitlab-application-1-${count.index + 1}"
  machine_type = "n2-standard-4"
  zone         = "us-central1-a"

  boot_disk {
    initialize_params {
      image = "projects/debian-cloud/global/images/family/debian-12"
      size  = 50
      type  = "pd-balanced"
    }
  }

  network_interface {
    network = "default"
    access_config {}
  }
  attached_disk {
    source = google_compute_disk.application_1_data[count.index].id
    mode   = "READ_WRITE"
  }

  labels = {
    app  = "gitlab"
    role = "application"
  }
}


resource "google_compute_disk" "database_2_data" {
  count = 1
  name  = "gitlab-database-2-data-${count.index + 1}"
  type  = "pd-ssd"
  zone  = "us-central1-a"
  size  = 250
}

resource "google_compute_instance" "database_2" {
  count        = 1
  name         = "gitlab-database-2-${count.index + 1}"
  machine_type = "n2-standard-4"
  zone         = "us-central1-a"

  boot_disk {
    initialize_params {
      image = "projects/debian-cloud/global/images/family/debian-12"
      size  = 50
      type  = "pd-balanced"
    }
  }

  network_interface {
    network = "default"
    access_config {}
  }
  attached_disk {
    source = google_compute_disk.database_2_data[count.index].id
    mode   = "READ_WRITE"
  }

  labels = {
    app  = "gitlab"
    role = "database"
  }
}

resource "google_compute_instance" "cache_3" {
  count        = 1
  name         = "gitlab-cache-3-${count.index + 1}"
  machine_type = "n2-standard-2"
  zone         = "us-central1-a"

  boot_disk {
    initialize_params {
      image = "projects/debian-cloud/global/images/family/debian-12"
      size  = 50
      type  = "pd-balanced"
    }
  }

  network_interface {
    network = "default"
    access_config {}
  }

  labels = {
    app  = "gitlab"
    role = "cache"
  }
}


resource "google_compute_disk" "object_storage_gateway_4_data" {
  count = 1
  name  = "gitlab-object-storage-gateway-4-data-${count.index + 1}"
  type  = "pd-standard"
  zone  = "us-central1-a"
  size  = 300
}

resource "google_compute_instance" "object_storage_gateway_4" {
  count        = 1
  name         = "gitlab-object-storage-gateway-4-${count.index + 1}"
  machine_type = "n2-standard-2"
  zone         = "us-central1-a"

  boot_disk {
    initialize_params {
      image = "projects/debian-cloud/global/images/family/debian-12"
      size  = 50
      type  = "pd-balanced"
    }
  }

  network_interface {
    network = "default"
    access_config {}
  }
  attached_disk {
    source = google_compute_disk.object_storage_gateway_4_data[count.index].id
    mode   = "READ_WRITE"
  }

  labels = {
    app  = "gitlab"
    role = "object-storage-gateway"
  }
}

Related views

Sources

Reference architecture: GitLab Self-Managed for 1k-users, version 17.11, retrieved April 12, 2026.

https://archives.docs.gitlab.com/17.11/administration/reference_architectures/

Pricing: Google Cloud pricing snapshot, retrieved May 6, 2026.

Commercial pricing only. GovCloud, sovereign cloud, and discounts beyond those shown are not modelled.

Not included in this estimate

  • Vendor licensing and support
  • Professional services
  • Network egress
  • Compliance controls
  • Backup storage
  • Monitoring

Based on GitLab's published reference architectures and simplified to a VM-based baseline.

Production deployments should be verified against workload-specific RPS, monorepos, and CI patterns.

Other workloads on Google Cloud