Ukratko

Najvažnije iz članka

  • Postavite vlastiti privatni Git repozitorij koristeći Gitea i Docker za maksimalnu kontrolu, sigurnost i neovisnost.
  • Koristite Docker Compose za jednostavnu orkestraciju Gitea-e i PostgreSQL baze podataka u izoliranim kontejnerima.
  • Konfigurirajte Gitea web sučelje i osigurajte SSH pristup repozitorijima preko namjenskog porta.
  • Osigurajte instalaciju implementacijom HTTPS-a s reverznim proxyjem, firewall pravilima i redovitim sigurnosnim kopijama.
Sadržaj članka
  1. Uvod: Zašto vlastiti Git poslužitelj?
  2. Zašto Gitea?
  3. Zašto Docker?
  4. Preduvjeti
  5. Korak 1: Priprema radnog okruženja
  6. Korak 2: Izrada Docker Compose datoteke
  7. Korak 3: Pokretanje servisa
  8. Korak 4: Prva konfiguracija Gitea-e
  9. Sekcija "Opće postavke aplikacije":
  10. Korak 5: Kreiranje administratorskog računa
  11. Korak 6: Testiranje SSH pristupa
  12. Dodatne sigurnosne preporuke
  13. Zaključak

Uvod: Zašto vlastiti Git poslužitelj?

U današnjem svijetu softverskog inženjerstva, sustavi za kontrolu verzija (Version Control Systems – VCS) poput Gita postali su nezamjenjivi. Iako su platforme poput GitHub-a, GitLab-a i Bitbucket-a popularne i nude mnoge pogodnosti, postoje situacije kada je postavljanje vlastitog, privatnog Git poslužitelja ne samo poželjno, već i nužno. Razlozi za to mogu biti višestruki:

  • Sigurnost i privatnost podataka: Tvrtke koje rade s osjetljivim podacima ili imaju stroge regulatorne zahtjeve često preferiraju držanje svih izvornih kodova unutar vlastite infrastrukture, pod potpunom kontrolom.
  • Neovisnost o vanjskim servisima: Ovisnost o trećim stranama nosi rizike. Prekidi u radu, promjene u uvjetima korištenja ili čak potencijalno gašenje servisa mogu poremetiti poslovanje. Vlastiti hosting osigurava kontinuitet.
  • Prilagodba i kontrola: Vlastiti poslužitelj omogućuje potpunu kontrolu nad resursima, konfiguracijom i integracijama, prilagođavajući ga specifičnim potrebama tima ili projekta.
  • Troškovi: Za veće timove ili projekte, dugoročni troškovi hostinga na komercijalnim platformama mogu postati značajni. Vlastiti poslužitelj, posebno na postojećoj infrastrukturi, može biti ekonomičnije rješenje.

Zašto Gitea?

Među opcijama za samostalno hostane Git poslužitelje, Gitea se ističe. Gitea je lagana, brza i jednostavna za instalaciju i održavanje alternativa većim platformama poput GitLab-a. Napisana u programskom jeziku Go, Gitea nudi bogat skup značajki, uključujući:

  • Upravljanje korisnicima i grupama
  • SSH i HTTP/S pristup repozitorijima
  • Issue tracker (praćenje problema)
  • Wiki
  • Code review funkcionalnost
  • Webhookove za integraciju s CI/CD alatima
  • Podršku za razne baze podataka (SQLite, MySQL, PostgreSQL, MSSQL)

Njezina niska potrošnja resursa čini je idealnom za rad na manjim poslužiteljima, virtualnim strojevima, pa čak i Raspberry Pi-u.

Zašto Docker?

