Developer tools

Gitea VPS requirements: RAM, CPU, disk, and what really sizes the server

By VPSfit · Sources checked · Gitea website · source code · MIT

Gitea is a self-hosted Git service: repositories, pull requests, issues, a package registry and GitHub-style CI (Gitea Actions), in one Go binary or one container. It's one of the few self-hosted apps whose docs give a sizing rule: "2 CPU cores and 1GB RAM is typically sufficient for small teams/projects", and a Raspberry Pi 3 is enough for small workloads. Published tests put an idle Gitea at 79–150 MiB, so a private forge fits the smallest VPS plans with room to spare. What actually decides the server size is everything around it: AI crawlers on a public instance, which have pushed Gitea servers into multi-gigabyte out-of-memory crashes, and CI jobs if you run a runner on the same box. Since September 2026 the version numbers dropped the "1." prefix, so 1.27 was followed by 28.

Sizing guide

Our recommendations, derived from the sourced figures below. Not measurements.

ScenarioRAMvCPUWhy
Private forge for one person, SQLite, no CI on the box1 GB1Published idle readings are 79–150 MiB, and people have run it in 512 MB. 1 GB covers the OS, a reverse proxy and big clones; add swap. Keep it private so crawlers never reach it. We haven't measured it on a VPS yet.
Small team, the official guidance1 GB2The docs' own rule of thumb: 2 CPU cores and 1 GB of RAM for small teams and projects. The second core helps with clones, diffs and background jobs. Use PostgreSQL if the team will grow; SQLite doesn't scale and converting later is risky.
Public instance, or a team with PostgreSQL on the same VPS2 GB2Our estimate, not a measurement. PostgreSQL added about 45 MiB idle in one test, but the real reason is headroom for crawler bursts, which have pushed public instances to 7–12 GB. More RAM alone won't fix that; use REQUIRE_SIGNIN_VIEW or a bot filter too.
Gitea plus a runner building on the same VPS4 GB or more2+Our estimate. An idle runner used about 32 MiB in one test; the builds are what count, and one guide measured about 600 MB for the stack during a CI build. Size for your heaviest job, or put the runner on another machine.

Official requirements

ItemWhat the project saysSource
System requirements"A Raspberry Pi 3 is powerful enough to run Gitea for small workloads. 2 CPU cores and 1GB RAM is typically sufficient for small teams/projects." Run it under a dedicated non-root system account; Git 2.0.0 or later is required, 2.1.2 or later for Git LFSGitea docs: What is Gitea?, System Requirements
checked Nov 1, 2026
Install methodsContainer image docker.gitea.com/gitea (rootful, plus a separate rootless image that is not interchangeable with it), a single binary, distribution packages, or Kubernetes. The example compose file uses SQLite, publishes the web UI on 3000 and container SSH on 222, and pins a release tag such as 28.2.0Gitea docs: Installation with Docker
checked Nov 1, 2026
DatabasesPostgreSQL 12 or newer, MySQL 8.0 or newer, MariaDB 10.4 or newer, MSSQL 2012 SP4 or newer, or built-in SQLite. The docs warn that "SQLite does not scale" and that converting between database types "is not a well-tested process", so pick the final one at install timeGitea docs: Database Preparation
checked Nov 1, 2026
CacheThe default cache adapter is in-memory, with items kept 16 hours if unused. twoqueue (a size-limited LRU cache, 50,000 objects by default), Redis and Memcache are the alternatives. The last-commit cache keeps entries for 8760 hours for repositories with more than 1000 commitsGitea docs: Configuration Cheat Sheet, [cache]
checked Nov 1, 2026
Crawler controlsREQUIRE_SIGNIN_VIEW (default false) can be true, or "expensive" to block anonymous users from "pages which consume a lot of resources, for example: block anonymous AI crawlers from accessing repo code pages" (marked experimental). A [qos] section (off by default) queues requests above CPU count x 4 in flight and sheds logged-out traffic firstGitea docs: Configuration Cheat Sheet, [service] and [qos]
checked Nov 1, 2026
Disk-heavy featuresCode search (REPO_INDEXER_ENABLED) is off by default and "uses a lot of disk space, about 6 times more than the repository size". Source archive downloads are on (DISABLE_DOWNLOAD_SOURCE_ARCHIVES = false) and a nightly cron deletes archives older than 24h. Actions keeps completed runs 400 days (RUN_RETENTION_DAYS) and logs 365 daysGitea docs: Configuration Cheat Sheet
checked Nov 1, 2026
Actions and the runnerActions is enabled by default ([actions] ENABLED = true), but jobs run on a separately installed Gitea Runner (5.x series; v5.2.4 on 28 Oct 2026). It needs Gitea 1.21 or later and Docker or Podman for container jobs, runs one job at a time by default (runner.capacity = 1), and "host" jobs run "without isolation"Gitea docs: Gitea Runner; Runner configuration
checked Nov 1, 2026
Backupsgitea dump writes repositories, the database and config to one ZIP file. "To ensure the consistency of the Gitea instance, it must be shutdown during backup"Gitea docs: Backup and Restore
checked Nov 1, 2026
Current versionv28.3.0, released 1 Nov 2026. Gitea dropped the "1." prefix with 28.0.0 (30 Sep 2026), so the upgrade path is 1.27.x to 28. 28.0.0 has two breaking changes: Git network operations go through an internal proxy with egress settings, and old Actions runs are now deleted after the retention period. 32-bit x86 binaries are no longer builtGitea blog: Gitea 28.0.0 is released; GitHub releases
checked Nov 1, 2026

