Docs/ Infrastructure/ Stockage et volumes

Stockage et volumes

Stockage persistant pour vos conteneurs, avec prise en charge du disque local, S3 et Cloudflare R2 comme backends de stockage.

Que sont les volumes

Par défaut, les systèmes de fichiers des conteneurs sont éphémères -- toutes les données écrites à l'intérieur d'un conteneur sont perdues lorsque le conteneur redémarre ou est redéployé. Les volumes résolvent ce problème en fournissant un stockage persistant qui survit aux événements du cycle de vie du conteneur.

Les cas d'utilisation courants pour les volumes incluent :

  • Répertoires de données de base de données (PostgreSQL, MySQL, MongoDB)
  • Fichiers et médias uploadés par les utilisateurs
  • Logs applicatifs qui doivent persister
  • Configuration partagée entre conteneurs
  • Répertoires de cache qui doivent survivre aux redémarrages
Note
sh0 crée automatiquement des volumes pour les services de base de données (PostgreSQL, MySQL, Redis, MongoDB). Vous n'avez besoin de créer manuellement des volumes que pour le stockage applicatif personnalisé.

Création de volumes persistants

Vous pouvez créer des volumes via le tableau de bord ou l'API.

Via le tableau de bord :

  1. Accédez à l'onglet Paramètres → Stockage de votre application.
  2. Cliquez sur Ajouter un volume.
  3. Saisissez un nom de volume (par ex., uploads) et le chemin de montage dans le conteneur.
  4. Définissez éventuellement une limite de taille.
  5. Cliquez sur Créer.
Creating a new persistent volume in the dashboard

Via l'API :

Terminal
curl -X POST https://your-server:9000/api/apps/my-app/mounts \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "uploads",
    "mount_path": "/app/uploads",
    "size_limit_mb": 5120
  }'

Montage de volumes dans les conteneurs

Lorsque vous créez un volume, vous spécifiez le chemin à l'intérieur du conteneur où il sera monté. Les données du volume sont stockées sur le système de fichiers de l'hôte et montées par liaison dans le conteneur au chemin spécifié.

docker-compose.yml
services:
  web:
    image: my-app:latest
    volumes:
      - uploads:/app/uploads
      - logs:/var/log/app

volumes:
  uploads:
  logs:

Lors du déploiement via Docker Compose, sh0 crée et gère automatiquement les volumes nommés définis dans votre fichier compose.

Volume mount configuration showing container path mapping
Warning
Évitez de monter des volumes sur des chemins contenant le code de l'application (par ex., /app). Cela remplacerait votre code déployé par ce qui se trouve sur le volume. Montez les volumes dans des sous-répertoires comme /app/data ou /app/uploads à la place.

Chemins des volumes et permissions

sh0 stocke les données de volume sur l'hôte à :

Host Path
/var/lib/sh0/volumes/{stack_id}/{volume_name}

Les permissions sont définies pour correspondre à l'utilisateur du conteneur. Si votre application s'exécute en tant qu'utilisateur non-root (ce que sh0 impose par défaut), le répertoire du volume appartient à l'UID/GID de cet utilisateur.

Tip
Si vous rencontrez des erreurs de permission, vérifiez l'UID de votre application à l'intérieur du conteneur avec id et assurez-vous que le répertoire du volume a la propriété correspondante. Vous pouvez corriger les permissions depuis le terminal sh0.

Fournisseurs de stockage

En plus des volumes locaux, sh0 prend en charge les fournisseurs de stockage externes pour les sauvegardes et le stockage objet.

Disque local

Le backend de stockage par défaut. Les volumes sont stockés directement sur le système de fichiers du serveur. C'est l'option la plus simple et offre les meilleures performances pour la plupart des charges de travail.

Amazon S3

Configurez un bucket S3 pour les sauvegardes et le stockage de fichiers volumineux. Accédez à Paramètres → Fournisseurs de stockage pour ajouter vos identifiants S3.

Terminal
curl -X POST https://your-server:9000/api/storage-providers \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "production-backups",
    "type": "s3",
    "bucket": "my-backups",
    "region": "us-east-1",
    "access_key_id": "AKIA...",
    "secret_access_key": "..."
  }'
S3 storage provider configuration form

Cloudflare R2

Cloudflare R2 est un stockage objet compatible S3 avec zéro frais de trafic sortant. sh0 prend en charge R2 nativement -- configurez-le de la même manière que S3, en utilisant votre point de terminaison R2 :

Terminal
curl -X POST https://your-server:9000/api/storage-providers \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "r2-backups",
    "type": "s3",
    "bucket": "my-backups",
    "endpoint": "https://ACCOUNT_ID.r2.cloudflarestorage.com",
    "access_key_id": "...",
    "secret_access_key": "..."
  }'
Cloudflare R2 storage provider setup

Gestion du stockage

Le panneau Stockage dans le tableau de bord affiche tous les volumes d'un stack, leurs tailles et à quels conteneurs ils sont montés. Depuis ici vous pouvez :

  • Parcourir les fichiers : Utiliser le gestionnaire de fichiers intégré pour voir le contenu du volume.
  • Télécharger des fichiers : Exporter des fichiers individuels ou des répertoires entiers.
  • Redimensionner : Augmenter la limite de taille d'un volume.
  • Supprimer : Supprimer un volume et toutes ses données (nécessite une confirmation).
  • Sauvegarder : Déclencher une sauvegarde manuelle vers un fournisseur de stockage configuré.
Storage management panel showing volumes and their usage
Danger
La suppression d'un volume détruit définitivement toutes les données qu'il contient. Cette action est irréversible. Créez toujours une sauvegarde avant de supprimer un volume.