Skip to main content

Deployment Files and Directories

The installer runs inside a deployment directory with a fixed set of files, and the CLI generates them on the host itself — nothing has to be downloaded on another machine and copied over. soln install then creates .env from .env.example when it is missing.

Step 1: Install the CLI​

npm install -g @soln/cli
  • Success: the command finishes without an EACCES or 404 error
  • EACCES: permission denied — installs may need a user-level prefix: npm install -g @soln/cli --prefix "$HOME/.local", then add $HOME/.local/bin to PATH; or keep using npx @soln/cli for every command instead of a global install
  • 404 Not Found — the configured npm registry does not carry @soln/cli; check npm config get registry or ask your administrator for the internal registry
sl help
  • Success: the usage text lists sl prepare, sl install, sl doctor, sl status, sl upgrade, and sl rollback
  • command not found: sl — the global bin directory is not on PATH; run npm prefix -g and add its bin directory, or prefix every command with npx @soln/cli

Every command used on this page is documented with the rest of the CLI in Soln CLI; that page also lists soln version, the deployment commands (deployment register, deployment prepare, doctor, install, status, upgrade, rollback), and the exit codes.

Step 2: Create the Deployment Directory​

This-computer deployment (Docker Desktop, no sudo):

mkdir -p "$HOME/soln-tenant-runtime"
cd "$HOME/soln-tenant-runtime"

Windows (PowerShell) equivalent:

New-Item -ItemType Directory -Force "$HOME\soln-tenant-runtime"
Set-Location "$HOME\soln-tenant-runtime"

Server deployment (Linux):

sudo mkdir -p /opt/soln-tenant-runtime
sudo chown "$USER" /opt/soln-tenant-runtime
cd /opt/soln-tenant-runtime

How to write the --dir path​

Every deployment command (deployment register, deployment prepare, doctor, install, status, upgrade, rollback) takes --dir <path>, and that path is the deployment directory itself — the directory that holds docker-compose.yml and .env. It is not a file.

deployment register, deployment prepare, and deployment origin require an explicit --dir. Lifecycle commands use the current working directory when --dir is omitted, so after the cd above, sl doctor and soln doctor --dir "$HOME/soln-tenant-runtime" are the same thing.

# this-computer deployment, the directory from step 2
soln doctor --dir "$HOME/soln-tenant-runtime"

# server deployment
soln doctor --dir /opt/soln-tenant-runtime
soln doctor --dir "$HOME\soln-tenant-runtime"
soln doctor --dir "D:\soln\tenant-runtime"
  • A relative path is resolved against your current directory; an absolute path is used as it is
  • Quote the path when it contains spaces: --dir "/Users/me/Soln Tenant Runtime"
  • Do not put ~ inside quotes: --dir "~/soln-tenant-runtime" looks for a directory literally named ~. Use --dir "$HOME/soln-tenant-runtime", or leave it unquoted as ~/soln-tenant-runtime
  • A wrong path shows up as <dir>/docker-compose.yml (No such file or directory) and a missing <dir>/.env in the sl doctor output; it does not mean the host is broken

Step 3: Register and Generate Files Through the CLI​

Sign in and register the target Runtime using CLI Deployment Registration, then run:

sl deployment prepare --dir '<deployment-directory>'

This generates files from the Control Plane registration and .soln-install-setup.json, without manually copying tenant IDs, Runtime IDs, or Agent secrets. Select --deployment-target local|server and --deployment-mode singleMachine|externalServices during registration; this-computer deployment supports single-machine mode only.

Existing files are not overwritten by default. Review them before using prepare --force. Use sl upgrade for an installed directory. Resolve registration mismatches instead of manually editing identity fields in the setup file.

Step 4: Confirm the Files​

ls -l docker-compose.yml .env.example reverse-proxy.conf \
cloudflared-config.yml agent.config.json
  • Success: all five files are listed
  • No such file or directory — prepare did not run in this directory; repeat step 3
FileContent
docker-compose.ymlthe four Soln products and the reverse proxy, plus PostgreSQL, Temporal, and MinIO in single-machine mode
.env.exampleevery environment value the deployment needs, written with mode 0600; installation creates .env from it
reverse-proxy.confthe nginx configuration for the same-origin reverse proxy
cloudflared-config.ymlthe optional Cloudflare Named Tunnel ingress; the hostname stays a placeholder until the Runtime Origin is known
storage-iam-policy.example.jsona starting point for the bucket policy in external services mode
README.mdthe generated deployment notes

The tunnel credentials live in a secrets directory that Compose mounts; create it up front:

mkdir -p secrets
chmod 0700 secrets

Any other runtime directory the Compose file mounts is created by the CLI during installation; it does not need to be prepared by hand.

State and Generated Secrets​

After installing, the CLI writes its deployment state to .soln/deployment.json with mode 0600; that file never contains the Agent secret and must not be edited by hand. Missing or placeholder secrets are replaced during installation: RUNTIME_SESSION_ENCRYPTION_KEY, SOLN_BACKUP_ENCRYPTION_KEY, TENANT_RUNTIME_INTERNAL_SECRET, LUNA_TOOL_APPROVAL_SECRET, and, in single-machine mode, the bundled PostgreSQL and MinIO passwords. Keep .env at mode 0600.