Your First Deploy
Deploy your first application on sh0 in under five minutes. This guide walks you through every step, from creating a stack to seeing your app live.
Overview
Deploying an app on sh0 follows a simple flow:
- Create a Stack -- A stack groups related services together (like an app and its database).
- Add an App -- Point sh0 to a Git repository or choose a template.
- Configure Domain -- Assign a domain or use the default
*.sh0.appsubdomain. - Deploy -- sh0 builds and launches your app automatically.
- Verify -- Visit your app and confirm everything works.
Step 1: Create a Stack
Stacks are the top-level organizational unit in sh0. Think of a stack as a project folder that groups an app with its related services (databases, caches, workers).
- From the dashboard, click the New Stack button in the top-right corner.
- Enter a name for your stack (e.g.,
my-first-app). - Optionally add a description to help identify the stack later.
- Click Create Stack.
Your new stack appears in the stack list. Click on it to open the stack detail view, where you will add your first app.
Step 2: Add an App
Inside your stack, click Add App. You can deploy from a Git repository, a Docker image, or a pre-built template.
From Git Repository
The most common way to deploy. Provide a Git URL and sh0 handles the rest:
- Select Git Repository as the source.
- Enter the repository URL. For this example, use our demo app: Repository URL
https://github.com/sh0-dev/demo-node-app - Choose the branch to deploy (defaults to
main). - sh0 automatically detects the project stack (Node.js, Python, Go, etc.) and selects the appropriate build configuration.
- Click Add App.
From Template
If you want to deploy a popular application without writing any code, use a template:
- Select Template as the source.
- Browse or search the template library (170+ options including WordPress, Ghost, Plausible, Uptime Kuma, and more).
- Click on a template to see its details -- required resources, included services, and default configuration.
- Click Deploy Template.
Step 3: Configure Domain
Every app needs a domain to be accessible. sh0 offers two options:
Default Subdomain
sh0 automatically assigns a subdomain like my-first-app.sh0.app. No DNS configuration needed -- perfect for testing.
Custom Domain
Use your own domain (e.g., app.yourdomain.com). Requires adding an A record pointing to your server's IP. SSL is automatic.
To configure a domain for your app:
- In your app settings, go to the Domains tab.
- Click Add Domain.
- Enter your domain name (or keep the default
.sh0.appsubdomain). - If using a custom domain, add an A record at your DNS provider pointing to your server's IP address.
- Click Save. sh0 will automatically provision an SSL certificate.
Step 4: Deploy
With your app configured, it is time to deploy. Click the Deploy button. sh0 will:
- Clone the Git repository (or pull the Docker image)
- Detect the project stack and generate a Dockerfile
- Build the container image
- Start the new container and run health checks
- Configure the reverse proxy to route traffic
- Mark the deployment as live
You can watch the build logs in real time. A typical deployment for a Node.js app takes 30-90 seconds, depending on the size of your dependencies.
Step 5: Verify
Once the deployment completes, your app is live. Verify it is running:
- Click the domain link shown in the app overview to open your app in a new tab.
- Check the app status indicator -- it should show a green Running badge.
- Review the deployment entry in the Deployments tab to see the full history.
You can also verify from the command line:
curl -I https://my-first-app.sh0.appHTTP/2 200
content-type: text/html; charset=utf-8
server: Caddy
x-powered-by: sh0.sh0.app subdomain for immediate access while waiting.What's Next
Congratulations -- your first app is deployed. Here are some recommended next steps: