Chargement…
Mes favoris
Vos outils épinglés pour un accès rapide.
Mon profil
Gérer vos informations personnelles.
--
—
—
Changer mon mot de passe
Administration
Gestion des utilisateurs, outils et catégories.
Utilisateurs
Chargement…
Outils & Applications
Chargement…
Catégories
Chargement…
How to?
Guide complet d'utilisation de DC Cockpit.
🏠 Introduction
👥 Utilisateurs
🔧 Outils & liens
🚀 Déployer une app
★ Favoris
🔐 Authentification
🖥 Infrastructure
⚙ Exploitation
Introduction
Vue d'ensemble de DC Cockpit
1
Qu'est-ce que DC Cockpit ?
DC Cockpit est un portail intranet auto-hébergé pour l'équipe DataCenter. Il centralise tous vos outils internes et liens externes en un seul endroit, avec un système d'authentification unifié par JWT.
2
Architecture générale
Le portail repose sur un backend
Flask (Python) servi par Gunicorn, derrière un reverse proxy Nginx. Les données sont stockées dans une base SQLite locale. Les applications internes sont gérées par PM2.3
Deux types d'entrées
Le Hub contient deux types d'outils : les liens externes (GitHub, Notion, etc.) qui ouvrent simplement une URL dans un nouvel onglet, et les applications internes déployées sur la VM, accessibles via
/apps/slug et protégées par JWT.4
Deux rôles utilisateurs
Admin : accès complet — gestion des utilisateurs, des outils, déploiement d'applications, panneau d'administration et ce guide.
Utilisateur : accès au Hub et à ses favoris personnels uniquement.
Utilisateur : accès au Hub et à ses favoris personnels uniquement.
Premier accès : Le compte administrateur initial est communiqué par l'équipe DC Cockpit. Changez son mot de passe dès la première connexion.
Gestion des utilisateurs
Créer, gérer et supprimer des comptes
1
Créer un utilisateur
Dans le panneau Administration, cliquez sur Ajouter dans la section Utilisateurs. Renseignez le prénom, nom, email et choisissez un rôle. Le mot de passe peut être laissé vide : un mot de passe temporaire sera généré automatiquement et affiché une seule fois.
2
Rôles disponibles
Utilisateur : accès au Hub et favoris. Admin : accès complet incluant la gestion, le déploiement d'apps et ce guide. Il doit toujours rester au minimum un administrateur dans le système.
3
Réinitialiser un mot de passe
Dans la liste des utilisateurs, cliquez sur le bouton de réinitialisation (🔑) sur la ligne de l'utilisateur concerné. Un nouveau mot de passe temporaire sera généré et affiché. Transmettez-le à l'utilisateur par un canal sécurisé.
4
Supprimer un utilisateur
Cliquez sur le bouton ✕ sur la ligne de l'utilisateur. La suppression est immédiate et supprime aussi ses favoris. Il est impossible de supprimer son propre compte ou le dernier administrateur.
Attention : Il n'y a pas de confirmation de suppression. L'action est irréversible.
Outils & liens externes
Ajouter et gérer des entrées dans le Hub
1
Ajouter un lien externe
Dans Administration → Outils, cliquez sur Ajouter. Sélectionnez le type Lien externe. Renseignez le nom, une icône (emoji), une description, la catégorie et l'URL complète (ex:
https://github.com). Le lien s'ouvrira dans un nouvel onglet.2
Catégories
Les outils sont regroupés par catégorie dans le Hub. Choisissez parmi : Développement, Monitoring, Communication, Productivité, Infrastructure, Autre. La catégorie est également utilisée pour le filtrage par recherche.
3
Supprimer un outil
Cliquez sur ✕ dans la liste des outils. Cela supprime aussi l'outil des favoris de tous les utilisateurs. Pour les applications internes, utilisez le panneau dédié (voir section suivante).
Astuce : Utilisez des emojis expressifs comme icônes — ils s'affichent parfaitement dans toutes les cartes du Hub et facilitent la reconnaissance visuelle rapide.
Déployer une application interne
Héberger une app Node.js, Next.js ou statique sur la VM
1
Préparer l'archive ZIP
Compressez votre application en ZIP. Pour Node.js, incluez le
package.json mais pas le dossier node_modules (les dépendances seront installées automatiquement). Le point d'entrée doit être server.js, index.js ou défini dans package.json.2
Runtimes supportés
Node.js : application Express ou autre serveur Node. Next.js : détecté automatiquement via
next.config.js, build lancé automatiquement. Statique : HTML/CSS/JS servi via http-server, aucune dépendance requise.3
Déployer via l'interface
Dans Administration → Outils, cliquez Ajouter et choisissez App interne. Renseignez le nom, le slug (ex:
mon-app → accessible sur /apps/mon-app), le runtime et uploadez le ZIP. Le déploiement est automatique.4
Gérer le cycle de vie
Dans la liste des outils, les applications internes ont des boutons ▶ (démarrer) et ⏸ (arrêter). Le statut en ligne / arrêtée est visible sur chaque carte du Hub. PM2 assure le redémarrage automatique en cas de crash.
5
Consulter les logs
Les logs PM2 sont accessibles directement depuis l'interface (bouton 📋 dans la liste). Vous pouvez aussi les consulter en SSH avec :
pm2 logs dcc-mon-appImportant : Chaque application consomme de la RAM et un port entre 3100 et 4000. Surveillez les ressources de la VM si vous hébergez plusieurs applications simultanément.
Favoris personnels
Épingler vos outils les plus utilisés
1
Ajouter un favori
Sur n'importe quelle carte d'outil dans le Hub, cliquez sur l'étoile ★ en haut à droite. Elle devient orange pour indiquer que l'outil est épinglé. L'action est synchronisée immédiatement avec le serveur.
2
Accéder aux favoris
La section Mes favoris dans le menu de gauche affiche uniquement vos outils épinglés. Le compteur dans la navigation se met à jour en temps réel.
3
Favoris personnels
Les favoris sont propres à chaque utilisateur. Ajouter ou retirer un favori n'affecte pas les autres membres de l'équipe. Si un outil est supprimé par un admin, il disparaît automatiquement des favoris de tous.
Astuce : Épinglez vos 3-5 outils les plus utilisés pour un accès immédiat sans avoir à chercher dans le Hub.
Authentification & sécurité
Comment fonctionne la sécurité du portail
1
Sessions Flask + JWT
La connexion crée deux choses : une session Flask pour maintenir l'état côté serveur, et un token JWT signé avec la clé secrète de la VM. Ce token peut être transmis aux applications internes pour valider l'identité sans appel réseau externe.
2
Vérification des tokens
Vos applications internes peuvent vérifier un token JWT en appelant
POST /api/auth/verify-token avec le body {"token": "..."}. La réponse indique si le token est valide et retourne les infos de l'utilisateur.3
Durée de validité
Les tokens JWT sont valides 8 heures. Après expiration, l'utilisateur doit se reconnecter. La session Flask suit la même durée.
4
Changer son mot de passe
Les utilisateurs peuvent changer leur mot de passe via l'API :
POST /api/auth/change-password avec old_password et new_password. Les admins peuvent réinitialiser le mot de passe de n'importe quel utilisateur depuis le panneau.Sécurité : La clé JWT est stockée dans
/opt/dccockpit/backend/.env. Ne la partagez jamais et ne la commitez pas dans un dépôt Git. En cas de compromission, régénérez-la avec python3 -c "import secrets; print(secrets.token_hex(32))" et redémarrez le service.Infrastructure & maintenance
Gérer la VM et les services
1
Commandes essentielles
Tout tourne dans Docker, il n'y a ni service systemd applicatif ni PM2.
Redémarrer le portail :
Logs du portail :
État des conteneurs :
Nginx tourne sur l'hôte :
Redémarrer le portail :
cd /opt/dccockpit && docker compose up -d --force-recreateLogs du portail :
docker logs -f dccockpitÉtat des conteneurs :
docker psNginx tourne sur l'hôte :
sudo nginx -t && sudo systemctl reload nginxAttention :
docker restart relance le conteneur mais ne relit pas le fichier .env. Après toute modification de variable d'environnement, utilisez docker compose up -d --force-recreate.2
Structure des fichiers
/opt/dccockpit/backend/ — code Flask et base de données/opt/dccockpit/frontend/ — fichiers du portail web/opt/dccockpit/apps/ — applications déployées/opt/dccockpit/logs/ — tous les logs/opt/dccockpit/nginx/locations/ — configs nginx auto-générées3
Où se trouve réellement la base
La base du portail est dans le volume Docker
Les sauvegardes sont automatiques — voir l'onglet Exploitation.
dccockpit_dcc_db, vue depuis le conteneur en /data/db/dccockpit.db. Le fichier backend/instance/dccockpit.db est un vestige orphelin daté de février : ne le sauvegardez pas, il ne contient rien d'à jour.Les sauvegardes sont automatiques — voir l'onglet Exploitation.
4
Mettre à jour le portail
Pour le frontend, remplacez
/opt/dccockpit/frontend/index.html et rechargez avec Ctrl+Shift+R — le cache navigateur est tenace. Pour le backend, modifiez les fichiers Python puis docker restart dccockpit. Sauvegardez toujours l'existant avant : cp index.html index.html.bak-$(date +%Y%m%d-%H%M).Démarrage automatique : Tous les conteneurs sont en
restart: unless-stopped, ils repartent donc seuls au redémarrage de la VM. Aucune action manuelle n'est nécessaire.Exploitation
Pièges connus, sauvegardes et supervision
1
Écran d'état système
Accessible aux administrateurs via État système dans le menu de gauche. Il affiche disque, mémoire, charge, conteneurs, tailles des bases et fraîcheur des sauvegardes.
Les données sont collectées toutes les 5 minutes par
Trois niveaux : vert normal, ambre à surveiller, rouge intervention requise. Un relevé de plus de 15 minutes bascule en ambre — signe que le collecteur ne tourne plus.
Les données sont collectées toutes les 5 minutes par
/opt/dccockpit/scripts/collect_status.py. Le bouton Actualiser déclenche une collecte immédiate.Trois niveaux : vert normal, ambre à surveiller, rouge intervention requise. Un relevé de plus de 15 minutes bascule en ambre — signe que le collecteur ne tourne plus.
2
Sauvegardes
Cinq bases sauvegardées quotidiennement, rétention 30 jours, dans
Restaurer une base PostgreSQL :
Restaurer le portail : décompresser le
/opt/backups/ :02:00 dc_kpi · 02:45 feeling_cards, workload, dccockpit · 03:30 dc_mapRestaurer une base PostgreSQL :
gunzip -c /opt/backups/<app>/<fichier>.sql.gz | docker exec -i <conteneur>-postgres psql -U <user> <base>Restaurer le portail : décompresser le
.db.gz et le copier avec docker cp vers /data/db/dccockpit.db, puis redémarrer le conteneur.Jamais testé : aucune restauration n'a encore été éprouvée. Une sauvegarde non restaurée reste une hypothèse — prévoyez un essai sur une base jetable.
3
Piège n°1 — hashs bcrypt dans les fichiers .env
Docker Compose interprète les
Il faut doubler chaque
Concerne
Symptôme si oublié : le bon mot de passe est refusé, sans message d'erreur explicite.
$ comme des variables, y compris dans les fichiers env_file. Un hash bcrypt en contient trois et arrive tronqué dans le conteneur.Il faut doubler chaque
$ : $2b$12$... devient $$2b$$12$$...Concerne
/opt/dcapps/dc-map/auth.env. À refaire à chaque régénération de mot de passe :sed -i '/^DCMAP_.*_HASH=/ s/\$/$$/g' auth.envSymptôme si oublié : le bon mot de passe est refusé, sans message d'erreur explicite.
4
Piège n°2 — variables d'environnement dans Next.js
Next remplace
Toute valeur configurable après build — secrets, mots de passe — doit passer par une lecture indirecte :
Symptôme si oublié : l'application démarre normalement mais refuse toutes les authentifications, alors que
process.env.NOM_EXPLICITE par sa valeur au moment du build, y compris côté serveur. Une variable absente à la compilation devient undefined pour toujours, quoi qu'on mette ensuite dans l'environnement.Toute valeur configurable après build — secrets, mots de passe — doit passer par une lecture indirecte :
const env = process.env as Record<string, string|undefined>; return env[nom];Symptôme si oublié : l'application démarre normalement mais refuse toutes les authentifications, alors que
docker exec <app> printenv affiche la bonne valeur.5
Piège n°3 — compte administrateur recréé
La fonction
Si vous réinitialisez ou restaurez une base vide, il réapparaîtra : supprimez-le ou changez son mot de passe immédiatement après.
seed_db() de backend/app.py recrée un compte admin@dccockpit.local avec un mot de passe trivial si la table users est vide. Ce compte a été supprimé le 05/08/2026.Si vous réinitialisez ou restaurez une base vide, il réapparaîtra : supprimez-le ou changez son mot de passe immédiatement après.
6
Espace disque
Le cache de build Docker grossit à chaque
Purge manuelle si nécessaire :
Ne jamais lancer
docker compose build et peut atteindre plusieurs dizaines de gigaoctets. Il est désormais plafonné à 10 Go par /etc/docker/daemon.json.Purge manuelle si nécessaire :
docker builder prune -a -f puis docker image prune -fNe jamais lancer
docker system prune --volumes ni docker volume prune : les volumes contiennent les bases de données.7
Secrets et authentification
JWT_SECRET du Cockpit signe les jetons SSO ; les applications le connaissent sous le nom COCKPIT_JWT_SECRET. FLASK_SECRET_KEY signe les sessions du portail et n'est connue que du Cockpit — ne jamais les réunifier, sinon toute application pourrait forger une session administrateur.Chaque application garde en plus son propre
JWT_SECRET interne et KPI_SERVICE_SECRET pour les appels entre services.Rotation : changer la valeur partout puis recréer tous les conteneurs. Les sessions en cours sont invalidées, les mots de passe ne sont pas affectés.
Le portail est servi en HTTP : les identifiants circulent en clair sur le réseau. Un certificat TLS est nécessaire avant tout partage hors du réseau interne — il requiert un nom de domaine, une adresse IP ne suffit pas.