Back to Articles

DevOps otvorenog koda u velikom obimu: GitLab na sopstvenoj infrastrukturi

laptop screen showing code in a busy room

Izvorni kod je jedina imovina za koju se skoro sve tehnološke firme slažu da je kritična, i istovremeno ona koju većina njih drži na infrastrukturi koju ne poseduje, u jurisdikciji koju nije birala, po ugovoru koji nije pažljivo pročitala. Najčešće je taj aranžman sasvim u redu. Ipak vredi znati koliko košta alternativa, jer GitLab već više od decenije čini stvarno izvodljivim da ceo razvojni ciklus hostujete sami.

To je uz to i proizvod čiji je besplatni nivo darežljiviji, a operativni teret teži nego što većina očekuje. Oboje treba razumeti pre nego što se opredelite, pa ovaj vodič govori o tome šta GitLab u sopstvenoj režiji zapravo jeste, šta besplatni nivo stvarno daje i koja tri operativna problema nose najveći deo muke.

Šta je GitLab

Nije Git hosting sa prikačenim dodacima. Rails aplikacija, PostgreSQL, Redis, Gitaly za smeštaj repozitorijuma, Sidekiq za pozadinske poslove i registar kontejnera, spakovani zajedno kao jedan sistem koji pokriva kontrolu verzija, pregled koda, praćenje zadataka, CI/CD, registre paketa i kontejnera, bezbednosno skeniranje i isporuku.

Ta širina je ceo argument. GitHub plus Actions plus Dependabot plus registar paketa plus alat za praćenje projekta daju uporediv skup funkcija, sastavljen od delova. GitLab je jedna aplikacija sa jednim modelom dozvola i jednom bazom. To je ili tačno ono što želite ili više nego što vam treba, a šta od to dvoje zavisi od toga koliki deo ciklusa zaista nameravate da vodite na jednom mestu.

Arhitektonski važna činjenica ista je kao kod sopstvenog hostovanja analitike sa Matomom, marketing automatizacije sa Mautic-om ili timske komunikacije sa Mattermost-om: radi tamo gde ga postavite. Vaši repozitorijumi, vaši CI logovi, vaši artefakti, vaša baza.

Slika licenciranja, rečeno bez uvijanja

Ovo zaista zbunjuje i zaslužuje preciznost, jer zabuna ide u smeru suprotnom od očekivanog.

Postoje dve distribucije izvornog koda. Community Edition je pod MIT licencom. Enterprise Edition ima sopstvenu, restriktivniju licencu koja pokriva direktorijum ee/ u repozitorijumu. Do ovde zvuči kao uobičajeni open core model.

Deo koji iznenađuje: Linux paket koji instalira skoro svako jeste build Enterprise Edition-a, a bez unetog licencnog ključa radi kao nivo Free i ponaša se kao Community Edition. Dakle ne pokrećete distribuciju pod MIT licencom, osim ako niste namerno izabrali CE paket. U praksi to retko igra ulogu, ali ako je vaš razlog za sopstveno hostovanje stroga politika otvorenog koda a ne kontrola nad podacima, onda igra veliku ulogu, a skoro niko to ne proveri.

Komercijalni nivoi su Free, Premium po 29 dolara po korisniku mesečno uz godišnje plaćanje, i Ultimate po ceni na upit. Premium dodaje napredni CI/CD, bolje upravljanje projektima i prioritetnu podršku. Ultimate dodaje paket bezbednosti i usklađenosti: testiranje bezbednosti aplikacija, bezbednost lanca snabdevanja, skeniranje zavisnosti. Oba plaćena nivoa sada uključuju GitLab Credits za AI funkcije, 12 dolara po korisniku mesečno na Premium-u i 24 na Ultimate-u.

A evo činjenice koja većini timova menja račun, i tačne suprotnosti situaciji sa Mattermost-om: nivo Free u sopstvenoj režiji nema ograničenje broja korisnika. Granica od pet korisnika o kojoj su ljudi čuli odnosi se samo na privatne grupe na GitLab.com. Samostalno hostovan Free daje vam neograničeno korisnika, kontrolu verzija, CI/CD i registre, a skladište i runnere donosite sami. Organizacija od sto inženjera može u celosti da radi na njemu.

