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
sshdpour l'administration du serveur, déplacezsshdsur 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
GitRust