Skip to content

Your first deploy

You have a cluster reading Provisioned in the console (install.md). This page puts an app on it and explains what the console tells you while that happens.

1. Pick an app

Open Catalog. Each tile is an app Mesopod packages. Click one to open its deploy form.

2. Fill in the form

  • Name (optional) — a label for your app list. Useful when you run the same app twice ("Family photos", "Work notes"). Change it whenever.
  • Subdomain — the first label of the app's address. The form shows the rest of the address as you type it.
  • Deploy to — which cluster runs it. Your own clusters are listed by name with "your server" beside them; Mesopod Cloud is the shared cluster we run. A cluster that isn't ready is shown greyed out with the reason (not provisioned yet, still provisioning, provisioning failed) rather than hidden, so you know what to go fix.
  • Volumes — only for apps that store data; see below.

Then press the deploy button — it names the app, Deploy Memos.

3. Watch it come up

The console shows a Deploying panel with a live timer, then the app's own row. The status words mean:

Status What it means
pending, rendered, dispatched Mesopod has the request and is sending it to your server.
deploying Your server is creating the workloads.
running The app is up and its services report healthy.
degraded The app is up, but at least one service is unhealthy. Check its logs.
render failed Mesopod couldn't turn your form into a deployable app. It never reached your server — that one is ours; tell us.
apply failed Your server rejected the deploy. The reason is on the app page.
stopped You stopped it, on purpose. Its data is kept.
destroying, removed You uninstalled it; the tombstone stays in the ledger.
vanished The workloads disappeared without anyone asking. That's drift — tell us.

A first deploy takes as long as the app's images take to pull. Two minutes is normal; a large app on a slow connection can take longer.

If your server happens to be offline, the deploy is still accepted and queues. It runs when the server reconnects.

4. Open it

Apps live at:

https://<subdomain>.<cluster-slug>.mesopod.app

So photos on the cluster you named basement-nuc is https://photos.basement-nuc.mesopod.app. The certificate is a real public one; the address it resolves to is your server's own, so the traffic never leaves your network.

The app page shows the URL as soon as there is one, with a link beside it.

If the name doesn't resolve at home, it is almost always your router's DNS rebind protection — the fix is in install.md. From outside the house, see remote-access-tailscale.md.

Volumes, and why your data survives

Apps that store data declare one disk per volume slot. On the deploy form you either create a new volume or attach one you already have, and Mesopod tracks it as its own object — not as a detail of the app.

That separation is what makes the lifecycle safe:

  • Stop an app and its volumes are kept, still attached to it.
  • Uninstall an app and its data is kept and reattachable to a future instance — unless you tick the box in the confirmation that deletes it.
  • Restarting the machine, or the app, changes nothing about the data.

To bring in data you already have — an existing Nextcloud directory, a photo library — use a host directory volume: register the directory on the cluster (the console hands you a one-line command, and the chip beside the root flips to Verified once your server confirms it), then attach it. Mesopod mounts what is already on the disk.

Kept is not the same as backed up. Before you depend on an app, read snapshots.md.

Stopping, starting, uninstalling

On the app page: Stop frees the compute and keeps everything else; Start brings it back with its data; Uninstall removes the app and its services from your server, keeping the data unless you ask otherwise in the confirmation.

When it doesn't go this way

troubleshooting.md — keyed by the message you are looking at.