Docker je platforma koja omogućuje automatizaciju implementacije, skaliranja i upravljanja aplikacijama unutar kontejnera. Korištenje Dockera za postavljanje Gitea-e donosi brojne prednosti:

  • Izolacija: Aplikacija i njezine ovisnosti su izolirane od host sustava i drugih aplikacija, sprječavajući konflikte.
  • Prenosivost: Docker kontejneri su prenosivi i mogu se lako pokrenuti na bilo kojem sustavu s instaliranim Dockerom, osiguravajući konzistentnost između razvojnih, testnih i produkcijskih okruženja.
  • Jednostavnost implementacije: Korištenje Docker Compose-a omogućuje definiranje cijelog stoga aplikacija (Gitea + baza podataka) u jednoj datoteci, pojednostavljujući postavljanje i upravljanje.
  • Skalabilnost: Lako je skalirati aplikaciju povećanjem broja kontejnera ili premještanjem na snažniji host.
  • Čišćenje: Uklanjanje aplikacije je jednostavno – samo obrišite kontejner i volumene, bez ostavljanja tragova na host sustavu.

Ovaj tutorial provest će vas korak po korak kroz proces postavljanja Gitea-e unutar Docker kontejnera, koristeći Docker Compose za orkestraciju Gitea instance i pridružene baze podataka.

Preduvjeti

Prije nego što započnemo, osigurajte da imate sljedeće:

  • Linux poslužitelj (ili macOS/Windows s Docker Desktopom): Preporučuje se stabilna distribucija Linuxa (npr. Ubuntu Server, CentOS) za produkcijske postavke.
  • Instaliran Docker: Slijedite službene upute za instalaciju Dockera za vaš operativni sustav. Provjerite instalaciju naredbom docker --version.
  • Instaliran Docker Compose: Instalirajte Docker Compose, također prateći službenu dokumentaciju. Provjerite instalaciju naredbom docker compose version.
  • Pristup putem SSH-a: Ako radite na udaljenom poslužitelju.
  • Osnovno razumijevanje Gita i Dockera: Iako ćemo sve objasniti, osnovno poznavanje ovih tehnologija će vam pomoći.

Korak 1: Priprema radnog okruženja

Prvo, kreirajmo direktorij za našu Gitea instalaciju i navigirajmo do njega. Ovo će biti mjesto gdje ćemo spremiti sve konfiguracijske datoteke i podatke.

mkdir gitea-data
cd gitea-data

Unutar ovog direktorija spremat ćemo docker-compose.yml datoteku i sve volumene podataka. Preporučuje se stvaranje poddirektorija za spremanje podataka, kako bi se odvojili od konfiguracijske datoteke.

mkdir -p ./gitea
mkdir -p ./postgres
  • ./gitea: Ovdje će Gitea pohranjivati svoje podatke (repozitorije, konfiguracijske datoteke, index)
  • ./postgres: Ovdje će PostgreSQL baza podataka pohranjivati svoje podatke

Korak 2: Izrada Docker Compose datoteke

Sada ćemo kreirati docker-compose.yml datoteku koja će definirati naša dva servisa: Gitea i PostgreSQL bazu podataka. Koristit ćemo PostgreSQL jer je robusniji za produkcijske postavke od SQLite-a, iako Gitea podržava i SQLite za jednostavnije scenarije.

Otvorite docker-compose.yml datoteku u omiljenom tekstualnom editoru (npr. nano docker-compose.yml):

version: "3"

services:
  gitea:
    image: gitea/gitea:latest
    container_name: gitea
    restart: always
    ports:
      - "3000:3000" # HTTP/S web sučelje
      - "2222:22"  # SSH Git pristup
    volumes:
      - ./gitea:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    environment:
      - DB_TYPE=postgres
      - DB_HOST=postgres:5432
      - DB_NAME=gitea
      - DB_USER=gitea
      - DB_PASS=your_strong_password_here # PROMIJENITE OVO!
      - GITEA__database__HOST=postgres:5432
      - GITEA__database__NAME=gitea
      - GITEA__database__USER=gitea
      - GITEA__database__PASS=your_strong_password_here # PROMIJENITE OVO!
    depends_on:
      - postgres
    networks:
      - gitea-network

  postgres:
    image: postgres:13
    container_name: gitea-postgres
    restart: always
    environment:
      - POSTGRES_USER=gitea
      - POSTGRES_PASSWORD=your_strong_password_here # PROMIJENITE OVO!
      - POSTGRES_DB=gitea
    volumes:
      - ./postgres:/var/lib/postgresql/data
    networks:
      - gitea-network

