Table of Contents

Gitea - ghid de inițiere

Gitea este un serviciu Git ușor, găzduit de dumneavoastră, cu CI/CD integrat (Gitea Actions), urmărirea problemelor, wiki și registru de pachete – o alternativă privată și rapidă la GitHub, pe care o controlați complet. Suportă pull request-uri cu code review, organizații și echipe, editarea codului în interfața web, webhook-uri și migrare ușoară din GitHub sau GitLab. Gitea este scrisă în Go și folosește resurse minime – rulează fluid chiar și pe servere mici. Serverul vine cu Gitea complet instalată și configurată cu contul de administrator și parola specificate la comandă. Este inclus un runner CI/CD integrat, gata de folosit.


Pasul 1 – Verificați funcționarea Gitea

Adresa IP și parola root a serverului sunt afișate pe pagina Server Details din panoul clientului. Gitea este disponibilă imediat după crearea serverului. Deschideți https://your.server.ip în browser pentru a verifica funcționarea.

Autentificare Gitea:

  • Nume de utilizator: admin
  • Parolă: parola de administrator introdusă la comandă

Implicit, Gitea folosește un certificat SSL autosemnat. Browserul va afișa un avertisment de securitate – faceți clic pe Avansat > Continuați (sau Accept the Risk în Firefox). Este normal și sigur. Puteți instala ulterior un certificat Let’s Encrypt adecvat (vedeți Pasul 4).

Dacă ați plasat serverul în spatele unui router VyOS într-o rețea privată, configurați redirecționarea porturilor (22, 80 și 443) pentru ca Gitea să fie accesibilă de pe internet sau conectați-vă prin VPN și accesați Gitea pe IP-ul privat al serverului.


Pasul 2 – Crearea primului depozit

Faceți clic pe butonul + din colțul din dreapta sus și selectați New Repository. Completați numele depozitului și faceți clic pe Create Repository.

Clonați depozitul prin HTTPS sau SSH:

# HTTPS
git clone https://your.server.ip/admin/my-repo.git

# SSH (add your public key in Settings > SSH/GPG Keys first)
git clone git@your.server.ip:admin/my-repo.git

Git prin SSH folosește portul 22 (portul SSH standard). Gitea administrează automat cheile SSH – când adăugați o cheie publică în interfața web, aceasta devine disponibilă imediat pentru operațiunile Git.


Pasul 3 – Configurarea unui domeniu propriu

Pentru a folosi Gitea pe domeniul propriu în locul IP-ului serverului:

  1. Creați o înregistrare DNS A care indică domeniul către IP-ul serverului:
    Tip Nume Valoare
    Agityour.server.ip
  2. Conectați-vă la server prin SSH și editați configurația Gitea:
    nano /etc/gitea/app.ini
    Actualizați aceste linii din secțiunea [server] :
    DOMAIN     = git.yourdomain.com
    SSH_DOMAIN = git.yourdomain.com
    ROOT_URL   = https://git.yourdomain.com/
  3. Actualizați Nginx și reporniți serviciile:
    sed -i "s/server_name .*/server_name git.yourdomain.com;/g" /etc/nginx/sites-available/gitea
    systemctl restart gitea
    systemctl reload nginx

Modificările DNS durează de obicei câteva minute, dar pot dura până la 24 de ore. Verificați pe dnschecker.org.


Pasul 4 – Activarea SSL Let’s Encrypt

După ce domeniul indică serverul, înlocuiți certificatul autosemnat cu un certificat gratuit Let’s Encrypt. Conectați-vă prin SSH și rulați:

/opt/setup/get-ssl.sh git.yourdomain.com

Scriptul verifică DNS-ul, obține un certificat, configurează Nginx pentru HTTPS și actualizează automat configurația Gitea. Certificatul se reînnoiește automat.

Asigurați-vă că înregistrarea A a domeniului s-a propagat înainte de a rula scriptul. SSL este opțional – Gitea funcționează bine și cu certificatul autosemnat.


Pasul 5 – CI/CD cu Gitea Actions

Instanța Gitea vine cu un runner CI/CD integrat (Gitea Actions). Este compatibil cu sintaxa workflow GitHub Actions. Pentru a-l folosi, creați un fișier workflow în depozit:

.gitea/workflows/build.yaml

Exemplu de workflow:

name: Build
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: echo "Hello from Gitea Actions!"

