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égorie | Modèles | Exemples |
|---|---|---|
| devtools | 20 | gitea-runner, dozzle, hoppscotch, code-server |
| productivity | 18 | baserow, excalidraw, homepage, docuseal |
| database | 17 | chroma, couchdb, cockroachdb, cassandra |
| media | 16 | immich, filebrowser, lidarr, jellyseerr |
| cms | 12 | ghost, laravel, october-cms, pocketbase |
| runtime | 10 | php-8.0, php-7.4, php-8.1, php-7.3 |
| networking | 9 | adguard-home, headscale, nginx-pm, netmaker |
| analytics | 9 | influxdb, posthog, questdb, clickhouse |
| ai | 9 | anything-llm, dify, langfuse, n8n |
| communication | 7 | cal-com, chatwoot, zulip, matrix-synapse |
| auth | 7 | authentik, authelia, keycloak, logto |
| finance | 6 | akaunting, actual-budget, invoice-ninja, erp-next |
| service | 4 | homebridge, node-red, duplicati, restic-server |
| queue | 4 | kafka, nats, rabbitmq, redpanda |
| monitoring | 4 | changedetection, uptime-kuma, jaeger, loki |
| storage | 3 | minio, seaweedfs, garage |
| search | 3 | meilisearch, opensearch, typesense |
| forum | 3 | flarum, discourse, nodebb |
| cache | 3 | dragonfly, memcached, keydb |
| 2 | stalwart, docker-mailserver | |
| ecommerce | 2 | saleor, prestashop |
| marketing | 1 | postiz |
| education | 1 | moodle |
| ai-ml | 1 | mindsdb |
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 :
$ 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 GhostPuis 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 :
$ 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 agosh0 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_32ousecret_64crée un secret aléatoire de cette longueur (143 et 26 modèles les utilisent) ;passwordest aussi accepté.defaultfournit la valeur utilisée si vous n'en donnez pas ;required: truerend 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 :
# 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_32Outre 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.