Ono čega se odričete jeste bezbednosno skeniranje, izveštavanje o usklađenosti, napredna pravila odobravanja i podrška. Ako potpadate pod akt o sajber otpornosti i želite skeniranje zavisnosti i generisanje SBOM-a ugrađeno u pipeline umesto sastavljeno od odvojenih alata, to je razgovor o Ultimate-u. Za većinu ostalih timova Free nije probni period. To je održivo trajno rešenje.

Postavljanje

Mala instalacija

GitLab je teži nego što izgleda. Dokumentovana osnova za jedan čvor je 8 vCPU i 16 GB RAM-a, i za razliku od većine proizvođačkih minimuma taj broj je pošten, a ne optimističan. Može se stisnuti u 8 GB, ali se to oseti, a swap je bolje isključiti, jer swapovanje ove aplikacije gore je nego da memorije nema.

PostgreSQL je jedina podržana baza. Koja verzija, zavisi od vaše verzije GitLab-a: 17.x traži PostgreSQL od 14.14 do 16.x, 18.x traži od 16.5 do 17.x, a 19.x traži 17.x. Preporučuje se Redis 7.2, minimum je 7.0, a Valkey 7.2 služi kao zamena. Samo samostalne instance, jer klasterske i serverless varijante Redisa nisu podržane.

Instalirajte Linux paketom. Postoje Helm chart-ovi, Operator, Docker slike i put iz izvornog koda, ali Linux paket je najzreliji izbor i upravo na njemu radi sam GitLab.com. Donosi PostgreSQL, Redis i Sidekiq, pa jedna mašina i jedan konfiguracioni fajl daju instancu koja radi.

# /etc/gitlab/gitlab.rb
external_url 'https://git.example.com'

# Let's Encrypt, on by default when external_url is https
letsencrypt['enable'] = true
letsencrypt['contact_emails'] = ['ops@example.com']

# Keep Puma and Sidekiq honest on a small box
puma['worker_processes'] = 2
sidekiq['max_concurrency'] = 9

# Move artefacts and uploads off local disk early
gitlab_rails['object_store']['enabled'] = true
gitlab_rails['object_store']['connection'] = {
  'provider' => 'AWS',
  'region' => 'eu-central-1',
  'aws_access_key_id' => 'REPLACE_ME',
  'aws_secret_access_key' => 'REPLACE_ME'
}

Jedan gitlab-ctl reconfigure kasnije imate instancu. Postavite external_url ispravno iz prve, jer ta vrednost završi ugrađena u adrese za kloniranje, webhook-ove i adrese registra.

Produkciona instalacija

GitLab objavljuje referentne arhitekture od 1.000 do 50.000 korisnika i vredi ih pročitati čak i ako nijednu nećete primeniti, jer pokazuju koja komponenta prva postaje usko grlo.

Savet koji štedi najviše novca dolazi od samog GitLab-a i govori protiv složenosti: ispod 3.000 korisnika preporučuju čvrstu strategiju rezervnih kopija umesto visoke dostupnosti. Dokumentacija je tu neuobičajeno iskrena i primećuje da pristup zasnovan na kopijama jeste sporiji za oporavak, ali znači mnogo manju arhitekturu i niže troškove održavanja. Iznad 3.000 korisnika, ili tamo gde ispad stvarno zaustavlja firmu, visoka dostupnost postaje preporuka.

Shvatite to ozbiljno. Jedan dobro obezbeđen čvor sa isprobanim vraćanjem u praksi je pouzdaniji od upola shvaćenog HA klastera, i znatno jeftiniji.

Artefakte, otpremljene fajlove, LFS objekte i slike registra prebacite u objektno skladište od početka. Isto rezonovanje kao svuda: čuva čvor bez stanja, kopije upotrebljivim, a migraciju mogućom.

Tri stvari koje krenu naopako

