Installation
Get sh0 running on a clean server in under a minute. One command downloads the binary -- sh0 handles all dependencies automatically.
System Requirements
| Requirement | Minimum | Recommended |
|---|---|---|
| OS | Linux (any distro) | Ubuntu 22.04+ / Debian 12+ |
| RAM | 1 GB | 2 GB+ |
| Disk | 10 GB | 20 GB+ (SSD) |
| CPU | 1 vCPU | 2 vCPUs+ |
| Docker | Auto-installed by sh0 if missing | |
Supported Platforms
sh0 provides pre-built binaries for the following architectures:
x86_64(AMD64) -- Most cloud servers and VPS providersaarch64(ARM64) -- AWS Graviton, Oracle Ampere, Raspberry Pi 4+
sh0 serve as root, it automatically detects and installs Docker and Caddy if they are missing. No manual setup required.Install sh0
Quick Install (Recommended)
The install script detects your architecture, downloads the latest binary, and sets up the systemd service automatically:
curl -fsSL https://sh0.dev/install | shThe script performs these steps:
- Detects your CPU architecture (x86_64 or aarch64)
- Downloads the latest sh0 binary to
/usr/local/bin/sh0 - Sets executable permissions
- Creates a systemd service unit
- Enables and starts the service
Manual Download
If you prefer to install manually, download the binary directly:
# Download the binary (replace ARCH with amd64 or arm64)
curl -L -o /usr/local/bin/sh0 https://sh0.dev/download/latest/sh0-linux-ARCH
# Make it executable
chmod +x /usr/local/bin/sh0
# Start the server
sh0 serveVerify Installation
Check that sh0 is installed and running:
# Check the version
sh0 --version
# Check the service status
systemctl status sh0
# Verify the dashboard is accessible
curl -s http://localhost:9000/api/healthThe health endpoint should return a JSON response confirming the server is operational:
{"data": {"status": "ok", "version": "1.6.0", "uptime": 42}}Systemd Service Setup
If you used the quick install script, the systemd service is already configured. For manual installations, create the service file:
[Unit]
Description=sh0 Deployment Platform
After=docker.service
Requires=docker.service
[Service]
Type=simple
ExecStart=/usr/local/bin/sh0 serve
Restart=always
RestartSec=5
Environment=SH0_DATA_DIR=/var/lib/sh0
[Install]
WantedBy=multi-user.targetThen enable and start the service:
sudo systemctl daemon-reload
sudo systemctl enable sh0
sudo systemctl start sh0journalctl -u sh0 -f.Firewall Configuration
sh0 requires the following ports to be accessible:
| Port | Protocol | Purpose |
|---|---|---|
| 80 | TCP | HTTP traffic (redirects to HTTPS) |
| 443 | TCP | HTTPS traffic for your deployed applications |
| 9000 | TCP | sh0 dashboard and API |
If you are using ufw (Ubuntu/Debian):
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 9000/tcpUpdating sh0
Updating is as simple as replacing the binary and restarting the service. Your configuration, deployed apps, and data are preserved -- they live in the data directory, not inside the binary.
# Download the latest version
curl -fsSL https://sh0.dev/install | sh
# Or manually:
curl -L -o /usr/local/bin/sh0 https://sh0.dev/download/latest/sh0-linux-amd64
sudo systemctl restart sh0