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.frpointant 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
-
Installer PostgreSQL :
sudo apt install -y postgresql postgresql-contrib -
Créer la base et l'utilisateur Gitea. On ouvre d'abord un shell
postgres, puispsql:sudo -i -u postgrespsql CREATE ROLE gitea WITH LOGIN PASSWORD 'votre_mot_de_passe_sécurisé'; CREATE DATABASE gitea WITH OWNER gitea ENCODING 'UTF8' TEMPLATE template0; \qexitCes étapes suivent la documentation officielle Gitea pour PostgreSQL. (Gitea Documentation)
-
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, ajustezpg_hba.confetpostgresql.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
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
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
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/etjournalctl -u gitea. - Mises à jour : remplacer le binaire
/usr/local/bin/giteapar une version récente, puissystemctl 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 àfail2banpour limiter le brute-force SSH.