Files
abonnel-www/f008f509-2cad-437f-9850-7b39ec37262a/index.md
T

7.3 KiB

Gitea : installation sur Debian 13 avec PostgreSQL

Gitea est une forge Git légère, auto-hébergée, écrite en Go. Elle offre une alternative sobre à GitLab pour héberger ses dépôts, ses tickets et ses pull requests sur une machine modeste. Ce guide décrit une installation complète sur Debian 13, avec PostgreSQL comme base de données et un reverse-proxy (Nginx dans l'exemple) pour exposer Gitea derrière HTTPS sur git.abonnel.fr.


1. Pré-requis

  • Un serveur Debian 13 à jour :

    sudo apt update && sudo apt upgrade -y
    
  • Les paquets de base :

    sudo apt install -y git ca-certificates wget
    
  • Un enregistrement DNS A (ou AAAA) pour git.abonnel.fr pointant vers le serveur.

  • Les ports 80 et 443 ouverts (pour le reverse-proxy et Let's Encrypt).


2. PostgreSQL : installation et création de la base

  1. Installer PostgreSQL :

    sudo apt install -y postgresql postgresql-contrib
    
  2. Créer la base et l'utilisateur Gitea. On ouvre d'abord un shell postgres, puis psql :

    sudo -i -u postgres
    
    psql
    CREATE ROLE gitea WITH LOGIN PASSWORD 'votre_mot_de_passe_sécurisé';
    CREATE DATABASE gitea WITH OWNER gitea ENCODING 'UTF8' TEMPLATE template0;
    \q
    
    exit
    

    Ces étapes suivent la documentation officielle Gitea pour PostgreSQL. (Gitea Documentation)

  3. Vérifier que le service tourne :

    sudo systemctl status postgresql
    

Si Gitea et PostgreSQL sont sur la même machine, la configuration par défaut (connexions locales via 127.0.0.1) suffit. Sinon, ajustez pg_hba.conf et postgresql.conf.


3. Installation de Gitea

3.1 Utilisateur système

Gitea s'exécute sous un utilisateur dédié, sans mot de passe :

sudo adduser --system --shell /bin/bash --gecos 'Git Version Control' \
  --group --disabled-password --home /home/git git

(Gitea Documentation)

3.2 Arborescence et permissions

sudo mkdir -p /var/lib/gitea/{custom,data,log}
sudo chown -R git:git /var/lib/gitea/
sudo chmod -R 750 /var/lib/gitea/
sudo mkdir /etc/gitea
sudo chown root:git /etc/gitea
sudo chmod 770 /etc/gitea

Le 770 sur /etc/gitea permet à l'assistant web d'écrire app.ini pendant l'installation. On le resserrera ensuite. (Gitea Documentation)

3.3 Récupérer le binaire

Vérifiez la dernière version sur dl.gitea.com avant de télécharger :

wget -O gitea https://dl.gitea.com/gitea/1.24.7/gitea-1.24.7-linux-amd64
chmod +x gitea
sudo mv gitea /usr/local/bin/gitea

Pensez à vérifier la signature GPG ou la somme .sha256 publiée à côté du binaire. (Gitea Documentation)

3.4 Service systemd

Créez /etc/systemd/system/gitea.service :

[Unit]
Description=Gitea (Git with a cup of tea)
After=network.target postgresql.service
Requires=postgresql.service

[Service]
User=git
Group=git
WorkingDirectory=/var/lib/gitea/
ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini
Restart=always
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea

[Install]
WantedBy=multi-user.target

Puis :

sudo systemctl daemon-reload
sudo systemctl enable --now gitea
sudo systemctl status gitea

(Gitea Documentation)


4. Assistant d'installation web

Avant de brancher le proxy HTTPS, terminez l'install initiale en HTTP direct : ouvrez http://votre-serveur:3000 et complétez l'assistant.

  • Type de base : PostgreSQL
  • Host : 127.0.0.1:5432
  • Database : gitea
  • Username : gitea
  • Password : celui défini en section 2
  • Base URL : https://git.abonnel.fr/ (l'URL publique finale, même si l'on est encore en HTTP)
  • Créez le compte administrateur.

L'assistant écrit /etc/gitea/app.ini. Vous pouvez ensuite resserrer les permissions :

sudo chmod 750 /etc/gitea
sudo chmod 640 /etc/gitea/app.ini

(James R. S. Kemp Git)


5. Reverse-proxy et HTTPS

5.1 Nginx

/etc/nginx/sites-available/git.abonnel.fr :

server {
    listen 80;
    server_name git.abonnel.fr;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name git.abonnel.fr;

    ssl_certificate     /etc/letsencrypt/live/git.abonnel.fr/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/git.abonnel.fr/privkey.pem;

    client_max_body_size 512M;   # pour les gros push

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host              $host;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Activez le site, testez la conf, rechargez :

sudo ln -s /etc/nginx/sites-available/git.abonnel.fr /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

Pour Traefik ou un autre proxy, le principe reste identique : router git.abonnel.fr vers 127.0.0.1:3000 et terminer TLS au niveau du proxy.

5.2 Certificat Let's Encrypt

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d git.abonnel.fr

Certbot ajoute lui-même la directive SSL et programme le renouvellement.


6. Ajustements dans app.ini

Quelques réglages utiles dans /etc/gitea/app.ini une fois le proxy en place :

[server]
DOMAIN           = git.abonnel.fr
ROOT_URL         = https://git.abonnel.fr/
HTTP_ADDR        = 127.0.0.1
HTTP_PORT        = 3000
START_SSH_SERVER = false
SSH_PORT         = 22

[database]
DB_TYPE  = postgres
HOST     = 127.0.0.1:5432
NAME     = gitea
USER     = gitea
PASSWD   = votre_mot_de_passe
SSL_MODE = disable

[service]
DISABLE_REGISTRATION              = true
REQUIRE_SIGNIN_VIEW               = false

HTTP_ADDR = 127.0.0.1 empêche Gitea d'écouter sur l'extérieur — seul Nginx le voit. Désactiver l'inscription publique évite la création de comptes par des inconnus.

Redémarrez après modification :

sudo systemctl restart gitea

7. Sécurité et entretien

  • Pare-feu : n'exposez que 80, 443 et 22 (SSH) ; gardez 3000 et 5432 en local.
  • Sauvegardes : dump quotidien de la base (pg_dump gitea) + archive de /var/lib/gitea/data (dépôts, attachments, LFS).
  • Logs : /var/lib/gitea/log/ et journalctl -u gitea.
  • Mises à jour : remplacer le binaire /usr/local/bin/gitea par une version récente, puis systemctl restart gitea. PostgreSQL suit les mises à jour Debian.
  • SSH Git : si vous utilisez le port 22 du système pour git@git.abonnel.fr:..., ajoutez les clés publiques dans Gitea (qui les pousse dans ~git/.ssh/authorized_keys). Pensez à fail2ban pour limiter le brute-force SSH.