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:
- Creați o înregistrare DNS A care indică domeniul către IP-ul serverului:
Tip Nume Valoare A git your.server.ip - Conectați-vă la server prin SSH și editați configurația Gitea:
Actualizați aceste linii din secțiuneanano /etc/gitea/app.ini[server]:DOMAIN = git.yourdomain.com SSH_DOMAIN = git.yourdomain.com ROOT_URL = https://git.yourdomain.com/ - 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 |
|---|---|---|
| SSH | 5 autentificări eșuate | 1 oră |
| Autentificare web Gitea | 5 autentificări eșuate | 1 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 |
|---|---|
| Ubuntu | 24.04 LTS |
| Gitea | 1.25 (SQLite, Git LFS) |
| Nginx | Proxy invers cu SSL |
| Gitea Actions Runner | CI/CD integrat (executor pe gazdă) |
| Certbot | Let’s Encrypt SSL |
| Fail2Ban | Protecț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 |