Sve gore stoji u dokumentaciji. Ovo su one koje proizvode incidente.

Vaša rezervna kopija ne sadrži ono što je dešifruje

Ovo je najvažniji pasus u tekstu.

gitlab-backup create obuhvata podosta: bazu, repozitorijume, LFS objekte, CI artefakte i logove poslova, slike registra, wiki, otpremljene fajlove, sadržaj Pages-a, Terraform stanje, snippet-e. Ono što ne obuhvata jeste konfiguracioni direktorijum, a naročito /etc/gitlab/gitlab-secrets.json.

Taj fajl drži ključ za šifrovanje baze. Dokumentacija je oštra po pitanju posledice: ako ga izgubite, GitLab aplikacija neće moći da dešifruje nijednu šifrovanu vrednost u bazi. To znači CI/CD promenljive, tokene, tajne za dvofaktorsku prijavu i akreditive integracija. Imali biste kopiju koja se vraća u instancu nesposobnu da pročita sopstvene tajne.

Izostavljeni su i /etc/gitlab/gitlab.rb, TLS ključevi i sertifikati, SSH host ključevi, kao i sadržaj objektnog skladišta kada je ono podešeno. Ovo poslednje pogađa upravo one koji su arhitektonski uradili pravu stvar, pa pretpostavili da kopija to pokriva.

Zato pravite kopiju /etc/gitlab odvojeno, držite je negde drugde a ne uz arhivu, jer je ključ te arhive, a onda celu stvar vratite na mašinu za jednokratnu upotrebu i proverite da li možete da se prijavite i pročitate CI promenljivu. Neisprobana kopija nije kopija, a kod GitLab-a neisprobano vraćanje obično je pokvareno.

Ne možete se nadograditi u jednom skoku

GitLab ima obavezne međustanice pri nadogradnji, i to nije savet. Ne možete ih preskočiti. Od 17.5 stanice su predvidive i padaju na x.2, x.5, x.8 i x.11, pa prelazak sa 18.0 na 19.2 znači prolazak kroz 18.2, 18.5, 18.8, 18.11 i 19.0.

Uz svaku stanicu idu pozadinske migracije koje moraju u potpunosti da se završe pre nego što krenete dalje. Pokretanje naredne nadogradnje dok migracije još rade način je na koji instance završe u stanjima koja raspetljava samo podrška. Na velikoj instanci te migracije mogu trajati satima.

Dve praktične posledice. Nadograđujte redovno, jer godina odloženih nadogradnji jeste vikend uzastopnih. I uvek uzmite poslednje zakrpljeno izdanje ciljne manje verzije umesto prvog, što dokumentacija izričito kaže. GitLab održava alat koji vam izračuna put nadogradnje i bolje ga je koristiti nego računati sam.

Pravi trošak je u runnerima

GitLab server ne izvršava vaš CI. GitLab Runner je zasebna komponenta koju instalirate, podešavate i plaćate, na infrastrukturi koju obezbeđujete vi. Free u sopstvenoj režiji ne uključuje nijedan minut računanja, jer nema uključene računarske snage koja bi se dala: donosite sopstvene mašine.

Obično je to dobar posao, jer namenski runner košta manje po minutu od hostovanog CI čim obim postane ozbiljan, a svakom build-u možete dati hardver koji mu treba. Ali to je stvaran infrastrukturni posao. Donosićete odluke o executor-ima, da li shell, Docker ili Kubernetes; o autoskaliranju, da runneri ne bi radili prazno u tri ujutru; i o kešu, koji je razlika između pipeline-a od četiri i onog od četrnaest minuta.

Uvrstite flotu runnera kao zasebnu stavku budžeta. Timovi koji trošak sopstvenog hostovanja procenjuju gledajući samo GitLab čvor grdno se potcene, pa manjak otkriju kao red poslova na čekanju.

Odlazak sa GitHub-a

GitHub uvoznik je dobar, znatno bolji od većine migracionih alata proizvođača, i prenosi podatke repozitorijuma, grane, LFS objekte, zadatke i pull request-ove sa komentarima, pregledima i odgovorima u diskusijama, wiki stranice, izdanja i priloge, oznake, prekretnice, pravila zaštite grana i saradnike sa mapiranjem uloga.

