Docs/ Déploiement/ Modèles

Modèles

Déployez l'un des 171 modèles intégrés à sh0 : un ensemble prêt à l'emploi de conteneurs, de volumes et de secrets générés, décrit dans un fichier YAML.

Le catalogue

La version 1.10.2 contient 171 modèles, compilés dans le binaire sh0 : le catalogue est le même sur tout serveur qui exécute cette version, et il ne change qu'avec une mise à jour de sh0. Ils sont répartis en 24 catégories :

CatégorieModèlesExemples
devtools20gitea-runner, dozzle, hoppscotch, code-server
productivity18baserow, excalidraw, homepage, docuseal
database17chroma, couchdb, cockroachdb, cassandra
media16immich, filebrowser, lidarr, jellyseerr
cms12ghost, laravel, october-cms, pocketbase
runtime10php-8.0, php-7.4, php-8.1, php-7.3
networking9adguard-home, headscale, nginx-pm, netmaker
analytics9influxdb, posthog, questdb, clickhouse
ai9anything-llm, dify, langfuse, n8n
communication7cal-com, chatwoot, zulip, matrix-synapse
auth7authentik, authelia, keycloak, logto
finance6akaunting, actual-budget, invoice-ninja, erp-next
service4homebridge, node-red, duplicati, restic-server
queue4kafka, nats, rabbitmq, redpanda
monitoring4changedetection, uptime-kuma, jaeger, loki
storage3minio, seaweedfs, garage
search3meilisearch, opensearch, typesense
forum3flarum, discourse, nodebb
cache3dragonfly, memcached, keydb
email2stalwart, docker-mailserver
ecommerce2saleor, prestashop
marketing1postiz
education1moodle
ai-ml1mindsdb

sh0 templates list affiche tout le catalogue, avec la catégorie et la description de chaque modèle. En version 1.10.2, sa colonne SERVICES affiche toujours 0 ; utilisez sh0 templates info <nom> pour voir les services.

Certains modèles portent un avertissement dans le tableau de bord : Image figée quand ils utilisent des images bitnamilegacy/*, une archive figée qui ne reçoit plus de correctifs de sécurité, et Image communautaire pour la reconstruction communautaire de MinIO.

Déployer un modèle

Dans le tableau de bord, ouvrez Modèles, trouvez le modèle avec la zone de recherche et cliquez sur Déployer. Indiquez le Nom de l'application, vérifiez les Variables (les secrets marqués Généré automatiquement sont créés pour vous), puis confirmez avec Déployer le modèle.

En ligne de commande, sh0 templates info montre ce qu'un modèle va créer :

Terminal
$ sh0 templates info ghost
  Template: ghost
  Description: Ghost publishing platform with MySQL database
  Category: cms
  Tags: cms, blog, publishing

  Services:
    - ghost (image: ghost:6-alpine, port: 2368, exposed)
    - mysql (image: mysql:8, port: 3306)

  Variables:
  KEY          REQUIRED  DEFAULT  DESCRIPTION
  -----------  --------  -------  ---------------------------
  DB_PASSWORD  auto      -        Database password for Ghost

Puis sh0 templates deploy <modèle> --app-name <nom> le déploie, avec --var CLÉ=VALEUR (répétable) pour fixer vous-même une variable :

Terminal
$ sh0 templates deploy it-tools --app-name my-tools
[*] Deploying template 'it-tools' as 'my-tools'...
Error: Failed to parse response

Caused by:
    missing field `app_id` at line 1 column 650

$ sh0 apps
  NAME      STATUS   BRANCH  PORT  REPLICAS  UPDATED
  --------  -------  ------  ----  --------  -------
  my-tools  running  main    80    1         14s ago
Warning
En version 1.10.2, sh0 templates deploy se termine par Failed to parse response alors que le serveur a accepté la demande et que le déploiement se poursuit. Vérifiez le résultat avec sh0 apps ou dans le tableau de bord plutôt que de vous fier au code de sortie.

Un modèle déployé devient une application dont les services sont listés sur sa page. Redéployer une telle application (bouton de déploiement ou sh0 deploy) échoue en version 1.10.2 avec App has no repository URL configured ; les services déjà en marche ne sont pas affectés.

Variables

Les valeurs d'un modèle peuvent contenir des marqueurs ${NAME}, résolus au déploiement à partir de la liste variables du modèle :

  • generated: secret_32 ou secret_64 crée un secret aléatoire de cette longueur (143 et 26 modèles les utilisent) ; password est aussi accepté.
  • default fournit la valeur utilisée si vous n'en donnez pas ; required: true rend la variable obligatoire.
  • ${DOMAIN} n'a pas besoin d'être déclaré : sh0 le remplace par le domaine qu'il attribue à l'application.

Format d'un modèle

Chaque modèle est un fichier YAML du répertoire templates/ des sources de sh0. Voici ghost.yaml tel que livré en version 1.10.2 :

templates/ghost.yaml
# Ghost -- Modern publishing platform with MySQL backend
name: ghost
description: Ghost publishing platform with MySQL database
icon: ghost
category: cms
tags:
  - cms
  - blog
  - publishing

services:
  - name: ghost
    image: ghost:6-alpine
    port: 2368
    expose: true
    env:
      url: "https://${DOMAIN}"
      database__client: mysql
      database__connection__host: mysql
      database__connection__user: ghost
      database__connection__password: "${DB_PASSWORD}"
      database__connection__database: ghost
      NODE_ENV: production
    volumes:
      - ghost-data:/var/lib/ghost/content
    depends_on:
      - mysql
    memory_mb: 512
    cpu_cores: 0.5

  - name: mysql
    image: mysql:8
    port: 3306
    expose: false
    env:
      MYSQL_ROOT_PASSWORD: "${DB_PASSWORD}"
      MYSQL_DATABASE: ghost
      MYSQL_USER: ghost
      MYSQL_PASSWORD: "${DB_PASSWORD}"
    volumes:
      - db-data:/var/lib/mysql
    memory_mb: 512
    cpu_cores: 0.5

volumes:
  - name: ghost-data
  - name: db-data

variables:
  - name: DB_PASSWORD
    description: Database password for Ghost
    required: true
    generated: secret_32

Outre name, image, port, env, volumes, depends_on, memory_mb et cpu_cores, un service accepte command et entrypoint. expose: true désigne le service principal, celui qui reçoit l'adresse publique de l'application ; un service secondaire n'obtient sa propre adresse publique qu'avec route: true. Les services qui n'ont ni l'un ni l'autre restent internes et se joignent par leur nom, comme mysql ci-dessus.

Vos propres modèles

La version 1.10.2 ne sait pas charger un modèle depuis un fichier ou une URL : le catalogue est celui compilé dans le binaire. Pour déployer votre propre pile multiconteneur, utilisez un fichier Docker Compose.