Command Keeper est une application web pour stocker, organiser et retrouver rapidement tes commandes terminal.
- 📁 Organisation par Groupes (projets / contextes)
- 🔎 Recherche côté serveur (titre, description, commande, tags)
- 🏷️ Tags, ⭐ favoris, compteur de copies
- 🧩 Variables de commande
{{VAR}}avec valeurs par défaut - 📦 Import / Export JSON (backup/migration)
- 🖥️ Frontend : React + Vite (UI)
- ⚙️ Backend : FastAPI (API REST) + SQLAlchemy
- 🗄️ DB : SQLite (par défaut)
- Docker + Docker Compose
Le docker-compose.yml lit un fichier .env à la racine.
Exemple minimal (à adapter) :
# Ports exposés sur la machine hôte
FRONTEND_PORT=2000
BACKEND_PORT=2001
# Backend
# Recommandé pour persister la DB sur le volume docker `backend_data`:
DATABASE_URL=sqlite:////data/commandkeeper.db
# IMPORTANT: à changer en prod
SECRET_KEY=change-me-in-production
# Autorise le frontend (hôte) à appeler l'API
CORS_ORIGINS=http://localhost:2000,http://127.0.0.1:2000
# Compte admin par défaut (1ère connexion)
DEFAULT_ADMIN_USERNAME=admin
DEFAULT_ADMIN_PASSWORD=admin
# Frontend (Vite)
# Option A (recommandée avec Docker Compose): utiliser le proxy Vite vers le service backend
VITE_API_URL=
VITE_PROXY_TARGET=http://backend:8000
# Option B (si tu lances le frontend hors docker): pointer directement l'API
# VITE_API_URL=http://localhost:2001
# VITE_PROXY_TARGET=http://localhost:2001docker compose up --build- 🖥️ Frontend : http://localhost:2000
- ⚙️ Backend : http://localhost:2001
- 📚 Swagger : http://localhost:2001/docs
- Identifiants par défaut :
admin / admin - À la première connexion, l’application force un changement de mot de passe.
Pour remplir la base avec des groupes + commandes (utile pour tester l’UI rapidement) :
docker compose run --rm backend uv run python scripts/seed_demo.pyPour réinitialiser (supprime d’abord les groupes seedés, puis les recrée) :
docker compose run --rm backend uv run python scripts/seed_demo.py --resetPour supprimer uniquement les données seedées (sans réinsérer) :
docker compose run --rm backend uv run python scripts/seed_demo.py --delete-seededNotes :
- Le script est idempotent : si les groupes seedés existent déjà, il ne recrée rien (sauf avec
--reset). - La DB est persistée dans le volume Docker
backend_datasi tu utilisesDATABASE_URL=sqlite:////data/commandkeeper.db. docker compose down -vsupprime les volumes (donc la DB), et tu peux relancer le seed ensuite.
Le workflow GitHub Actions pousse 2 images :
kalagaserge/commandkeeper-backendkalagaserge/commandkeeper-frontend
Tags publiés :
latestsha-<commit>
Pour déployer sans build local, remplace build: par image: (et enlève les volumes de code en prod).
Exemple (extrait) :
services:
backend:
image: kalagaserge/commandkeeper-backend:latest
env_file: [ .env ]
ports:
- "${BACKEND_PORT}:8000"
volumes:
- backend_data:/data
frontend:
image: kalagaserge/commandkeeper-frontend:latest
env_file: [ .env ]
ports:
- "${FRONTEND_PORT}:2000"
depends_on:
- backendPuis :
docker compose pull
docker compose up -d- Change
SECRET_KEYet les identifiants admin par défaut - Ajuste
CORS_ORIGINSau vrai domaine du frontend - Garde
DATABASE_URL=sqlite:////data/commandkeeper.dbpour persister sur le volume
GET /healthPOST /auth/loginPOST /auth/change-passwordGET/POST/PATCH/DELETE /groupsGET/POST/PATCH/DELETE /commandsGET /search?q=...POST /import(import bulk)