Manual Deploy Environments

Environments

elements man deploy/environments Read as markdown

Naming and targeting environments, running tests before a deploy, and pointing a command at a deploy machine with -connect.

An environment is a runtime target, and the set is small and well-known: development (your local machine), production (the live site), and staging (a live pre-production site) when you want one. The name selects both the env file (config/env/<name>.env) and the deploy target (deploy.env.<name>).

An environment is not a site or a label. Deploying a second site (a demo, a marketing page, a client's instance) is a normal deploy to production (or staging) with its own domain and machines, not a new environment named after the site. Naming an environment demo just produces a stray config/env/demo.env and a target nothing else knows about. Reach for a new environment only when you have a genuinely separate runtime tier with its own machines.

deploy.env is a map of environment names to per-environment overrides.

deploy: {
  domain: "example.com",                    // shared default
  ssh: { user: "ubuntu", ... },             // shared default
  env: {
    production: {
      machines: [...],
    },
    staging: {
      domain: "staging.example.com",        // override
      machines: [...],
    },
  },
}

elements deploy defaults to production. elements deploy <env> targets a named environment.

Per-environment overrides: port, address, domain, ssl, tlsCerts, maint, ignoreStaleMigrations, license, ssh, services, packages, redirects, machines.

port and address resolve deploy.env.<name> first, then deploy, then the top-level server block, then the defaults (4000 and 127.0.0.1). Set them under server when you just want to change the port the app listens on; set them here when one deployed environment needs something different.

Timeout

A deploy fails if it runs longer than -timeout (default 30m). Raise it for a first deploy to a slow machine, where provisioning dominates:

elements deploy -timeout=1h

Tests

Tests run as part of every deploy, against the target environment's test database. There is no test environment to switch to in Elements. Each deploy environment has both an app database (<app>) and a test database (<app>_test), and tests for that environment run against the test database before the release goes live. A failing test aborts the deploy and the previous release continues serving traffic.

If you want an environment dedicated to verifying changes before production, configure a staging environment. Tests run there on every deploy the same way they run on production, against that environment's test database.

Connecting to Deploy Machines

Most commands accept -connect=<env>[#<machine>] to run against a deployed machine instead of the local project.

elements build -connect=production -json
elements db -connect=production#production1
elements test -connect=staging -json
elements ssh -connect=production
elements ssh -connect=production#production2

-connect without a value uses the first machine in production.

Reach for -connect when you have a question about a running deploy that you went looking for on purpose. A failed elements deploy is not one: its diagnostics already report what happened on the machine. See Operations.