Skip to content

MX10-AC2N/CrabDeck

Repository files navigation

CrabDeck 🦀

..⚠️.. WORK IN PROGRESS ..⚠️..

CI/CD Docker Rust License

Dashboard de gestion Docker et monitoring système pour homeserver
Interface web moderne avec gestion complète des conteneurs, surveillance système en temps réel, logs et contrôle d'alimentation.

Développé en Rust 🦀, containerisé, léger et performant.


✨ Fonctionnalités

🐳 Gestion Docker

  • Liste des conteneurs : Vue d'ensemble de tous vos conteneurs (actifs et arrêtés)
  • Actions en un clic : Start, Stop, Restart
  • Logs en temps réel : Consultation et suivi des logs de conteneurs
  • Création de conteneurs : Interface pour déployer de nouveaux services
  • Surveillance des états : Monitoring visuel avec codes couleur

📊 Monitoring Système

  • CPU & RAM : Graphiques circulaires avec pourcentages en temps réel
  • Disques : Liste de tous vos disques avec usage et capacité
  • Uptime & Load Average : Informations de disponibilité système
  • Services systemd : Statut des services essentiels (Docker, SSH, CUPS, etc.)
  • Rafraîchissement automatique : Mise à jour toutes les 5-10 secondes

🔧 Administration Système

  • Logs système : Accès direct à journalctl depuis l'interface
  • Mises à jour : Vérification des paquets disponibles (Debian/Ubuntu)
  • Redémarrage/Extinction : Contrôle de l'alimentation avec confirmation
  • Interface responsive : Optimisée pour mobile, tablette et desktop

⚡ Performances

  • Binaire statique : Compilé avec musl pour une portabilité maximale
  • Image Docker légère : ~50-60 MB seulement (Alpine Linux)
  • Build multi-arch : Support natif AMD64 et ARM64
  • API REST rapide : Axum + Tokio pour des performances optimales

🚀 Installation

📦 Avec Docker Compose (recommandé)

Créez un fichier docker-compose.yml :

version: '3.8'

services:
  crabdeck:
    image: ghcr.io/mx10-ac2n/crabdeck:latest
    container_name: crabdeck
    restart: unless-stopped
    
    ports:
      - "3125:3000"
    
    volumes:
      # Docker
      - /var/run/docker.sock:/var/run/docker.sock:rw
      
      # Système
      - /:/host:ro
      - /run/systemd:/run/systemd:ro
      - /var/log/journal:/var/log/journal:ro
      - /run/log/journal:/run/log/journal:ro
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
    
    environment:
      - RUST_LOG=info,crabdeck=debug
      - HOST_ROOT=/host
    
    user: "0:0"
    pid: "host"
    
    cap_add:
      - SYS_BOOT
      - SYS_ADMIN
      - SYS_PTRACE
      - AUDIT_READ
      - SYSLOG
    
    security_opt:
      - apparmor:unconfined

Puis lancez :

docker-compose up -d

Accédez à http://localhost:3125


🐋 Avec Docker CLI

docker run -d \
  --name crabdeck \
  -p 3125:3000 \
  -v /var/run/docker.sock:/var/run/docker.sock:rw \
  -v /:/host:ro \
  -v /run/systemd:/run/systemd:ro \
  -v /var/log/journal:/var/log/journal:ro \
  -v /proc:/host/proc:ro \
  -v /sys:/host/sys:ro \
  -e RUST_LOG=info,crabdeck=debug \
  -e HOST_ROOT=/host \
  --user 0:0 \
  --pid host \
  --cap-add SYS_BOOT \
  --cap-add SYS_ADMIN \
  --cap-add SYS_PTRACE \
  --cap-add AUDIT_READ \
  --cap-add SYSLOG \
  --security-opt apparmor:unconfined \
  --restart unless-stopped \
  ghcr.io/mx10-ac2n/crabdeck:latest

🔨 Build local

# Cloner le repository
git clone https://github.com/MX10-AC2N/CrabDeck.git
cd CrabDeck

# Builder l'image
docker build \
  --build-arg TARGET_TRIPLE=x86_64-unknown-linux-musl \
  -t crabdeck:latest \
  .

# Lancer (utilisez le docker-compose.yml ci-dessus en changeant l'image)

🔐 Permissions et Sécurité

CrabDeck nécessite des permissions étendues pour accéder au système hôte :

Permission Usage Nécessaire pour
user: "0:0" Exécution en root Accès socket Docker et systemd
pid: "host" Partage PID namespace Commandes systemctl/journalctl
SYS_ADMIN Capabilities admin nsenter et accès système
SYS_BOOT Reboot/shutdown Contrôle de l'alimentation
SYS_PTRACE Accès namespaces Communication inter-processus
Volumes système Lecture fichiers hôte Stats disques, logs, services

