My App

Add a remote server

Provision isolated deployment servers and target workloads safely.

Remote deployment servers are independent Docker environments. Upstand connects over SSH, installs Docker when necessary, initializes a local Swarm, creates the attachable upstand-network, installs Caddy, and executes builds and deployments against that server's Docker daemon.

This is intentionally separate from the control-plane Swarm. Remote servers do not join the control-plane cluster and are not scheduled through manager-node placement constraints. This prevents Raft, overlay networking, and application workloads from being coupled to the Upstand control plane.

Prerequisites

  • The server accepts SSH from the Upstand API server.
  • You have an SSH key pair. Add the public key to the worker's ~/.ssh/authorized_keys; store the private key in SSH Keys in Upstand.
  • TCP 80 and 443 are available for Caddy, unless you have configured different web-server ports.
  • The server has a routable address that it can advertise to its own Docker Swarm. Private/VPC addresses are supported when the server's Docker networking is configured for them.

Guided setup

  1. In SSH Keys, create or import a key. Copy its public key to the target server.
  2. In Remote Servers, choose Add Server and supply a descriptive name, IP address, SSH port, user, and the SSH key.
  3. Choose Setup Server. The status moves from idle to setting_up and then to ready or failed.
  4. Upstand initializes the server's own Swarm and creates upstand-network idempotently.
  5. Upstand installs and starts Caddy on the server.
  6. When creating an application, Compose stack, or database resource, select this server. Build commands, Docker API calls, networks, services, and routing are executed on that server.

The Cluster page is the separate workflow for manually adding worker or manager nodes to the control-plane Swarm. It should be used only when shared Swarm scheduling is explicitly required.

Failure guide

SymptomMeaningFix
SSH authentication failedThe saved private key is not acceptedRe-copy the matching public key, verify owner and file permissions, and retry
Connection timed outControl plane cannot reach SSHCheck IP, port, firewall, security groups, and VPN routing
Already part of a SwarmThe server has an existing independent or external SwarmUpstand can use an active existing Swarm; leave it only when you intentionally want to replace it
Swarm initialization failsThe advertised address is not usable or Docker is unhealthyCheck docker info, select a routable address, and verify Docker daemon logs
Caddy cannot startPorts 80/443 are occupied or the remote Docker daemon is unavailableFree the ports or configure web-server ports, then rerun setup
Remote deployment cannot connectSSH or Docker-over-SSH is unavailableVerify the key, user permissions, Docker socket access, and SSH connectivity

Upstand does not store an SSH password for remote provisioning. Key authentication is deliberate: it is auditable, rotatable, and avoids persisting a reusable root password. The Docker CLI uses a temporary SSH configuration for each deployment and removes it after the job completes.

On this page