Aller au contenu
Culture DevOps medium
🔐 Alerte sécurité — Incident supply chain Trivy : lire mon analyse de l'attaque

Installer Gitea sur Ubuntu 24.04 LTS

10 min de lecture

Gitea s’installe via un binaire statique unique : pas de Docker obligatoire, pas de dépendances complexes. Cette procédure installe Gitea 1.25.5 sur Ubuntu 24.04 LTS en moins de 15 minutes, avec un service systemd prêt pour la production.

Vous repartirez avec un serveur Git complet : dépôts, issues, pull requests, et Gitea Actions — le tout consommant moins de 500 Mo de RAM pour une petite équipe.

RessourceMinimum (test)Recommandé (équipe)
CPU1 vCPU2 vCPU
RAM512 Mo2 Go
Disque10 Go50 Go +
OSUbuntu 22.04 LTSUbuntu 24.04 LTS
  1. Installer les dépendances

    Gitea a besoin de Git pour gérer les dépôts. Git LFS est recommandé pour les projets utilisant des fichiers binaires volumineux.

    Fenêtre de terminal
    sudo apt update
    sudo apt install -y git git-lfs
    git --version # Doit afficher git version 2.x.x
  2. Télécharger et vérifier le binaire

    Gitea distribue un fichier SHA256 pour chaque binaire. La vérification garantit que le téléchargement n’est pas corrompu.

    Fenêtre de terminal
    cd /tmp
    # Télécharger le binaire et sa somme de contrôle
    wget -O gitea-1.25.5-linux-amd64 \
    https://github.com/go-gitea/gitea/releases/download/v1.25.5/gitea-1.25.5-linux-amd64
    wget -O gitea-1.25.5-linux-amd64.sha256 \
    https://github.com/go-gitea/gitea/releases/download/v1.25.5/gitea-1.25.5-linux-amd64.sha256
    # Vérifier l'intégrité
    sha256sum -c gitea-1.25.5-linux-amd64.sha256

    La commande doit afficher gitea-1.25.5-linux-amd64: OK. Si vous voyez FAILED, recommencez le téléchargement.

  3. Installer le binaire

    Fenêtre de terminal
    sudo cp /tmp/gitea-1.25.5-linux-amd64 /usr/local/bin/gitea
    sudo chmod 755 /usr/local/bin/gitea
    # Vérifier l'installation
    gitea --version
    # gitea version 1.25.5 built with GNU Make 4.3, go1.25.x : bindata, sqlite, sqlite_unlock_notify
  4. Créer l’utilisateur système

    Gitea s’exécute sous un utilisateur git dédié, sans shell de connexion interactif, pour limiter la surface d’attaque.

    Fenêtre de terminal
    sudo adduser --system --shell /bin/bash \
    --gecos 'Git Version Control' \
    --group --disabled-password \
    --home /home/git git
  5. Créer les répertoires

    La structure de répertoires sépare la configuration (dans /etc/) des données (dans /var/lib/), selon les conventions Unix.

    Fenêtre de terminal
    # Répertoire de données (propriétaire: git)
    sudo mkdir -p /var/lib/gitea
    sudo chown git:git /var/lib/gitea
    sudo chmod 750 /var/lib/gitea
    # Répertoire de configuration (root:git, Gitea doit pouvoir écrire au 1er démarrage)
    sudo mkdir -p /etc/gitea
    sudo chown root:git /etc/gitea
    sudo chmod 770 /etc/gitea
  6. Installer le service systemd

    Gitea fournit un fichier de service officiel adapté à la majorité des configurations.

    Fenêtre de terminal
    sudo wget -O /etc/systemd/system/gitea.service \
    https://raw.githubusercontent.com/go-gitea/gitea/main/contrib/systemd/gitea.service
    sudo systemctl daemon-reload
    sudo systemctl enable gitea.service
  7. Créer le fichier de configuration

    Au lieu de passer par le wizard web (qui requiert un token CSRF depuis Gitea 1.21+), créez directement app.ini avec les paramètres de votre environnement.

    Remplacez 192.168.1.10 par l’IP ou le nom de domaine de votre serveur.

    Fenêtre de terminal
    sudo tee /etc/gitea/app.ini > /dev/null << 'EOF'
    APP_NAME = Mon Gitea
    RUN_USER = git
    RUN_MODE = prod
    WORK_PATH = /var/lib/gitea
    [database]
    DB_TYPE = sqlite3
    PATH = /var/lib/gitea/data/gitea.db
    LOG_SQL = false
    [repository]
    ROOT = /var/lib/gitea/data/gitea-repositories
    [server]
    DOMAIN = 192.168.1.10
    HTTP_PORT = 3000
    ROOT_URL = http://192.168.1.10:3000/
    DISABLE_SSH = false
    SSH_PORT = 22
    LFS_START_SERVER = true
    APP_DATA_PATH = /var/lib/gitea/data
    [lfs]
    PATH = /var/lib/gitea/data/lfs
    [log]
    ROOT_PATH = /var/lib/gitea/log
    MODE = console
    LEVEL = info
    [security]
    INSTALL_LOCK = true
    PASSWORD_HASH_ALGO = pbkdf2
    [service]
    DISABLE_REGISTRATION = false
    NO_REPLY_ADDRESS = noreply@example.com
    [mailer]
    ENABLED = false
    [session]
    PROVIDER = file
    [indexer]
    ISSUE_INDEXER_TYPE = bleve
    EOF
    # Permissions avant le 1er démarrage (git doit pouvoir écrire les tokens)
    sudo chown root:git /etc/gitea/app.ini
    sudo chmod 660 /etc/gitea/app.ini
  8. Créer les répertoires de log et custom

    Ces répertoires sont nécessaires au démarrage de Gitea.

    Fenêtre de terminal
    sudo mkdir -p /var/lib/gitea/log /var/lib/gitea/custom
    sudo chown git:git /var/lib/gitea/log /var/lib/gitea/custom
    sudo chmod 750 /var/lib/gitea/log /var/lib/gitea/custom
  9. Démarrer Gitea

    Fenêtre de terminal
    sudo systemctl start gitea.service
    # Vérifier que le service est actif
    sudo systemctl is-active gitea.service
    # active
    # Attendre que Gitea soit prêt (quelques secondes)
    until curl -sf http://localhost:3000/ > /dev/null; do sleep 2; echo "Attente..."; done
    echo "Gitea prêt"
  10. Créer l’administrateur via CLI

    La création de l’admin en ligne de commande évite de passer par le formulaire web et permet l’automatisation.

    Fenêtre de terminal
    sudo -u git GITEA_WORK_DIR=/var/lib/gitea \
    gitea admin user create \
    --config /etc/gitea/app.ini \
    --username monadmin \
    --password 'MonMotDePasse!' \
    --email admin@example.com \
    --admin \
    --must-change-password=false
    # New user 'monadmin' has been successfully created!
  11. Durcir les permissions

    Après le premier démarrage réussi, Gitea a écrit les tokens dans app.ini. Réduisez les droits pour que le fichier ne soit plus modifiable par Gitea.

    Fenêtre de terminal
    sudo systemctl stop gitea.service
    sudo chmod 640 /etc/gitea/app.ini
    sudo chmod 750 /etc/gitea
    sudo systemctl start gitea.service
    sudo systemctl is-active gitea.service
    # active