Runner-ul execută joburile direct pe gazdă (Docker nu este necesar). Verificați starea runner-ului:

systemctl status act_runner

După instalare

Fail2Ban – protecție împotriva atacurilor brute-force

Serverul dumneavoastră include Fail2Ban preconfigurat pentru a proteja atât SSH, cât și interfața web Gitea împotriva atacurilor brute-force.

Regulă Încercări maxime Durata blocării
SSH5 autentificări eșuate1 oră
Autentificare web Gitea5 autentificări eșuate1 oră

Comenzi utile:

# Check banned IPs
fail2ban-client status sshd
fail2ban-client status gitea

# Unban an IP
fail2ban-client set sshd unbanip 1.2.3.4
fail2ban-client set gitea unbanip 1.2.3.4

Dacă vă blocați accidental, conectați-vă prin consola VNC din panoul clientului și deblocați-vă IP-ul.

Actualizări

Gitea este instalată ca binar independent și nu se actualizează automat. Pentru actualizare manuală, descărcați versiunea nouă și înlocuiți binarul:

# Download new version (replace X.Y.Z with the desired version)
wget -O /tmp/gitea https://dl.gitea.com/gitea/X.Y.Z/gitea-X.Y.Z-linux-amd64
chmod +x /tmp/gitea

# Replace binary and restart
systemctl stop gitea
cp /tmp/gitea /usr/local/bin/gitea
systemctl start gitea

Actualizările sistemului de operare pot fi aplicate prin SSH:

apt update && apt upgrade -y

Datele de acces la server

Datele de acces de administrator Gitea sunt stocate în /root/.gitea_credentials. Le vedeți și când vă conectați prin SSH (afișate în mesajul de bun venit).

Administrarea serviciilor

# Service status and control
systemctl status gitea          # check Gitea status
systemctl restart gitea         # restart Gitea
systemctl status nginx          # check Nginx (reverse proxy)
systemctl reload nginx          # reload Nginx after config change
systemctl status act_runner     # check CI/CD runner

# Gitea admin CLI
sudo -u git gitea admin user list --config /etc/gitea/app.ini
sudo -u git gitea admin user change-password --username admin --password "newpass" --config /etc/gitea/app.ini

# Database backup (SQLite)
cp /var/lib/gitea/data/gitea.db /root/gitea-backup-$(date +%Y%m%d).db

# Logs
tail -f /var/lib/gitea/log/gitea.log     # Gitea application log
journalctl -u gitea -f                    # systemd journal
tail -f /var/log/nginx/error.log          # Nginx errors

Software inclus

Componentă Detalii
Ubuntu24.04 LTS
Gitea1.25 (SQLite, Git LFS)
NginxProxy invers cu SSL
Gitea Actions RunnerCI/CD integrat (executor pe gazdă)
CertbotLet’s Encrypt SSL
Fail2BanProtecție brute-force pentru SSH și Gitea

Depanare

Problemă Soluție
Browserul afișează un avertisment SSL Este normal cu certificatul implicit autosemnat. Faceți clic pe „Advanced” și continuați. Pentru o soluție permanentă, configurați un domeniu și rulați /opt/setup/get-ssl.sh
Interfața web Gitea nu poate fi accesată Verificarea serviciilor: systemctl status gitea nginx. Asigurați-vă că folosiți https:// (nu http)
Git push/pull prin SSH eșuează Adăugați cheia SSH publică în Gitea (Settings > SSH/GPG Keys). Folosiți git@ în URL-ul de clonare, nu root@
Workflow-ul Gitea Actions nu rulează Verificați runner-ul: systemctl status act_runner. Fișierul workflow trebuie să fie în directorul .gitea/workflows/ (nu .github/workflows/)
Certificatul Let’s Encrypt a eșuat Asigurați-vă că înregistrarea DNS A indică IP-ul serverului și s-a propagat. Verificați pe dnschecker.org. Portul 80 trebuie să fie accesibil de pe internet pentru verificarea HTTP-01
Ați uitat parola de administrator Conectați-vă prin SSH și verificați /root/.gitea_credentialssau resetați: sudo -u git gitea admin user change-password --username admin --password "newpass" --config /etc/gitea/app.ini
Blocat de Fail2Ban Deblocați-vă IP-ul prin consola VNC din panoul clientului: fail2ban-client set sshd unbanip 1.2.3.4
Ați uitat parola root Resetați-o prin consola VNC din panoul clientului