Templates
Deploy popular applications in seconds with sh0's template catalog. Browse 170+ pre-configured templates for databases, web frameworks, developer tools, and more.
Template Catalog
The template catalog is accessible from New App → Templates in any stack. Each template includes a pre-configured Docker image, default environment variables, volume mounts, and health checks -- everything needed to get a service running immediately.
Templates are searchable by name, category, or tag. You can also filter by category using the sidebar navigation.
Template Categories
Templates are organized into the following categories:
| Category | Examples | Count |
|---|---|---|
| Databases | PostgreSQL, MySQL, MariaDB, MongoDB, Redis, ClickHouse | 18 |
| Web Frameworks | WordPress, Ghost, Strapi, Directus, Payload CMS | 22 |
| Developer Tools | Gitea, Drone CI, Verdaccio, SonarQube, Sentry | 19 |
| Monitoring | Grafana, Prometheus, Uptime Kuma, Netdata | 12 |
| Communication | Mattermost, Rocket.Chat, n8n, Chatwoot | 10 |
| Storage | MinIO, Nextcloud, Seafile, Garage | 9 |
| Analytics | Plausible, Umami, Matomo, PostHog | 8 |
| Networking | Nginx, Traefik, WireGuard, Pi-hole | 7 |
| Other | Vaultwarden, Planka, Bookstack, Outline | 14 |
One-Click Deploy
Deploying a template takes a single click. Select a template from the catalog, review the default settings, and hit Deploy. sh0 handles everything:
- Pulls the Docker image from the configured registry
- Creates named volumes for persistent data
- Sets up environment variables with secure defaults (random passwords are generated automatically)
- Configures health checks for the service
- Provisions a domain at
app-name.your-domain.com - Issues an SSL certificate via Caddy
Customizing Before Deploy
Before deploying, you can customize any template setting:
- App name: Choose a name for your service (used in the URL)
- Image tag: Select a specific version (e.g.,
postgres:16vspostgres:15) - Environment variables: Override any default values
- Resource limits: Set CPU and memory limits for the container
- Volume size: Specify storage allocation for persistent data
- Domain: Assign a custom domain instead of the default subdomain
Creating Custom Templates
You can create your own templates to standardize deployments across your team. Custom templates are defined in YAML and can be added through the dashboard or placed in the templates/ directory on your sh0 server.
Template Format
name: My API Template
description: Standard Node.js API with PostgreSQL
icon: server
category: web-frameworks
tags:
- nodejs
- api
- postgresql
services:
api:
image: node:20-alpine
ports:
- "3000:3000"
environment:
NODE_ENV: production
DATABASE_URL: postgres://user:pass@db:5432/api
healthcheck:
path: /health
interval: 30s
volumes:
- uploads:/app/uploads
db:
image: postgres:16
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: "{{random_password}}"
POSTGRES_DB: api
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
uploads:
pgdata:The undefined} placeholder is replaced with a secure random string at deploy time. Other available placeholders include undefined} and undefined}.
Sharing Templates
Custom templates placed in the templates/ directory are available to all users on your sh0 instance. You can organize them into subdirectories by category.
templates/
databases/
my-postgres-cluster.yaml
my-redis-sentinel.yaml
web/
company-api.yaml
company-frontend.yaml