What people report in practice

Individual reports, not controlled tests. Versions, hardware and settings differ, so treat these as data points, not guarantees.

  • Gitea idled at 79 MB of RAM and 373 MB of total Docker disk, 30 seconds after the documented install on a clean 2 vCPU / 8 GB VM (one reading). Forgejo, in the same sweep, read 100 MB and 383 MB. The authors note the OS with Docker already used about 600 MB on their boxes, on top of the app

    Independent test of 96 self-hosted apps, Google Cloud e2-standard-2, Ubuntu 26.04, 28 Sep 2026. Idle with no users or data

    Blog SelfHost Atlas: Self-hosted app RAM usage, 96 apps measured (2026) · checked Nov 1, 2026

  • docker stats on a running instance: gitea 148.2 MiB and 0.15% CPU, PostgreSQL 45.3 MiB, an idle runner 32.1 MiB. The guide's own table puts the stack at about 230 MB idle, about 400 MB with 5–10 active users and about 600 MB during a CI build, and says 1 GB is the minimum, 2 GB with a CI runner

    Tutorial by a VPS provider (Virtua Cloud) on its own 4 vCPU / 8 GB plan, Gitea 1.25.5 with PostgreSQL 17, 2026

    Blog Virtua Cloud: Self-host Gitea on a VPS with Docker Compose · checked Nov 1, 2026

  • "My instance of Gitea uses about 120MB of RAM, Postgres 10-20MB", on a 1 GB / 1 CPU VPS also running Nginx, Nextcloud, a mail server, Synapse and more, with the advice to add at least 1 GB of swap. Others: 512 MB under Cloudron for 3 users pushing a few times a week, and a 1 GB Linode shared with SVN, websites and package repos "with no problems"

    r/Gitea thread, Sep 2022, answering how big a VPS very light personal use needs

    Reddit r/Gitea: For very light personal usage, how big a VPS does Gitea need? · checked Nov 1, 2026

  • Peak RAM during YunoHost's automated package test was 372 MB for Gitea (333 MB still in use after the test), against 231 MB for Forgejo. A maintainer added that production use may differ

    YunoHost forum, Jan 2025, quoting the packaging CI jobs. A short install test, not a production instance

    Forum YunoHost forum: RAM usage for Gitea and Forgejo · checked Nov 1, 2026

  • A public Gitea on Kubernetes kept getting OOM-killed after memory reached about 7 GiB. The cause was crawlers from large cloud and social-media networks fetching pages for AI training, not a leak; a maintainer said each request costs memory and big repositories cost more. Blocking those networks' ASNs at the ingress brought memory back to normal, and Redis for cache and sessions helped further

    GitHub issue, Feb to May 2025, Gitea 1.23.x

    GitHub GitHub go-gitea/gitea #33520: OOM caused by numerous crawls · checked Nov 1, 2026

  • A public instance maxed its CPU and used about 12 GB of RAM. A maintainer traced the diagnosis file to the Git compare/diff page, and the logs showed crawler traffic from big cloud networks comparing old tags with the newest. After turning on the option to block expensive pages for anonymous users, the reporter wrote: "Not facing high CPU & RAM load anymore"

    GitHub issue, Jun to Jul 2025, Gitea 1.24.2 in Docker

    GitHub GitHub go-gitea/gitea #34916: Gitea consumes excessive CPU and RAM when mirror tokens expire · checked Nov 1, 2026

  • docker stats showed a quiet Gitea growing from about 130 MB to 240 MB in 11 hours and later to 5 GB, while htop on the host showed the gitea binary at about 250 MB. A maintainer found no leak in Gitea's own heap and pointed at how container memory is counted

    GitHub issue, Dec 2023, Gitea 1.21 nightly in Docker with PostgreSQL

    GitHub GitHub go-gitea/gitea #28606: Slow progressive memory leak with Docker container · checked Nov 1, 2026