⚠️ Avertissement de Sécurité

Ces permissions donnent un accès privilégié complet au système hôte.

Utilisez CrabDeck uniquement :

  • ✅ Sur des réseaux locaux privés (homelab, LAN)
  • ✅ Derrière un firewall
  • ✅ Sur des machines que vous contrôlez entièrement

N'exposez PAS CrabDeck :

  • ❌ Sur Internet sans authentification
  • ❌ Sur des réseaux non sécurisés
  • ❌ Sur des serveurs de production critiques

💡 Prochainement : Authentification JWT et mode lecture seule


📡 API REST

Endpoints Système

# Stats système
curl http://localhost:3125/api/system

# Liste des disques
curl http://localhost:3125/api/disks

# Services systemd
curl http://localhost:3125/api/services

# Logs système (journalctl)
curl http://localhost:3125/api/system/logs?lines=100

# Vérifier mises à jour
curl http://localhost:3125/api/updates

# Redémarrer (POST)
curl -X POST http://localhost:3125/api/reboot

# Éteindre (POST)
curl -X POST http://localhost:3125/api/shutdown

Endpoints Docker

# Liste des conteneurs
curl http://localhost:3125/api/containers

# Démarrer un conteneur
curl -X POST http://localhost:3125/api/containers/{id}/start

# Arrêter un conteneur
curl -X POST http://localhost:3125/api/containers/{id}/stop

# Redémarrer un conteneur
curl -X POST http://localhost:3125/api/containers/{id}/restart

# Logs d'un conteneur
curl http://localhost:3125/api/containers/{id}/logs?lines=500

🛠️ Développement

Prérequis

  • Rust 1.83+ (stable et nightly)
  • Docker & Docker Compose
  • Git

Setup local

# Cloner le projet
git clone https://github.com/MX10-AC2N/CrabDeck.git
cd CrabDeck

# Installer les dépendances
cargo build

# Lancer en mode développement
cargo run

# Tests
cargo test

# Linting strict
cargo clippy -- -D warnings

# Formatage (nightly)
cargo +nightly fmt

Structure du projet

CrabDeck/
├── .github/
│   └── workflows/          # CI/CD pipelines
│       ├── ci.yml          # Orchestrateur principal
│       ├── ci-test.yml     # Tests et formatage
│       ├── ci-amd64.yml    # Build AMD64
│       └── ci-arm64.yml    # Build ARM64
├── src/
│   ├── main.rs             # Point d'entrée Axum
│   ├── handlers/
│   │   ├── mod.rs
│   │   ├── containers.rs   # Gestion Docker
│   │   ├── system.rs       # Monitoring système
│   │   └── auth.rs         # Auth (placeholder)
│   ├── models.rs           # Structures de données
│   └── utils.rs            # Utilitaires
├── web/
│   └── index.html          # Interface utilisateur
├── Cargo.toml              # Dépendances Rust
├── Dockerfile              # Build multi-stage optimisé
└── README.md

🗺️ Roadmap

✅ Phase 1 - MVP (Terminé)

  • API REST complète
  • Gestion des conteneurs Docker
  • Monitoring système temps réel
  • Interface web moderne
  • Logs conteneurs et système
  • CI/CD GitHub Actions
  • Images Docker multi-arch

🚧 Phase 2 - Améliorations (En cours)

  • Authentification (JWT/Basic Auth)
  • Mode lecture seule
  • Graphiques historiques (CPU/RAM)
  • Notifications (Discord, Email)
  • Docker Compose UI
  • Gestion des images Docker
  • Support multi-langue (i18n)

🔮 Phase 3 - Features Avancées

  • File explorer intégré
  • Éditeur de fichiers
  • Terminal web (xterm.js)
  • Backup/Restore conteneurs
  • Multi-host (gestion de plusieurs serveurs)
  • Métriques Prometheus
  • Mode dark/light personnalisable

🤝 Contribuer

Les contributions sont les bienvenues !

Comment contribuer

  1. Fork le projet
  2. Créez votre branche (git checkout -b feature/SuperFeature)
  3. Committez vos changements (git commit -m 'feat: ajout SuperFeature')
  4. Pushez vers la branche (git push origin feature/SuperFeature)
  5. Ouvrez une Pull Request

Règles de contribution

  • ✅ Code formaté avec cargo +nightly fmt
  • ✅ Passe cargo clippy -- -D warnings
  • ✅ Tests inclus si applicable
  • ✅ Documentation à jour

📝 License

Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.


🙏 Remerciements

Technologies utilisées

Inspirations


📸 Screenshots

🚧 Screenshots à venir


💬 Support


Fait avec ❤️ et 🦀 par MX10-AC2N

⭐ Si vous aimez ce projet, n'hésitez pas à lui donner une étoile !

About

Docker Master pour homeserver – Gestion complète en Rust 🦀

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors