All docs

How apps run

What a deploy replaces, what an app reserves, and what happens when one crashes.

An app on Marina is your code running behind an address, with a size it reserves and a history you can roll back through. This page is what happens around it.

What a deploy actually does

A deploy builds a new version of your app and starts it alongside the one already serving. Traffic moves over once the new version is up, and the old one is stopped after. Nothing is down in between.

That has two consequences worth knowing:

  • A failed build never takes your app down. The previous version keeps serving, and the build log tells you what went wrong.
  • Both versions exist for a moment. A deploy that runs a migration incompatible with the version still serving will break the old one for those seconds.
marina deploy
marina vessels builds

deploy rebuilds from whatever source the app already has: the repo, or the last directory you sent. deploy --dir . sends this directory instead.

The address

Every app gets one the moment it exists, on sites.marinahost.app, and it does not change. Attach a domain when you want your own name in front of it; the original keeps working.

Size

An app reserves memory and a share of compute, and the size you pick sets both:

SizeMemoryCompute
starter0.25 GB1x
standard0.5 GB2x
pro1 GB4x
pro-plus2 GB8x
marina vessels create shop --repo acme/shop --size standard
marina vessels scale pro

You are billed on the memory reserved, not on what the app uses, because reserved memory is what nobody else can have. Scaling is upgrades only, and the difference is settled from the wallet immediately rather than at the end of the month. The pricing page has the rates.

Restarts

The app restarts when you change a config var, attach a database, or deploy. Each of those is a new process with new environment, so state you kept in memory is gone; keep anything that matters in a database.

If your app crashes, it is started again. If it keeps crashing, it is marked failed rather than left looking like it is still deploying:

marina logs --tail 500

The filesystem is replaced

Each deploy starts from a fresh filesystem. Files your app wrote at runtime, uploads, caches, a SQLite file on disk, are gone the next time you deploy. Anything that must survive belongs in a database or on persistent storage.

That is a disk at /data, it survives every deploy, and it is billed per GB. Persistent storage is the whole story, including the part where adding one is a dashboard action rather than something a script can do.

Going back

marina vessels builds
marina vessels rollback <deploy>

Rollback puts an earlier deploy back deliberately, which is a different thing from a failed build leaving the old version up. Use it when the build succeeded and the result was wrong.

Running something once

marina run -- npx prisma migrate deploy

That runs inside the app, with its config vars and its database connection already set, and exits when the command does. It is how you run a migration or open a shell against real data without wiring anything up.

Watching it

marina status
marina vessels info shop
marina logs --follow