Our measurements: coming soon

We haven't measured Gitea yet, so there are no VPSfit lab numbers on this page. When we do, they'll show the app version, the plan it ran on, the date, and the raw data. Here's what we'll record:

  • Idle and 24-hour RAM of Gitea 28.3 with SQLite on a 1 GB plan, private, with ten repositories
  • RAM and CPU while cloning, diffing and comparing tags on a large repository (Linux kernel mirror)
  • Response times on a public 1 GB plan with REQUIRE_SIGNIN_VIEW = expensive and [qos] on versus off
  • RAM of Gitea, PostgreSQL and a runner during a typical Node.js build on a 2 GB and a 4 GB plan

How we measure →

What drives Gitea's RAM use

A small Go server, then whatever each request costs

An idle Gitea sits around 80–150 MiB in published tests (SelfHost Atlas; Virtua Cloud). Memory rises with work: rendering diffs and blame views, comparing tags, big clones and the git processes Gitea starts for them. A maintainer traced one 12 GB spike to the compare page (#34916). A few people using it normally never get near that.

Crawlers turn cheap pages into expensive ones

A forge has a URL for every file at every commit, every blame, every compare and every issue filter. AI crawlers that walk them all pushed one public Gitea to about 7 GiB and repeated out-of-memory kills (#33520). The fix in both reports was to stop the traffic, not to add RAM. A private instance doesn't have this problem.

Disk: repositories, LFS, packages, Actions and the indexer

Everything users push lands on the VPS disk: repositories, LFS objects, the package registry, and Actions logs and artifacts, which are kept 365 and 400 days by default. Code search is off by default because it takes about six times the repository size, and source archives are generated on request and kept until a nightly cleanup (cheat sheet). The install itself is small: 373 MB of Docker disk in one test (SelfHost Atlas).

CI is a separate workload

Gitea only queues Actions jobs. The runner runs them, usually in containers, one at a time unless you raise runner.capacity (runner docs). A build can need far more RAM and CPU than the forge, so size for your heaviest job, not for Gitea.

Gotchas on a VPS

  • Keep public instances away from crawlers. By default Gitea is open to search engines and serves no robots.txt (docs), and admins report AI crawlers ignoring robots.txt anyway (#33966). For a forge that's just for you, set REQUIRE_SIGNIN_VIEW = true or reach it over a VPN or tunnel such as Pangolin. For public code, REQUIRE_SIGNIN_VIEW = expensive keeps anonymous visitors off the costly code pages, and [qos] ENABLED = true sheds logged-out traffic first under load (cheat sheet).
  • Ports 3000 and 222 are public by default. The example compose file publishes 3000:3000 and 222:22 on every interface (docs), and Docker's published ports bypass UFW (Docker docs). Bind the web UI to 127.0.0.1:3000:3000 behind Caddy or Nginx with HTTPS, and finish the install wizard before the site is reachable, since whoever opens it first sets it up.
  • Check self-registration. The current cheat sheet lists DISABLE_REGISTRATION as true by default, but the install wizard and older configs can switch it on (cheat sheet). Look in app.ini. With Actions on, a stranger who can create a repository can try to run workflows on your runner, and the docs' rule is never to provide a runner to a repository or instance you don't trust (Actions overview).
  • A runner on the same box is close to root. Container jobs need Docker or Podman, and the usual compose setups mount the Docker socket into the runner (example), which lets jobs control the host's Docker. host labels run jobs with no isolation at all (runner docs). Use them only for your own repositories, or put the runner on a separate VPS.
  • Version 28 follows 1.27. 28.0.0 is the release after 1.27.3, not a giant jump (blog; forum). Read its two breaking changes first, and update scripts that download binaries, since the file names changed. Pin a tag such as 28.3.0 rather than latest, and take a backup before every minor upgrade: the docs say a downgrade across minor versions needs that backup (upgrade docs).
  • docker stats can overstate Gitea's memory. In one report docker stats showed 5 GB while the gitea process on the host used about 250 MB (#28606). Before resizing the server, check Site Administration's system status or a diagnosis report (Monitor, then Trace), and set a container memory limit so one runaway request restarts Gitea instead of freezing the VPS.
  • Back up with Gitea stopped, and off the server. gitea dump makes one ZIP of repositories, database and config, and the docs say Gitea "must be shutdown during backup" for a consistent copy (docs). A short nightly stop is fine for a personal forge. Copy the ZIP to another machine.

Cheapest plans that fit

Gitea, private, one person, SQLite, no CI on the box: 1 GB RAM and 1+ vCPU

Threshold: Published idle readings of 79–150 MiB; 1 GB leaves room for the OS, a proxy and big clones. Not yet measured by us (source). Only plans with at least 1 vCPU are listed.

Provider & planRAMvCPUDisk Price / monthTermsSource
Contabo Cloud VPS 4 8 GB 4 shared 100 GB SSD €4.40
excl. VAT · ≈ $4.93
24-month term (effective monthly rate) contabo.com
checked Oct 28, 2026
Vultr Cloud Compute Regular 1 GB 1 GB 1 shared, previous-gen Intel 25 GB SSD $5.00
before tax
Monthly price, hourly billing vultr.com
checked Oct 28, 2026
DigitalOcean Basic 1 GiB 1 GB 1 shared 25 GB SSD $6.00
before tax
Monthly cap, per-second billing digitalocean.com
checked Oct 28, 2026
Contabo Cloud VPS 6 12 GB 6 shared 200 GB SSD (or 100 GB NVMe) €6.00
excl. VAT · ≈ $6.73
24-month term (effective monthly rate) contabo.com
checked Oct 28, 2026

Gitea for a small team (official guidance): 1 GB RAM and 2+ vCPU

Threshold: Official: "2 CPU cores and 1GB RAM is typically sufficient for small teams/projects" (source). Only plans with at least 2 vCPUs are listed.

Provider & planRAMvCPUDisk Price / monthTermsSource
Contabo Cloud VPS 4 8 GB 4 shared 100 GB SSD €4.40
excl. VAT · ≈ $4.93
24-month term (effective monthly rate) contabo.com
checked Oct 28, 2026
Contabo Cloud VPS 6 12 GB 6 shared 200 GB SSD (or 100 GB NVMe) €6.00
excl. VAT · ≈ $6.73
24-month term (effective monthly rate) contabo.com
checked Oct 28, 2026
Contabo Cloud VPS 8 24 GB 8 shared 300 GB SSD (or 150 GB NVMe) €11.20
excl. VAT · ≈ $12.56
24-month term (effective monthly rate) contabo.com
checked Oct 28, 2026
Hostinger KVM 2 8 GB 2 AMD EPYC 100 GB NVMe $14.99
intro $8.79
before tax
Prepaid intro rate; renews at $14.99/mo hostinger.com
checked Oct 28, 2026

Gitea plus an Actions runner on the same VPS: 4 GB RAM and 2+ vCPU

Threshold: Our estimate, not a measurement: Gitea's few hundred MiB plus room for typical container builds. Size up for heavy builds (source). Only plans with at least 2 vCPUs are listed.

Provider & planRAMvCPUDisk Price / monthTermsSource
Contabo Cloud VPS 4 8 GB 4 shared 100 GB SSD €4.40
excl. VAT · ≈ $4.93
24-month term (effective monthly rate) contabo.com
checked Oct 28, 2026
Contabo Cloud VPS 6 12 GB 6 shared 200 GB SSD (or 100 GB NVMe) €6.00
excl. VAT · ≈ $6.73
24-month term (effective monthly rate) contabo.com
checked Oct 28, 2026
Contabo Cloud VPS 8 24 GB 8 shared 300 GB SSD (or 150 GB NVMe) €11.20
excl. VAT · ≈ $12.56
24-month term (effective monthly rate) contabo.com
checked Oct 28, 2026
Hostinger KVM 2 8 GB 2 AMD EPYC 100 GB NVMe $14.99
intro $8.79
before tax
Prepaid intro rate; renews at $14.99/mo hostinger.com
checked Oct 28, 2026

Prices checked Oct 28, 2026 on each provider's official pricing page. EUR prices converted at the ECB rate of Oct 27, 2026 (1 € = $1.115) only for ranking. See all plans on the cheapest 4 GB VPS page.