networks:
  gitea-network:
    driver: bridge

Objasnimo datoteku:

  • version: "3": Definira verziju Docker Compose datoteke.

  • services:: Sekcija za definiranje pojedinačnih servisa (kontejnera).

    • gitea servis:

      • image: gitea/gitea:latest: Koristimo službenu Gitea Docker sliku. :latest znači da ćemo dobiti najnoviju stabilnu verziju.
      • container_name: gitea: Ime našeg Gitea kontejnera.
      • restart: always: Kontejner će se automatski pokrenuti pri startu sustava ili nakon pada.
      • ports:: Mapiranje portova. 3000:3000 mapira port 3000 s hosta na port 3000 u kontejneru (Gitea web sučelje). 2222:22 mapira port 2222 s hosta na port 22 u kontejneru za SSH Git pristup. Važno: Standardni SSH port (22) često je zauzet host SSH poslužiteljem, stoga koristimo 2222. Ako želite koristiti 22, morat ćete prekonfigurirati host SSHd ili koristiti drugi port za host SSH.
      • volumes:: Mapiranje datotečnih sustava.
        • ./gitea:/data: Perzistentno pohranjujemo Gitea podatke u ./gitea na hostu. /data je standardni Gitea podatkovni direktorij unutar kontejnera.
        • /etc/timezone:/etc/timezone:ro i /etc/localtime:/etc/localtime:ro: Omogućuje Gitei da koristi vremensku zonu host sustava.
      • environment:: Varijable okruženja za konfiguraciju Gitea-e i PostgreSQL klijenta unutar kontejnera. Ključno je postaviti DB_PASS na jak i jedinstvenu lozinku.
      • depends_on: - postgres: Gitea kontejner ovisi o postgres kontejneru, što znači da će postgres biti pokrenut prije gitea.
      • networks: - gitea-network: Definira da će ovaj servis biti dio gitea-network mreže.
    • postgres servis:

      • image: postgres:13: Koristimo stabilnu PostgreSQL verziju 13.
      • container_name: gitea-postgres: Ime našeg PostgreSQL kontejnera.
      • restart: always: Kontejner će se automatski pokrenuti.
      • environment:: Varijable okruženja za konfiguraciju PostgreSQL baze podataka. Postavite POSTGRES_PASSWORD na istu jaku lozinku kao za Gitea servis.
      • volumes: - ./postgres:/var/lib/postgresql/data: Perzistentno pohranjujemo podatke PostgreSQL baze podataka u ./postgres na hostu.
      • networks: - gitea-network: Definira da će ovaj servis biti dio gitea-network mreže.
  • networks:: Definira prilagođenu Docker mrežu, osiguravajući da Gitea i PostgreSQL mogu komunicirati interno putem imena servisa.

NE ZABORAVITE PROMIJENITI your_strong_password_here u stvarnu, jaku lozinku!

Korak 3: Pokretanje servisa

Kada je docker-compose.yml datoteka spremna, možemo pokrenuti naše servise. Iz direktorija gdje se nalazi datoteka, izvršite:

docker compose up -d
  • up: Pokreće servise definirane u docker-compose.yml.
  • -d (detached mode): Pokreće kontejnere u pozadini, oslobađajući vaš terminal.

Docker će preuzeti potrebne slike (ako već nisu lokalno prisutne), stvoriti mrežu i pokrenuti oba kontejnera. Proces može potrajati nekoliko minuta, ovisno o brzini vaše internetske veze.

Možete provjeriti status kontejnera s:

docker compose ps

Trebali biste vidjeti gitea i gitea-postgres kontejnere s statusom Up.

Korak 4: Prva konfiguracija Gitea-e

Nakon što se kontejneri pokrenu, Gitea će biti dostupna putem web preglednika. Otvorite preglednik i navigirajte na http://your_server_ip:3000 (zamijenite your_server_ip s IP adresom ili domenom vašeg poslužitelja).

Vidjet ćete stranicu za prvu instalaciju Gitea-e. Većina polja trebala bi biti unaprijed popunjena na temelju varijabli okruženja koje smo definirali u docker-compose.yml. Pažljivo provjerite sljedeće:

  • Vrsta baze podataka: Postavi na PostgreSQL.
  • Host: postgres:5432 (ime servisa i port u Docker mreži).
  • Korisnik: gitea.
  • Lozinka: Vaša jaka lozinka koju ste postavili u docker-compose.yml.
  • Naziv baze podataka: gitea.

Sekcija "Opće postavke aplikacije":

  • Naziv repozitorija staze: /data/git/gitea-repositories (Ovo je put unutar kontejnera, a mapira se na ./gitea/git/gitea-repositories na hostu).
  • Staza za root loga: /data/gitea/log (Također unutar kontejnera).
  • URL Gitea osnovne URL-e: Postavite ovo na URL koji će vaši korisnici koristiti za pristup Gitea-i. Npr., http://your_server_ip:3000/ ili https://git.yourdomain.com/ ako koristite reverzni proxy i SSL.
  • Domena SSH poslužitelja: Ovo bi trebala biti IP adresa ili domena vašeg poslužitelja.
  • SSH port za slušanje: 22 (Ovo je port unutar Gitea kontejnera, iako host koristi 2222).
  • SSH port za Gitea: 2222 (Ovo je port na hostu koji se koristi za SSH pristup repozitorijima).

Važno: Ako planirate koristiti Gitea iza reverznog proxyja sa SSL-om (što se preporučuje za produkcijsku upotrebu), obavezno postavite Gitea baznu URL-u na https://git.yourdomain.com/ i opcionalno SSL-om obratite se na Giteu samo unutar proxyja. Za sada, možemo ostaviti http.

Nakon što ste pregledali i po potrebi prilagodili postavke, kliknite na gumb "Instaliraj Giteu".

Proces instalacije će potrajati kratko vrijeme. Nakon uspješne instalacije, bit ćete preusmjereni na stranicu za registraciju prvog administratorskog računa.

Korak 5: Kreiranje administratorskog računa

Na stranici za registraciju, popunite podatke za prvog korisnika. Ovaj korisnik će automatski postati administrator i imat će potpune privilegije nad Gitea instancom. Preporučuje se korištenje snažne lozinke.

Nakon registracije, automatski ćete biti prijavljeni u vašu novu Gitea instancu. Čestitamo! Vaš privatni Git poslužitelj je sada spreman za upotrebu.

Korak 6: Testiranje SSH pristupa

