Skip to content
Nautilo Documentation
Deploy / Build / AdministerDeploy Nautilo

Deploy with Docker Compose

Run a claimed Nautilo Server locally or on an SSH-accessible Docker host.

The packaged Compose path creates one isolated Nautilo stack: Nautilo, Logto, two PostgreSQL services, persistent volumes, and one first owner. Run it on your machine or on a Docker host reached over SSH.

Release channel

The Compose journey is qualified, but the signed public CLI installer and automatic stable-image selection are not published yet. Authorized release candidates use the exact CLI and immutable image supplied for that review.

Before you begin

You need the Nautilo CLI, an approved immutable image, Docker Engine with Compose v2, and a password manager. A remote deployment also needs a dedicated operator SSH key, an SSH-accessible Docker host, DNS, and firewall preparation.

nautilo --version
nautilo profile --help
nautilo deploy --help
docker version
docker compose version
export NAUTILO_IMAGE='ghcr.io/agentsea/nautilo-runtime@sha256:<approved-digest>'

Local Docker

nautilo profile add my-nautilo \
  --transport=local \
  --lifecycle=compose \
  --instance-id=my-nautilo \
  --image="$NAUTILO_IMAGE" \
  --yes

Do not invent a port. The named instance allocates its complete collision-safe port bundle.

Remote SSH/Docker

nautilo profile add my-nautilo \
  --transport=remote \
  --lifecycle=compose \
  --instance-id=my-nautilo \
  --ssh-host=203.0.113.10 \
  --ssh-user=nautilo \
  --ssh-identity-file="$HOME/.ssh/nautilo_operator" \
  --remote-path=/opt/nautilo \
  --domain=nautilo.example.com \
  --base-url=https://nautilo.example.com \
  --https=letsencrypt \
  [email protected] \
  --image="$NAUTILO_IMAGE" \
  --yes

Use generic, dedicated key names. Keep host authority in SSH/Docker; Nautilo application ownership does not grant Linux administrator access.

Deploy and claim

nautilo deploy \
  --profile my-nautilo \
  --from-registry \
  --image "$NAUTILO_IMAGE" \
  --finish guide

Veteran operators and automation can instead use the protected essential owner template with --owner-mode config, --owner-config, and an absent mode-0600 --owner-result destination. Never put the owner password or PIN in argv.

Follow Create the first owner. Deployment is complete only when the target reports owner-bound; healthy containers alone are not completion.

Verify and resume

nautilo status --profile my-nautilo
nautilo claim resume --profile my-nautilo --finish guide

Require the expected instance, healthy runtime, claimRequired: false, a working owner sign-in, and one useful model-backed action. Resume the same profile after interruption; never create a second stack to escape an expired claim.

Day two

nautilo logs --profile my-nautilo --follow
nautilo upgrade --profile my-nautilo --image "$NAUTILO_IMAGE"
nautilo destroy --profile my-nautilo

upgrade is the safe day-two transaction with backup, acceptance, and rollback. A soft destroy preserves volumes. nautilo destroy --hard --yes is destructive and removes volumes and first-owner custody.

Read secret custody and advanced operations before moving important work onto the Server.