$ déployez vos apps Laravel sans quitter le terminal
Le CLI officiel KennHosting. Un token API, un dépôt Git, et kennhosting deploy se charge du reste : git pull, composer, migrations, assets, redémarrage des workers.
$ curl -fsSL https://cli.kennhosting.com/install.sh | sh
Premier déploiement, puis les suivants
login + init une seule fois — un wizard détecte votre service et génère une clé SSH dédiée. Ensuite, deploy setup clone le dépôt, deploy livre chaque changement.
$ kennhosting login ? Collez votre token API (kennhosting.com/client/developer) › •••••••••••••••• ✔ Connecté en tant que ken@kennhosting.com $ kennhosting init → Récupération de vos services KennHosting... ℹ Service détecté : app.mondomaine.com → Génération d'une paire de clés SSH Ed25519... ✔ .kennhosting.yml généré $ kennhosting deploy setup → Clone du dépôt → Préparation du fichier .env → Installation des dépendances → Génération de la clé → Migration de la base → Optimisation ✔ Premier déploiement terminé — app.mondomaine.com est en ligne $ kennhosting deploy → Maintenance ON → Mise à jour du code → Upload des assets → Dépendances composer → Migration → Optimisation → Redémarrage workers → Maintenance OFF ✔ Déployé en 14s
Tableau de bord interactif
Lancé sans argument, kennhosting ouvre une TUI : liste de vos services, déploiement en une touche, historique paginé.
$ kennhosting Services KennHosting › app.mondomaine.com actif api.mondomaine.com actif staging.mondomaine.com actif entrée: déployer (projet local) · h: historique · q: quitter
Scriptable, pensé pour la CI
Le flag --plain désactive la TUI (sortie texte simple), --yes saute la confirmation interactive. Sans confirmation explicite en environnement non interactif, le CLI refuse d'agir — pas de déploiement accidentel dans un pipeline mal configuré.
# dans un pipeline CI $ kennhosting deploy --plain --yes → Maintenance ON → Mise à jour du code → Dépendances composer → Migration → Optimisation → Maintenance OFF ✔ Déployé en 11s
# sans --yes, hors terminal interactif $ kennhosting deploy --plain ⚠ confirmation requise pour cette action en environnement non interactif — relancez avec --yes