Da biste omogućili Git klijentima da kloniraju i guraju repozitorije putem SSH-a, potrebno je konfigurirati SSH ključeve. Ovo je ključni korak za sigurnu i automatsku autentifikaciju.

  1. Generirajte SSH ključ (ako ga nemate): Na vašem lokalnom računalu (klijentu), generirajte SSH ključ par (ako već niste) koristeći:

    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
    

    Pritisnite Enter za zadanu lokaciju (~/.ssh/id_rsa) i postavite passphrase ako želite dodatnu sigurnost.

  2. Kopirajte javni ključ: Ispišite sadržaj vašeg javnog ključa (~/.ssh/id_rsa.pub):

    cat ~/.ssh/id_rsa.pub
    

    Kopirajte cijeli izlaz.

  3. Dodajte javni ključ u Gitea: Prijavite se u Gitea kao administrator, idite na Postavke korisnika (Settings) -> SSH / GPG ključevi -> Dodajte ključ. Zalijepite cijeli sadržaj vašeg javnog ključa i dajte mu opisno ime.

  4. Testirajte SSH vezu: S vašeg lokalnog stroja, pokušajte se spojiti na Gitea server koristeći SSH. Budući da Gitea koristi port 2222 na hostu, dodajte ga u naredbu:

    ssh -p 2222 git@your_server_ip
    

    (zamijenite your_server_ip s vašom IP adresom ili domenom). Ako je sve ispravno konfigurirano, trebali biste vidjeti poruku dobrodošlice od Gitea-e, sličnu ovoj:

    Hi your_username! You've successfully authenticated, but Gitea does not provide shell access.
    If this is unexpected, please ensure that you have configured your shell correctly.
    

    Ovo potvrđuje da SSH pristup radi.

  5. Klonirajte repozitorij: Kreirajte testni repozitorij putem Gitea web sučelja. Kada je repozitorij kreiran, Gitea će vam dati SSH URL za kloniranje, koji će izgledati otprilike ovako: ssh://git@your_server_ip:2222/your_username/your_repo.git. Klonirajte ga lokalno:

    git clone ssh://git@your_server_ip:2222/your_username/your_repo.git
    

    Ako je kloniranje uspješno, vaš SSH pristup je ispravno postavljen.

Dodatne sigurnosne preporuke

  • HTTPS/SSL: Za produkcijsko okruženje, apsolutno je ključno koristiti HTTPS. To se obično postiže postavljanjem reverznog proxyja (npr. Nginx ili Caddy) ispred Gitea kontejnera. Reverzni proxy će upravljati SSL certifikatima (npr. Let's Encrypt) i preusmjeravati promet na Gitea kontejner putem HTTP-a. Detaljne upute za postavljanje reverznog proxyja nadilaze opseg ovog tutoriala, ali je to standardna praksa.
  • Firewall: Konfigurirajte firewall (npr. ufw na Linuxu) da dopustite samo potrebne portove (npr. 80, 443 za HTTP/S, 2222 za SSH Git, i po potrebi 22 za SSH pristup poslužitelju).
  • Sigurnosne kopije (Backup): Redovito pravite sigurnosne kopije vaših ./gitea i ./postgres direktorija. Budući da su to Docker volumeni, kopiranje tih direktorija je učinkovit način za backup.
  • Ažuriranja: Redovito ažurirajte Gitea Docker sliku i PostgreSQL sliku (docker compose pull pa docker compose up -d). Pratite Gitea i Docker Hub za sigurnosne zakrpe i nova izdanja.
  • Ograničite registraciju: Nakon što ste kreirali sve potrebne korisničke račune, razmislite o onemogućavanju samoregistracije kako biste spriječili neželjene korisnike. To se može učiniti u postavkama Gitea administratora. Idi na Admin Panel -> Konfiguracija web stranice -> Registracija korisnika i odznačite "Omogući registraciju korisnika".

Zaključak

Postavljanje privatnog Git poslužitelja s Gitea-om na Dockeru pruža snažno, pouzdano i sigurno rješenje za upravljanje izvornim kodom. Korištenjem Dockera, proces instalacije i održavanja je pojednostavljen, nudeći izolaciju, prenosivost i lakoću upravljanja. S ovim postavkama imate potpunu kontrolu nad vašim Git repozitorijima, što je idealno za timove koji zahtijevaju visoku razinu sigurnosti, privatnosti ili specifičnu prilagodbu.

Sada ste opremljeni vlastitim Git poslužiteljem i možete početi stvarati repozitorije, pozivati članove tima i uživati u svim prednostima samostalno hostanog rješenja!


Izvori i dodatno čitanje

  1. Službena Gitea dokumentacija
  2. Docker Compose pregled
  3. PostgreSQL Docker Hub Image
  4. Vodič za SSH ključeve
B
Uredništvo portala

BAJT

Službeni autorski profil redakcije portala BAJT. Sadržaj priprema i provjerava uredništvo portala.