Stacks

Un stack est l'unité d'organisation de premier niveau dans sh0. Il regroupe les applications et services liés, fournissant une configuration partagée et une vue unifiée de votre projet.

Qu'est-ce qu'un stack ?

Un stack représente un projet ou un produit composé d'une ou plusieurs applications et services. Par exemple, un stack d'application web typique pourrait inclure :

  • Une application frontend (React, Vue, Svelte)
  • Une API backend (Node.js, Python, Go)
  • Une base de données PostgreSQL
  • Un cache Redis
  • Un worker en arrière-plan

Tous ces éléments résident dans un seul stack, partagent des variables d'environnement et peuvent communiquer via un réseau Docker privé. Lorsque vous ouvrez un stack dans le tableau de bord, vous voyez tous ses composants en un coup d'œil.

Stack list view showing three stacks: 'production-api' with 4 services running, 'staging-frontend' with 2 services running, and 'blog' with 1 service running -- each showing status badges and resource usage
The stack list gives you an overview of all your projects

Stacks vs Applications vs Services

Comprendre la hiérarchie est important :

ConceptDescriptionExemple
StackUn regroupement de projet ou de produit"E-commerce Platform"
ApplicationUne unité déployable au sein d'un stack"api", "frontend", "worker"
ServiceUne instance de conteneur en cours d'exécution d'une application"api-v3-abc123" (container)

Un stack contient une ou plusieurs applications. Chaque application s'exécute en tant qu'un ou plusieurs services (conteneurs). Lorsque vous déployez une application, sh0 crée un nouveau service (conteneur) et supprime éventuellement l'ancien après la réussite du bilan de santé.

Note
Toutes les applications au sein d'un stack partagent un réseau Docker, ce qui signifie qu'elles peuvent communiquer entre elles en utilisant le nom de l'application comme nom d'hôte. Par exemple, votre frontend peut atteindre l'API à l'adresse http://api:3000 sans configuration supplémentaire.

Création d'un stack

Il existe deux façons de créer un stack :

Depuis le tableau de bord :

  1. Cliquez sur Nouveau stack dans le coin supérieur droit ou depuis la page des stacks.
  2. Saisissez un nom (minuscules, alphanumériques et tirets uniquement).
  3. Ajoutez une description facultative.
  4. Cliquez sur Créer le stack.
Create Stack dialog with fields for name, description, and a Create Stack button
Creating a new stack from the dashboard

Via l'API :

Terminal
curl -X POST http://localhost:9000/api/projects \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "my-stack", "description": "Production web app"}'

Vue détaillée du stack

Cliquer sur un stack ouvre la vue détaillée, qui fournit une image complète de votre projet :

Stack detail view showing tabs for Apps, Environment, Domains, Backups, and Settings. The Apps tab is active, showing a grid of three apps: frontend (running), api (running), and database (running) with resource usage bars
The stack detail view with all apps visible
  • Onglet Applications -- Toutes les applications de ce stack avec leur statut, utilisation des ressources et actions rapides (déployer, redémarrer, arrêter).
  • Onglet Environnement -- Variables d'environnement au niveau du stack partagées entre toutes les applications.
  • Onglet Domaines -- Tous les domaines attribués aux applications de ce stack.
  • Onglet Sauvegardes -- Planifications et historique des sauvegardes pour les bases de données de ce stack.
  • Onglet Paramètres -- Nom du stack, description, zone de danger (supprimer le stack).

Variables d'environnement du stack

Les variables d'environnement au niveau du stack sont héritées par toutes les applications du stack. C'est utile pour la configuration partagée comme les clés API, les URL de base de données ou les feature flags qui s'appliquent à l'ensemble du projet.

Example Stack Variables
DATABASE_URL=postgres://user:pass@db:5432/myapp
REDIS_URL=redis://cache:6379
APP_ENV=production
STRIPE_API_KEY=sk_live_...
Stack Environment tab showing a list of environment variables with name, value (masked), and action buttons. An 'Add Variable' button and 'Import .env' button are at the top
Managing stack-level environment variables
Priorité des variables
Les variables d'environnement au niveau de l'application remplacent celles au niveau du stack. Si un stack définit APP_ENV=production et qu'une application définit APP_ENV=staging, l'application utilise staging. Cela vous permet de partager des valeurs par défaut tout en autorisant des remplacements par application.

Paramètres du stack

L'onglet Paramètres vous permet de modifier les métadonnées du stack et d'effectuer des actions administratives :

  • Nom et description -- Mettre à jour le nom d'affichage et la description du stack.
  • Réseau Docker -- Afficher le nom du réseau Docker interne pour ce stack.
  • Zone de danger -- Supprimer le stack et toutes ses applications, services et données. Cette action est irréversible.
Suppression d'un stack
La suppression d'un stack supprime toutes les applications, conteneurs, volumes et données associées. Sauvegardez toujours vos données importantes avant de supprimer. Cette action est irréversible.

Schémas courants

Voici quelques façons courantes d'organiser les stacks :

Par projet

Un stack par projet avec tous ses services.

saas-app (frontend + api + db + redis)

Par environnement

Des stacks séparés pour le staging et la production.

myapp-staging / myapp-production

Par client

Les agences peuvent s'organiser par client.

client-acme / client-globex

Services partagés

Infrastructure commune dans son propre stack.

infrastructure (traefik + monitoring + logging)

Gestion des stacks via l'API

Toutes les opérations sur les stacks sont disponibles via l'API REST. Voici les principaux points de terminaison :

Terminal
# List all stacks
curl http://localhost:9000/api/projects \
  -H "Authorization: Bearer YOUR_TOKEN"

# Get a specific stack
curl http://localhost:9000/api/projects/STACK_ID \
  -H "Authorization: Bearer YOUR_TOKEN"

# Update a stack
curl -X PUT http://localhost:9000/api/projects/STACK_ID \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "new-name", "description": "Updated description"}'

# Delete a stack
curl -X DELETE http://localhost:9000/api/projects/STACK_ID \
  -H "Authorization: Bearer YOUR_TOKEN"
Note
Pour une liste complète des points de terminaison API, consultez la Référence API.