Plantillas
Despliegue una de las 171 plantillas integradas en sh0: un conjunto listo para usar de contenedores, volúmenes y secretos generados, descrito en un archivo YAML.
El catálogo
La versión 1.10.2 incluye 171 plantillas, compiladas en el binario de sh0: el catálogo es el mismo en todos los servidores con esa versión y solo cambia al actualizar sh0. Se agrupan en 24 categorías:
| Categoría | Plantillas | Ejemplos |
|---|---|---|
| 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 muestra todo el catálogo con la categoría y la descripción de cada plantilla. En la versión 1.10.2, su columna SERVICES muestra siempre 0; use sh0 templates info <nombre> para ver los servicios.
Algunas plantillas muestran un aviso en el panel: Imagen congelada cuando usan imágenes bitnamilegacy/*, un archivo congelado que ya no recibe parches de seguridad, e Imagen comunitaria para la reconstrucción comunitaria de MinIO.
Desplegar una plantilla
En el panel, abra Plantillas, busque la plantilla con el cuadro de búsqueda y haga clic en Desplegar. Indique el Nombre de la aplicación, revise las Variables (los secretos marcados como Generado automáticamente se crean por usted) y confirme con Desplegar plantilla.
Desde la CLI, sh0 templates info muestra lo que creará una plantilla:
$ 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 GhostDespués, sh0 templates deploy <plantilla> --app-name <nombre> la despliega, con --var CLAVE=VALOR (repetible) para fijar usted mismo una 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 termina con Failed to parse response aunque el servidor ha aceptado la solicitud y el despliegue continúa. Compruebe el resultado con sh0 apps o en el panel en lugar de fiarse del código de salida.Una plantilla desplegada se convierte en una aplicación cuyos servicios aparecen en su página. Volver a desplegar esa aplicación (botón de despliegue o sh0 deploy) falla en la versión 1.10.2 con App has no repository URL configured; los servicios que ya están en marcha no se ven afectados.
Variables
Los valores de una plantilla pueden contener marcadores ${NAME}, que se resuelven al desplegar a partir de la lista variables de la plantilla:
generated: secret_32osecret_64crea un secreto aleatorio de esa longitud (143 y 26 plantillas los usan); también se aceptapassword.defaultaporta el valor que se usa si usted no indica ninguno;required: truehace obligatoria la variable.${DOMAIN}no necesita declararse: sh0 lo sustituye por el dominio que asigna a la aplicación.
Formato de una plantilla
Cada plantilla es un archivo YAML del directorio templates/ del código fuente de sh0. Este es ghost.yaml tal como se distribuye en la versión 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_32Además de name, image, port, env, volumes, depends_on, memory_mb y cpu_cores, un servicio acepta command y entrypoint. expose: true marca el servicio principal, el que recibe la dirección pública de la aplicación; un servicio secundario solo obtiene su propia dirección pública con route: true. Los servicios sin ninguno de los dos son internos y se alcanzan por su nombre, como mysql arriba.
Sus propias plantillas
La versión 1.10.2 no puede cargar una plantilla desde un archivo o una URL: el catálogo es el que está compilado en el binario. Para desplegar su propia pila de varios contenedores, use un archivo Docker Compose.