Une fois l’installation terminée, validez l’ensemble :

Fenêtre de terminal
# 1. Version du binaire
gitea --version
# 2. Service systemd actif
systemctl is-active gitea.service
# 3. Port 3000 en écoute
ss -tlnp | grep :3000
# 4. Réponse HTTP
curl -o /dev/null -s -w "%{http_code}\n" http://localhost:3000/
# 200
# 5. API authentifiée
curl -sf -u monadmin:'MonMotDePasse!' http://localhost:3000/api/v1/user | python3 -m json.tool

Gitea ne démarre pas — permission denied sur app.ini

Gitea tente d’écrire les tokens de sécurité dans app.ini au premier démarrage. Si le fichier est en 640 à ce stade, le démarrage échoue. Solution :

Fenêtre de terminal
sudo systemctl stop gitea.service
sudo chmod 660 /etc/gitea/app.ini
sudo systemctl start gitea.service
# Vérifier que les tokens sont générés
sudo grep 'INTERNAL_TOKEN' /etc/gitea/app.ini
# Puis durcir
sudo chmod 640 /etc/gitea/app.ini
sudo systemctl restart gitea.service

L’interface web affiche la page d’installation malgré INSTALL_LOCK = true

Vérifiez que le fichier app.ini est bien lu par Gitea :

Fenêtre de terminal
sudo systemctl status gitea | grep 'ConfigFile'
sudo -u git gitea --config /etc/gitea/app.ini doctor check 2>&1 | head -10

Le répertoire de log est manquant

Fenêtre de terminal
sudo mkdir -p /var/lib/gitea/log
sudo chown git:git /var/lib/gitea/log
sudo systemctl restart gitea.service
  • Le binaire Gitea est statique : pas de gestionnaire de paquets, pas de dépendances runtime
  • INSTALL_LOCK = true dans app.ini désactive le wizard web — obligatoire en production
  • Gitea génère SECRET_KEY et INTERNAL_TOKEN lors du premier démarrage — le répertoire doit être inscriptible
  • L’admin se crée via gitea admin user create pour éviter le formulaire web
  • Passez en 640 / 750 après le premier démarrage pour durcir la configuration

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn