[{"data":1,"prerenderedAt":260},["ShallowReactive",2],{"seo-verification":3,"blog-gitea-vs-gitlab-which-self-hosted-git-forge-on-a-vps-ma-en":6,"promo-bar-likely":259},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-gitea-vs-gitlab-which-self-hosted-git-forge-on-a-vps-ma-en",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":27,"featuredImage":29,"bgImage":30,"posterImage":31,"relatedSolution":32,"intro":35,"sections":36,"ctaTitle":196,"ctaBody":197,"ctaButton":198,"ctaUrl":199,"relatedPosts":200},99,"gitea-vs-gitlab-which-self-hosted-git-forge-on-a-vps",{"fr":12,"en":10,"ar":13,"es":14},"gitea-vs-gitlab","gitea-مقابل-gitlab-أي-منصة-git-مستضافة-ذاتيا-على-vps","gitea-vs-gitlab-que-forja-git-self-hosted-en-vps","Gitea vs GitLab: Which Self-Hosted Git Forge on a VPS?","Gitea vs GitLab self-hosted in 2026: licenses, memory footprint, CI\u002FCD, migration and security compared to choose your Git forge on a VPS.",10,3,false,"2026-03-13T00:00:00+00:00","2026-10-20T23:18:08+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},5,"Comparison","comparatif","bg-info\u002F10 text-info",[28],{"id":23,"name":24,"slug":25,"color":26,"icon":25},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fgitea-vs-gitlab-poster.svg",{"categorySlug":33,"appSlug":34},"development","gitea","Hosting your own Git forge means taking back control of your code, your CI, and your secrets. Gitea plays the lightweight card, GitLab the all-in-one platform. Here's how to decide and deploy yours on a VPS — from license comparison to a four-step install.",[37,41,51,54,57,117,120,123,132,135,151,172,190,194],{"type":38,"title":39,"body":40},"h2","Why Self-Host Your Git Forge on a VPS","A self-hosted Git forge keeps your intellectual property off public platforms and removes any arbitrary limit on the number of private repositories, collaborators, or CI minutes. On a VPS, you control data location, backups, and integration with your internal pipeline. Gitea (and its fork Forgejo) is written in Go: a single binary, instant startup, minimal memory footprint, ideal for a modest VPS. GitLab CE is an integrated suite (issues, CI\u002FCD, Docker registry, package registry, wiki, environments) but consumes far more RAM. The choice depends on your need: a clean, fast Git, or a complete DevOps platform in a single product.",{"type":42,"title":43,"items":44},"ul","The Benefits of a Self-Hosted Forge",[45,46,47,48,49,50],"Private repositories with no cap and no per-seat subscription","CI\u002FCD under your control, with your own runners on the VPS","Secrets and tokens stored on your own server, off a third-party platform","Built-in Docker image and package registry, close to your deployments","Compliance and data residency fully under control","With Gitea: a single binary, back up by copying a folder and a database",{"type":38,"title":52,"body":53},"Gitea vs GitLab: License Differences in 2026","Gitea is released under the MIT license: you can read the code, modify it, redistribute it, and host it without commercial restrictions. Forgejo, its community fork born in 2022, applies the same license. GitLab CE is also MIT — but only the Community Edition layer. GitLab EE (Enterprise Edition) is proprietary: premium features (advanced SAML SSO, multiple MR approvals, integrated SAST\u002FDAST, epics, roadmaps) are locked behind a paid subscription starting at several hundred euros per user per year. For a team self-hosting GitLab CE, the main risk is not the license itself but the upsell effect: missing CE features progressively push toward paid EE. With Gitea or Forgejo, all available features are included in the free version with no paid tier. If license compliance or audits matter in your context — public administration, government contracting, or enterprise accounts — this difference is structural.",{"type":38,"title":55,"body":56},"Server Performance and Resources","Gitea uses roughly 100 to 150 MB of RAM at idle in a standard Docker deployment with PostgreSQL. With about ten active runners and a few simultaneous pipelines, you stay under 400 MB for the forge itself — easily fits on a 2 GB RAM VPS while leaving room for the OS and database. GitLab CE in omnibus is in a different league: PostgreSQL, Redis, Sidekiq, Gitaly, Puma, and NGINX all run in parallel. At idle, the stack commonly exceeds 3 to 4 GB of RAM on a fresh deployment and can climb to 6 to 8 GB under CI load. GitLab officially recommends 8 GB of RAM for production use with CI enabled. On the CPU side, Gitea is nearly invisible at idle; GitLab triggers background Sidekiq processes (indexing, webhooks, cleanups) that consume CPU intermittently even with no visible activity.",{"type":58,"title":59,"headers":60,"rows":64},"comparison","Gitea vs GitLab CE: Full Comparison Table",[61,62,63],"Criterion","Gitea \u002F Forgejo","GitLab CE",[65,69,73,77,81,85,89,93,97,101,105,109,113],[66,67,68],"Idle RAM","~128 MB (forge only)","3 to 4 GB (full omnibus)",[70,71,72],"Recommended production RAM","1 to 2 GB","8 GB",[74,75,76],"Architecture","Single Go binary","Multi-service suite (omnibus)",[78,79,80],"Startup time","Near-instant","Several minutes",[82,83,84],"License","MIT (Gitea) \u002F MIT (Forgejo)","MIT (CE) \u002F proprietary (EE)",[86,87,88],"Built-in CI\u002FCD","Gitea Actions (GitHub-style)","GitLab CI\u002FCD, very complete",[90,91,92],"Distributed runners","Basic (act runner)","Advanced (distributed runners, k8s executor)",[94,95,96],"Integrated SAST \u002F DAST","No (via CI plugins)","EE only",[98,99,100],"Multiple MR approvals","Simple","Advanced (EE)",[102,103,104],"Docker \u002F package registry","Included and lightweight","Included, rich",[106,107,108],"Project management (issues, boards)","Essential","Advanced (epics by edition)",[110,111,112],"Ease of backup","Folder + SQL dump","Dedicated omnibus procedure",[114,115,116],"Ideal for","Modest VPS, teams of 1 to 30 devs","Enterprise DevOps platform",{"type":38,"title":118,"body":119},"CI\u002FCD Features Compared","Gitea Actions appeared in Gitea 1.19 (2023) and reuses exactly the GitHub Actions workflow syntax: existing `.github\u002Fworkflows\u002F*.yml` files are reusable without modification in most cases. The underlying executor is `act` (the open-source engine that simulates GitHub Actions locally), wrapped in a Docker runner. This is sufficient for the majority of pipelines: build, test, lint, image push, SSH deployment. Limitations appear on advanced cases: no shared caches across runners at scale, no native review environments, more limited artifact management. GitLab CI is more mature on these points: distributed runners across multiple machines, Kubernetes executors, shared caches, dynamic environments, review apps, inline test report pages, powerful `rules:` and `include:` directives. If your pipeline goes beyond a dozen parallel jobs, manages per-MR review environments, or requires integrated SAST\u002FDAST in the merge report, GitLab CI is irreplaceable in its CE version (for CI\u002FCD itself — SAST remains EE). The practical rule: Gitea Actions is sufficient for teams of 1 to 20 developers with standard pipelines; GitLab CI becomes necessary when pipeline maturity is itself a selection criterion.",{"type":38,"title":121,"body":122},"GitLab to Gitea Migration: What CVE-2026-85706 Covers","CVE-2026-85706 is a Server-Side Request Forgery (SSRF) vulnerability discovered in GitLab CE and EE affecting versions prior to the March 2026 patch. It allows an authenticated attacker to force GitLab to make HTTP requests to internal network resources via the remote repository import feature. On a VPS where GitLab shares the internal network with other services (databases, registries, APIs), the exposure is real. Gitea is not affected by this specific CVE — its remote import code is separate. The GitLab to Gitea migration is documented and covered by `gitea-migration-tool`: it imports repositories, issues, labels, milestones, pull requests, and comments from the GitLab API. CI\u002FCD pipelines do not migrate automatically (GitLab CI syntax differs from Gitea Actions), but for teams using GitHub-Actions-close syntax in their GitLab CI, the conversion is lightweight. If you are running an unpatched version of GitLab CE on an exposed VPS, migrating to Gitea or urgently upgrading are the only reasonable options.",{"type":42,"title":124,"items":125},"When to Choose GitLab CE Despite the Resource Cost",[126,127,128,129,130,131],"Teams of more than 50 active developers: GitLab's fine-grained permissions and nested groups justify the complexity","Enterprise compliance or ISO 27001 certification: audit logs, quorum-based MR approvals, and push protection policies are more mature","SAST \u002F DAST integrated into the pipeline (requires GitLab EE, but some teams prefer consolidating on a single paid tool)","Review apps and dynamic per-MR environments: GitLab CI handles this natively; Gitea Actions requires external tooling","Kubernetes runners with autoscaling: GitLab has a dedicated K8s operator and a native executor","Wiki linked to the repository with Git history and Mermaid \u002F PlantUML renders built into the interface",{"type":38,"title":133,"body":134},"Prerequisites by Chosen Forge","Gitea is frugal: 1 vCPU and 1 GB of RAM are enough for a small team, 2 GB with the database and a few runners. GitLab CE is far more demanding: aim for at least 4 GB of RAM (8 GB recommended in real-world use with CI), 4 vCPUs, and a fast disk, since the suite bundles PostgreSQL, Redis, Sidekiq, and Gitaly. In both cases you need Docker and Compose, a subdomain (git.yourdomain.com), a reverse proxy for TLS, and ideally a second subdomain if you enable the Docker registry. Plan for a dedicated volume for the repositories and a backup strategy.",{"type":136,"title":137,"steps":138},"steps","Install Gitea on a ServOrbit VPS in 4 Steps",[139,142,145,148],{"title":140,"body":141},"Prepare the Volume and Docker Network","On your ServOrbit VPS, create the data directories and an isolated Docker network: `mkdir -p \u002Fsrv\u002Fgitea\u002F{data,db} && docker network create forge`. This network lets Gitea and PostgreSQL communicate without exposing the database to the public interface.",{"title":143,"body":144},"Write the docker-compose.yml","Declare two services: `gitea\u002Fgitea:latest` mounted on `\u002Fsrv\u002Fgitea\u002Fdata` and `postgres:16-alpine` mounted on `\u002Fsrv\u002Fgitea\u002Fdb`. Expose port `3000` internally (your reverse proxy will reach it) and Git SSH port `2222` externally. Pass `GITEA__database__DB_TYPE=postgres`, `GITEA__server__DOMAIN`, and `GITEA__server__ROOT_URL` as environment variables.",{"title":146,"body":147},"Configure the Domain and SSL","In your ServOrbit client area, create a DNS record for `git.yourdomain.com` pointing to your VPS IP. Proxy this subdomain with Caddy or Nginx to Gitea's port `3000`. Caddy handles Let's Encrypt automatically; with Nginx, add a certbot block. Verify that `X-Forwarded-Proto: https` is forwarded so that clone URLs are correct.",{"title":149,"body":150},"Create the First Repository and Wire Up a CI Runner","Run `docker compose up -d`, then go to `https:\u002F\u002Fgit.yourdomain.com`. The installation wizard opens on first connection: set the database type (PostgreSQL), confirm the domain, and create the admin account. For CI, install `act_runner` on the same VPS or a second lightweight VPS, register it under Gitea's site administration (Administration > Runners), and place your first `.gitea\u002Fworkflows\u002Fci.yml` file in a repository.",{"type":136,"title":152,"steps":153},"Deploy Gitea (or GitLab) on a VPS with Docker",[154,157,160,163,166,169],{"title":155,"body":156},"Create the Volumes and the Network","Prepare `mkdir -p \u002Fsrv\u002Fgitea\u002F{data,db}` and a dedicated Docker network `docker network create forge`. Separating data\u002Fdb makes it easier to back up the code and the database independently.",{"title":158,"body":159},"Define the docker-compose.yml","For Gitea, declare the `gitea\u002Fgitea` service plus a `postgres`, mount the volumes, and expose HTTP port `3000` and Git SSH port `2222` locally. For GitLab, use `gitlab\u002Fgitlab-ce` with the `GITLAB_OMNIBUS_CONFIG` variable to set the `external_url`.",{"title":161,"body":162},"Launch and Finish the Installation","Run `docker compose up -d`. Gitea shows an installation wizard on first connection (fill in the database type and the domain); GitLab takes several minutes to initialize — retrieve the generated root password from the logs.",{"title":164,"body":165},"Configure the Reverse Proxy and SSL","Proxy git.yourdomain.com to the forge's HTTP port with Caddy or Nginx to obtain a Let's Encrypt certificate. Make sure to pass the correct `X-Forwarded-Proto` so that the HTTPS clone URLs are correct.",{"title":167,"body":168},"Enable Git SSH","Map the container's SSH port to a VPS port (e.g. 2222) and set up your keys. Set `SSH_DOMAIN` so that the `git clone` commands suggested by the interface are accurate.",{"title":170,"body":171},"Wire Up CI\u002FCD","Register a runner: Gitea Actions (compatible with GitHub Actions syntax) or a Docker GitLab Runner. Limit its resources and isolate it in its own container so that a heavy job does not bring the forge down.",{"type":58,"title":173,"headers":174,"rows":176},"Gitea vs GitLab CE: Comparison Table",[61,175,63],"Gitea",[177,180,181,182,183,184,186,187],[178,71,179],"Recommended minimum RAM","4 to 8 GB",[74,75,76],[78,79,80],[86,87,88],[102,103,104],[106,107,185],"Advanced (epics depending on edition)",[110,111,112],[114,188,189],"Modest VPS, small\u002Fmedium team","Complete DevOps platform",{"type":191,"title":192,"body":193},"tip","Gitea + Woodpecker CI: the Lightweight Stack for Teams of 1 to 15","If Gitea Actions feels too close to the GitHub ecosystem and you want a strictly self-hosted CI with no dependency on `act`, look at Woodpecker CI (a fork of Drone CI, Apache 2.0 license). It integrates natively with Gitea via OAuth, runs on Docker, and its YAML syntax is more explicit than GitHub Actions. The Gitea + Woodpecker CI stack uses under 300 MB of RAM at idle on a 2 GB VPS — versus a minimum of 4 GB for GitLab CE with CI enabled. For teams of 1 to 15 developers with standard pipelines (build, test, Docker push, SSH deployment), this is the most frugal self-hosted combination available.",{"type":191,"body":195},"On GitLab, avoid the OOM-kill on a small VPS by reducing concurrency: set `puma['worker_processes']` to 2 and `sidekiq['max_concurrency']` to 10 in the omnibus config. If RAM remains a problem, look at Forgejo (a community fork of Gitea), which keeps the lightness while covering 90% of a team's needs, registry and Actions included.","Your Git Forge, Ready to Clone","A ServOrbit Cloud VPS with a Docker template lets you deploy Gitea or GitLab with a reverse proxy, SSL, and a CI runner in a few steps, right from your client area.","Launch My Forge on a VPS","\u002Fvps-cloud",[201,220,239],{"id":202,"slug":203,"slugs":204,"title":208,"excerpt":209,"readTime":210,"views":18,"isPinned":19,"noindex":19,"publishedAt":211,"updatedAt":212,"category":213,"categories":214,"featuredImage":29,"bgImage":30,"posterImage":216,"relatedSolution":217},4,"coolify-vs-dokploy-which-tool-to-deploy-on-a-vps",{"fr":205,"en":203,"ar":206,"es":207},"coolify-vs-dokploy","coolify-مقابل-dokploy-أي-أداة-للنشر-على-vps","coolify-vs-dokploy-que-herramienta-elegir-para-su-vps","Coolify vs Dokploy: which tool to deploy on a VPS?","Coolify or Dokploy for your VPS? A binary comparison on idle RAM, license, templates and multi-node support to make the right choice once and for all.",7,"2026-06-07T00:00:00+00:00","2026-09-18T02:05:20+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[215],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fcoolify-vs-dokploy-poster.svg",{"categorySlug":218,"appSlug":219},"application-deployment-devops","coolify",{"id":221,"slug":222,"slugs":223,"title":227,"excerpt":228,"readTime":229,"views":18,"isPinned":19,"noindex":19,"publishedAt":230,"updatedAt":231,"category":232,"categories":233,"featuredImage":29,"bgImage":30,"posterImage":235,"relatedSolution":236},93,"n8n-vs-node-red-which-self-hosted-automation-tool-to-choose",{"fr":224,"en":222,"ar":225,"es":226},"n8n-vs-node-red","n8n-مقابل-node-red-أي-أداة-أتمتة-مستضافة-ذاتيا-تختار","n8n-vs-node-red-que-automatizacion-self-hosted-elegir","n8n vs Node-RED: which self-hosted automation tool to choose?","n8n or Node-RED for your VPS workflows? Complete technical comparison: license, server resources, IoT vs SaaS use cases, migration steps, and Docker deployment.",9,"2026-03-19T00:00:00+00:00","2026-11-08T01:13:15+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[234],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fn8n-vs-node-red-poster.svg",{"categorySlug":237,"appSlug":238},"automation-workflows","n8n",{"id":240,"slug":241,"slugs":242,"title":246,"excerpt":247,"readTime":248,"views":249,"isPinned":19,"noindex":19,"publishedAt":250,"updatedAt":251,"category":252,"categories":253,"featuredImage":29,"bgImage":30,"posterImage":255,"relatedSolution":256},94,"supabase-vs-appwrite-which-self-hosted-backend-for-your-vps",{"fr":243,"en":241,"ar":244,"es":245},"supabase-vs-appwrite","supabase-مقابل-appwrite-أي-خلفية-مستضافة-ذاتيا-لـ-vps","supabase-vs-appwrite-que-backend-self-hosted-para-vps","Supabase vs Appwrite: Choosing Your Open-Source BaaS on a VPS","Full comparison of Supabase vs Appwrite: Docker deployment, RAM requirements, auth, serverless functions, realtime, and a decision guide for your VPS.",14,0,"2026-03-18T00:00:00+00:00","2026-11-08T01:13:16+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[254],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fsupabase-vs-appwrite-poster.svg",{"categorySlug":257,"appSlug":258},"databases","supabase",true,1794270407114]