Ports et services

Référence des ports réseau utilisés par gitrust et ses dépendances.


Tableau des ports

Port Protocole Service Processus Binding par défaut Configurable
4000 TCP/HTTP Interface web + API REST gitrust (axum) SERVER_HOST:SERVER_PORT Oui
2222 TCP/SSH Serveur Git SSH gitrust (Russh) SSH_LISTEN_ADDR:SSH_PORT Oui
5432 TCP PostgreSQL postgres 127.0.0.1:5432 Via PG config
6379 TCP Redis (sessions) redis-server 127.0.0.1:6379 Via Redis config
25 TCP/SMTP Envoi e-mail sortant (non chiffré) Client SMTP gitrust Outbound seulement Via SMTP_PORT
465 TCP/SMTPS Envoi e-mail sortant (TLS natif) Client SMTP gitrust Outbound seulement Via SMTP_PORT
587 TCP/SMTP+STARTTLS Envoi e-mail sortant (recommandé) Client SMTP gitrust Outbound seulement Via SMTP_PORT

Détail par service

Port 4000 — Interface web et API REST (HTTP)

gitrust expose son interface web HTMX et son API REST v1 sur ce port via le framework axum.

Configuration :

SERVER_HOST=127.0.0.1   # derrière un reverse-proxy (recommandé en prod)
SERVER_PORT=4000

En production : gitrust écoute sur 127.0.0.1:4000 et un reverse-proxy (Nginx, Caddy, Traefik) termine TLS et proxifie vers ce port. Les clients n'accèdent jamais directement au port 4000.

Règle firewall (si reverse-proxy sur la même machine) :

# Aucune ouverture nécessaire depuis l'extérieur — le proxy écoute sur 443
# Bloquer le port 4000 depuis l'extérieur :
sudo ufw deny 4000/tcp

En développement : gitrust peut écouter sur 0.0.0.0:4000 pour un accès depuis le LAN.


Port 2222 — Serveur Git SSH (Russh)

gitrust intègre son propre serveur SSH via la bibliothèque Russh — ce n'est pas le démon sshd du système d'exploitation. Les deux peuvent coexister sans conflit.

Configuration :

SSH_PORT=2222
SSH_LISTEN_ADDR=0.0.0.0    # accès direct
# ou
SSH_LISTEN_ADDR=127.0.0.1  # derrière nginx stream proxy

Accès direct (recommandé pour la simplicité) : ouvrir le port 2222 dans le firewall.

sudo ufw allow 2222/tcp

URL de clone : ssh://git@VOTRE_DOMAINE:2222/owner/repo.git

Via nginx stream proxy (port 22) : si vous souhaitez que les utilisateurs clonent sur le port standard 22, configurez nginx comme proxy de flux TCP :

# Dans nginx.conf, section stream (hors section http)
stream {
    upstream gitrust_ssh {
        server 127.0.0.1:2222;
    }
    server {
        listen 22;
        proxy_pass gitrust_ssh;
    }
}

Dans ce cas, SSH_LISTEN_ADDR=127.0.0.1 et SSH_PUBLIC_HOST=VOTRE_DOMAINE (sans port dans les URLs de clone).

Attention : si le port 22 est déjà utilisé par sshd pour l'administration du serveur, déplacez sshd sur un autre port avant de configurer le proxy nginx.

Règle firewall :

sudo ufw allow 2222/tcp   # accès direct
# ou
sudo ufw allow 22/tcp     # si proxy nginx stream


Port 5432 — PostgreSQL

PostgreSQL doit toujours écouter sur 127.0.0.1 (ou un réseau privé), jamais sur 0.0.0.0 en production.

Vérification :

sudo -u postgres psql -c "SHOW listen_addresses;"
# Attendu : localhost ou 127.0.0.1

Règle firewall : aucune ouverture vers l'extérieur.

# Bloquer explicitement depuis l'extérieur (si ufw)
sudo ufw deny 5432/tcp

Pour une architecture multi-serveurs (gitrust et PostgreSQL sur des machines distinctes), utilisez un réseau privé ou un tunnel SSH — jamais une exposition directe sur Internet.


Port 6379 — Redis (sessions multi-instances)

Redis n'est nécessaire que si SESSION_BACKEND=redis dans .env. Par défaut, gitrust utilise PostgreSQL pour les sessions.

Configuration Redis (dans /etc/redis/redis.conf) :

bind 127.0.0.1
requirepass VOTRE_MOT_DE_PASSE_REDIS

Règle firewall : aucune ouverture vers l'extérieur.


Ports SMTP sortants (25, 465, 587)

Ces ports sont utilisés en sortant uniquement : gitrust se connecte au serveur SMTP configuré dans SMTP_HOST. Gitrust n'héberge pas de serveur SMTP.

Port Usage Recommandation
25 SMTP non chiffré Interdit en production, souvent bloqué par les FAI et hébergeurs
465 SMTPS (TLS natif) Recommandé avec SMTP_USE_TLS=true
587 SMTP + STARTTLS Recommandé avec SMTP_USE_STARTTLS=true

Aucune règle firewall entrante nécessaire pour SMTP.


Architecture réseau par topologie

Développement local

Navigateur → http://localhost:4000  (direct, pas de proxy)
Git client  → ssh://localhost:2222

Tous les ports en 0.0.0.0, COOKIE_SECURE=false, APP_DEBUG=true.

Production mono-machine (recommandé)

Internet → :443 (HTTPS) → nginx → 127.0.0.1:4000 (gitrust HTTP)
Internet → :2222 (SSH)  → gitrust directement
Internet ← SMTP sortant → smtp.prestataire.com:587
SERVER_HOST=127.0.0.1
SERVER_PORT=4000
SSH_LISTEN_ADDR=0.0.0.0
SSH_PORT=2222

Règles firewall :

sudo ufw allow 443/tcp   # HTTPS via nginx
sudo ufw allow 2222/tcp  # Git SSH
sudo ufw deny 4000/tcp   # Masqué derrière nginx
sudo ufw deny 5432/tcp   # PostgreSQL interne uniquement

Production avec proxy SSH sur port 22

Internet → :22 (SSH) → nginx stream → 127.0.0.1:2222 (gitrust SSH)
SSH_LISTEN_ADDR=127.0.0.1
SSH_PORT=2222
SSH_PUBLIC_HOST=gitrust.votre-domaine.com

URL de clone : git@gitrust.votre-domaine.com:owner/repo.git


Pour aller plus loin