Skip to content

APT Repo Manager β€” Documentation Francaise

Gestionnaire de depot APT prive avec interface web React, API REST FastAPI, controle d'acces par roles (RBAC) et securite integree (ClamAV, Grype, SBOM).


Table des matieres

  1. Architecture
  2. Fonctionnalites
  3. Prerequis
  4. Installation
  5. Identifiants par defaut
  6. Structure des repertoires
  7. Roles et acces
  8. Securite
  9. Autres documents

Architecture

                        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                        β”‚         Navigateur / Browser     β”‚
                        β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                 β”‚           β”‚
               β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”   β”Œβ”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
               β”‚  frontend :3003    β”‚   β”‚   backend :8000         β”‚
               β”‚  (Nginx + React)   β”‚   β”‚   (FastAPI + JWT auth)  β”‚
               β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                                     β”‚
                        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                        β”‚           apt-repo :80                   β”‚
                        β”‚    (Nginx + reprepro, sans auth)         β”‚
                        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                                         β”‚
               β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”
               β”‚                   Volumes Docker                  β”‚
               β”‚  repos/pool      repos/manifests  repos/audit    β”‚
               β”‚  repos/auth      repos/security   repos/gnupg    β”‚
               β”‚  repos/logs      repos/staging                   β”‚
               β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Clients APT (apt-get, apt) β†’ apt-repo:80  (acces public, lecture seule)

Fonctionnalites

Fonctionnalite Disponible
Interface web React + Tailwind OK
API REST FastAPI OK
Authentification locale SQLite/bcrypt OK
Authentification LDAP / Active Directory OK
Jetons JWT (duree 60 min) OK
Jetons API pour pipelines CI/CD OK
5 roles RBAC (admin, maintainer, uploader, auditor, reader) OK
Scan antivirus ClamAV a chaque upload OK
Scan CVE Grype (politique : block / review / warn) OK
Export SBOM CycloneDX v1.5 OK
Export SBOM SPDX v2.3 OK
Journal d'audit immuable (JSONL) OK
Statistiques de telechargement (analyse logs Nginx) OK
Import depuis sources APT amont OK
Dashboard de surveillance OK

Prerequis

Composant Version minimale Recommande
Docker 24.0 Derniere stable
Docker Compose v2 (plugin) Derniere stable
RAM 2 Go 4 Go
Espace disque 20 Go 50 Go+
OS Debian 11 / Ubuntu 22.04 Ubuntu 24.04 LTS

Note : Docker Compose v2 est installe en tant que plugin (docker compose), et non en tant que binaire independant (docker-compose).


Installation

Etape 1 β€” Cloner le depot

git clone <repo-url> repod
cd repod

Etape 2 β€” Configurer le fichier d'environnement principal

cp .env.example .env

Editer .env et renseigner au minimum :

PUBLIC_URL=http://votre-domaine.example.com
REACT_APP_API_URL=http://votre-domaine.example.com:8000

Etape 3 β€” Configurer le backend

cp backend.env.example backend.env

Editer backend.env et renseigner au minimum :

# OBLIGATOIRE en production β€” generer une valeur aleatoire longue
JWT_SECRET_KEY=changez-cette-valeur-par-une-cle-aleatoire-longue

# Identifiants admin initiaux
ADMIN_USERNAME=admin
ADMIN_PASSWORD_HASH=<hash bcrypt de votre mot de passe>

Pour generer un hash bcrypt :

docker run --rm python:3.10-slim python3 -c \
  "from passlib.context import CryptContext; print(CryptContext(schemes=['bcrypt']).hash('VotreMotDePasse1!'))"

Etape 4 β€” Lancer les conteneurs (production)

docker compose -f docker-compose.yaml up -d

Pour le mode developpement (Swagger UI actif, rechargement a chaud) :

docker compose -f docker-compose.yaml -f docker-compose.dev.yml up

Important : En production (ENV=production), l'interface Swagger UI (/docs) renvoie une erreur 404. Cela est intentionnel pour reduire la surface d'attaque.

Etape 5 β€” Verifier le deploiement

# Verifier l'etat des conteneurs
docker compose ps

# Verifier les journaux du backend
docker compose logs backend

# Tester l'API
curl http://localhost:8000/health

Identifiants par defaut

AVERTISSEMENT DE SECURITE

Les identifiants par defaut sont : - Nom d'utilisateur : admin - Mot de passe : Admin1234!

Ces identifiants DOIVENT imperativement etre changes avant toute mise en production. Ne jamais deployer avec les identifiants par defaut dans un environnement accessible au reseau.

Pour changer le mot de passe admin :

  1. Generer un nouveau hash bcrypt (voir etape 3 ci-dessus).
  2. Mettre a jour ADMIN_PASSWORD_HASH dans backend.env.
  3. Relancer le backend : docker compose restart backend.

Structure des repertoires

repos/
β”œβ”€β”€ pool/           # Paquets Debian (.deb) geres par reprepro
β”œβ”€β”€ manifests/      # Metadonnees des paquets (JSON par paquet)
β”‚   └── index.json  # Index global des paquets
β”œβ”€β”€ audit/          # Journal d'audit immuable (fichiers JSONL par date)
β”‚   └── YYYY-MM-DD.jsonl
β”œβ”€β”€ auth/           # Base de donnees utilisateurs SQLite et tokens API
β”œβ”€β”€ security/       # Resultats des scans Grype et ClamAV
β”œβ”€β”€ gnupg/          # Cles GPG pour la signature du depot
β”œβ”€β”€ logs/           # Journaux Nginx analyses pour les statistiques
└── staging/        # Zone temporaire pour les uploads avant validation

Roles et acces

Role Upload Gestion paquets Gestion utilisateurs Audit Lecture
admin Oui Oui Oui Oui Oui
maintainer Oui Oui Non Oui Oui
uploader Oui Non Non Non Oui
auditor Non Non Non Oui Oui
reader Non Non Non Non Oui

Securite

Analyse antivirus (ClamAV)

Chaque paquet uploade est analyse par ClamAV avant d'etre accepte dans le depot. Les paquets infectes sont rejetes et l'evenement est consigne dans le journal d'audit.

Analyse CVE (Grype)

Les paquets sont analyses par Grype. La politique est configurable :

  • block β€” Le paquet est refuse si des CVE sont detectees au-dessus du seuil.
  • review β€” Le paquet est mis en attente de validation manuelle.
  • warn β€” Le paquet est accepte mais un avertissement est emis.

Journal d'audit

Toutes les actions (uploads, suppressions, connexions, modifications de configuration) sont enregistrees dans des fichiers JSONL journaliers dans repos/audit/. Ces fichiers sont en ajout seul (append-only) et ne peuvent pas etre modifies via l'interface.


Autres documents

Document Lien
Documentation en anglais Accueil
README racine (bilingue) Accueil