Dokumentovane praznine treba isplanirati. Organizacije i grupe ne prelaze, pa strukturu grupa projektujete sami umesto da je nasledite, što je obično poboljšanje. GitHub Actions tokovi ne konvertuju se u GitLab CI. Komentari na pull request-ove stariji od 2017. stižu kao odvojene niti zbog ograničenja GitHub API-ja, a repozitorijumi sa preko otprilike 30.000 komentara traže uključivanje alternativnog metoda uvoza komentara.

Pošto GitHub koristi # i za zadatke i za pull request-ove, a GitLab ih razlikuje, deo unakrsnih referenci neće se razrešiti. Ništa se ne gubi, ali linkovi u starim diskusijama mogu pokazivati na pogrešnu stvar.

Planirajte prepisivanje CI-ja kao pravi projekat, jer to i jeste. Sve ostalo je uvoz koji pokrenete i proverite.

Evropski ugao

Za firme koje posluju u Evropi na trošak se nadovezuje dimenzija usklađenosti. Izvorni kod, pipeline-i za build i artefakti spadaju u najosetljivije što tehnološka firma poseduje, a gde se nalaze sve češće je pitanje koje vam postave, a ne ono na koje sami birate da odgovorite.

Sopstveno hostovanje ih smešta unutar granice koju kontrolišete, što u jednom potezu pojednostavljuje analizu prenosa po GDPR-u i pitanja lanca snabdevanja iz NIS2, i to je isti argument suvereniteta oko kog je izgrađen Cloud and AI Development Act.

Oštrija veza je akt o sajber otpornosti. Ko softver plasira na tržište EU, trebaće mu popis zavisnosti, postupanje sa ranjivostima i koordinisani proces objavljivanja. Te obaveze se ispunjavaju u pipeline-u za build a ne u dokumentu, a imati pipeline, registar i skeniranje u jednom sistemu kojim sami upravljate čini proizvodnju dokaza znatno manje mučnom nego njihovo sakupljanje od četiri dobavljača.

Kada ne vredi

Ako vas je manje od dvadeset inženjera, nema regulatornog pritiska ni jakih stavova o tome gde kod živi, uzmite SaaS. GitLab.com i GitHub su oba odlična, a operativni posao koštaće više od pretplate.

Ako je vaša organizacija duboko u ekosistemu GitHub-a, pošteno prebrojte šta biste izgubili. Actions, marketplace i sama poznatost platforme svakom kandidatu kog zaposlite jesu stvarne vrednosti, i odgovor nije automatski da GitLab pobeđuje.

A ako niko neće preuzeti instancu, nemojte ni počinjati. GitLab nagrađuje onoga ko ga krpi, prati flotu runnera i isprobava vraćanje. Bez te osobe pretvara se u nezakrpljenu kutiju koja drži vašu najvredniju imovinu, a to je gore od SaaS-a koji ste hteli da napustite.

Kako možemo da pomognemo

Postavljamo i održavamo sopstveno hostovanu razvojnu infrastrukturu za firme koje posluju u Evropi, uključujući i delove koje niko ne voli: sekvence nadogradnje kroz obavezne međustanice, flote runnera koje se kako treba autoskaliraju, migracije na objektno skladište i šeme kopija koje su zaista i vraćane.

Ako želite GitLab instancu pošteno dimenzionisanu, migraciju sa GitHub-a koju planira neko ko je prepisivanje CI-ja već radio, ili proveru da li bi vaša trenutna kopija preživela sudar sa stvarnim kvarom, pišite na office@c9group.dev. Više o našem radu na infrastrukturi na stranici o optimizaciji AWS troškova.

Ako sastavljate ceo sopstveno hostovani stek, isto rezonovanje važi za analitiku, marketing automatizaciju i timsku komunikaciju.


Objavljeno: 8. avgust 2026. Kategorije: DevOps, Otvoreni kod, Privatnost