Deploy

Get TinyCld running

TinyCld is one container plus a small persistent volume for its database. Pick a managed host for a click-and-go setup, or run it yourself on any Linux box with no platform markup.

01

One-click hosted

A button, an account, a running server. Both attach a persistent volume so your data survives restarts.

Render

Blueprint-driven. Render reads render.yaml, provisions the service and a persistent Disk, and terminates HTTPS for you.

Deploy to Render

Needs a paid instance (~$7/mo) — a Disk can't attach to Render's free tier, and the database lives on the Disk.

Railway

Deploy the public image with a Volume mounted for the database. Railway gives you an HTTPS domain that proxies straight to the container.

Deploy on Railway

From ~$5/mo (Hobby). The one-time $5 trial credit — and trial volumes — expire.

02

Fly.io

The strongest storage story — Volumes, distributed SQLite via LiteFS, S3 uploads via Tigris. No button; a short CLI flow.

# grab the fly.toml, then:
$ fly launch --image ghcr.io/tinycld/tinycld:latest --no-deploy --copy-config
$ fly volumes create pb_data --size 1
$ fly deploy
 https://your-app.fly.dev

The fly.toml mounts the volume at the database path and sets up the health check. A single volume is single-region — perfect for SQLite, and a single point of failure until you add LiteFS replicas.

03

Self-host — no platform markup

Any Linux box with Docker. A Hetzner CX-class VM runs TinyCld for a small team at around €4/month.

# on any Linux VM with Docker
$ mkdir tinycld && cd tinycld
$ curl -O https://raw.githubusercontent.com/tinycld/tinycld/main/docker-compose.yml
$ docker compose up -d
 ready · https://mail.example.org

Full walkthrough in the installation guide — autocert HTTPS, recommended providers, backups. Or run it under a self-hosted PaaS (Coolify, CapRover, Dokploy) using the same compose file.

04

Bare metal — no Docker

A native systemd service, built from source on the host. No container runtime, no reverse proxy — the app terminates TLS itself via autocert and binds :80/:443 directly.

# fresh Debian/Ubuntu host, as root:
$ curl -fsSL https://raw.githubusercontent.com/tinycld/tinycld/main/deploy/bare-metal/install.sh \
    | DOMAIN=tinycld.example.com bash
 serving https://tinycld.example.com
These scripts are a starting-point example. install.sh and build.sh assume a Debian/Ubuntu host on x86-64 and that the app owns :80/:443. Most setups need edits — a different distro or package manager, an ARM box, or putting TinyCld behind an existing reverse proxy or load balancer. Read them before you run them, and adapt them to your environment.

install.sh installs the toolchain, creates a service user, builds from source via build.sh, writes the systemd unit, and starts it. Re-run it (or build.sh alone) to rebuild and restart on update — the box keeps the full Node + Go toolchain, since the in-app package installer rebuilds on the host. Details in the bare-metal README.