Runner Servers
The Reoclo Runner is the agent that connects your servers to Reoclo. Your server connects outbound to Reoclo, so no inbound ports are required.
The Reoclo Runner is a lightweight agent that runs on your server and maintains an outbound WebSocket connection to Reoclo. Commands are relayed through this connection, so no inbound ports are required.
Install via Docker
Section titled “Install via Docker”If your host doesn’t have systemd (Alpine, Void, NixOS without a wrapper, rpm-ostree based systems), or if you prefer running agents as containers, install via the official reoclo/runner Docker image instead. The Docker install supports the same deployment workflows, with optional opt-in privileges for host management operations.
When to Use Runner
Section titled “When to Use Runner”The Runner works with any Linux server:
- Servers behind firewalls or NAT
- Cloud VMs, bare metal, or home lab machines
- Private networks with no inbound port requirements
- Any server where you want automatic reconnection on network interruptions
How It Works
Section titled “How It Works”- You install the Runner agent on your server using a one-line command
- The agent connects to Reoclo over an outbound WebSocket (HTTPS)
- When you trigger a deployment, Reoclo sends commands through the WebSocket
- The agent executes the commands locally and streams the output back
- The agent maintains a heartbeat. If the connection drops, it reconnects automatically.
No inbound ports are needed. The agent makes all connections outbound.
Prerequisites
Section titled “Prerequisites”Before adding a Runner server, ensure:
- Linux server with Docker, git, and curl installed
- Outbound HTTPS connectivity to Reoclo (no proxy or firewall blocking outbound HTTPS)
- systemd (for service management)
- Docker permissions: The user running the agent must be able to run Docker commands without
sudo. Add the user to thedockergroup if needed:Log out and back in for the change to take effect.Terminal window sudo usermod -aG docker $USER
Step-by-Step Setup
Section titled “Step-by-Step Setup”1. Generate an Install Command
Section titled “1. Generate an Install Command”- Navigate to Servers in the Reoclo dashboard
- Click Add Server
- Select Runner as the connection type
- Click Generate Install Command
Reoclo generates a short-lived registration token and displays an install command like this:
curl -sSL https://get.reoclo.com | bash -s -- --token <TOKEN>2. Run the Install Command on Your Server
Section titled “2. Run the Install Command on Your Server”Copy the install command and run it on your server:
curl -sSL https://get.reoclo.com | bash -s -- --token <TOKEN>The installer does the following:
- Downloads the Runner binary
- Creates a systemd service (
reoclo-runner.service) - Registers with Reoclo using the one-time token
- Starts the service automatically
You’ll see output like this:
[Reoclo Runner Installer]Downloading runner binary...Installing systemd service...Registering with Reoclo...Starting reoclo-runner.service...✓ Runner installed and connected successfully3. Verify the Connection
Section titled “3. Verify the Connection”In the Reoclo dashboard, the server should transition to ACTIVE within a few seconds. If it stays in PROVISIONING, check the agent logs (see Monitoring the Runner below).
What the Installer Does
Section titled “What the Installer Does”The install script performs these steps:
- Downloads the Runner binary from Reoclo’s CDN
- Installs the binary to
/usr/local/bin/reoclo-runner - Creates a systemd service at
/etc/systemd/system/reoclo-runner.service - Registers the server with Reoclo using the one-time token
- Starts the service and enables it to start on boot
The service runs as the current user (the user who ran the install command). Ensure this user has Docker permissions.
Monitoring the Runner
Section titled “Monitoring the Runner”The Runner runs as a systemd service. You can check its status and logs using standard systemd commands.
Check Service Status
Section titled “Check Service Status”systemctl status reoclo-runnerYou should see:
● reoclo-runner.service - Reoclo Runner Agent Loaded: loaded (/etc/systemd/system/reoclo-runner.service; enabled) Active: active (running) since ...View Logs
Section titled “View Logs”journalctl -u reoclo-runner -fThis shows the agent’s logs in real time. You’ll see connection events, heartbeat messages, and command execution output.
Restart the Service
Section titled “Restart the Service”If the agent stops responding, restart it:
sudo systemctl restart reoclo-runnerStop the Service
Section titled “Stop the Service”To stop the agent (e.g., for maintenance):
sudo systemctl stop reoclo-runnerThe server will be marked UNREACHABLE in Reoclo until you start the service again.
Connection Resilience
Section titled “Connection Resilience”The Runner is designed to handle network interruptions gracefully:
- Automatic reconnection: If the WebSocket connection drops, the agent reconnects automatically with exponential backoff
- Heartbeat monitoring: The agent sends periodic heartbeats to Reoclo. If the connection is lost, Reoclo marks the server
UNREACHABLE - Auto-recovery: When the agent reconnects, the server automatically transitions back to
ACTIVE
No manual intervention is needed for transient network issues.
Uninstalling the Runner
Section titled “Uninstalling the Runner”To remove the Runner from your server:
-
Stop the service:
Terminal window sudo systemctl stop reoclo-runnersudo systemctl disable reoclo-runner -
Remove the service file:
Terminal window sudo rm /etc/systemd/system/reoclo-runner.servicesudo systemctl daemon-reload -
Remove the binary:
Terminal window sudo rm /usr/local/bin/reoclo-runner -
In the Reoclo dashboard, decommission or remove the server
Troubleshooting
Section titled “Troubleshooting”Runner Won’t Connect
Section titled “Runner Won’t Connect”Cause: Outbound HTTPS is blocked, or the token expired.
Fix:
-
Verify outbound HTTPS connectivity:
Terminal window curl -I https://api.reoclo.comYou should see a
200 OKor301response. If the connection times out, check your firewall or proxy settings. -
Check the agent logs:
Terminal window journalctl -u reoclo-runner -n 50Look for connection errors or token validation failures.
-
If the token expired, generate a new install command in the dashboard and run it again.
Server Shows UNREACHABLE
Section titled “Server Shows UNREACHABLE”Cause: The agent is stopped or disconnected.
Fix:
-
Check the service status:
Terminal window systemctl status reoclo-runner -
If the service is stopped, start it:
Terminal window sudo systemctl start reoclo-runner -
If the service is running but the server is still
UNREACHABLE, check the logs:Terminal window journalctl -u reoclo-runner -fLook for connection errors or authentication failures.
Install Command Fails
Section titled “Install Command Fails”Cause: curl isn’t installed, or the download failed.
Fix:
-
Ensure curl is installed:
Terminal window sudo apt updatesudo apt install -y curl -
Verify internet connectivity:
Terminal window curl -I https://get.reoclo.com -
If the download fails, check your firewall or proxy settings.
Deployment Fails with “docker not found” or “git not found”
Section titled “Deployment Fails with “docker not found” or “git not found””Cause: Required tools aren’t installed or aren’t in the PATH.
Fix:
-
Install the missing tools:
Terminal window sudo apt updatesudo apt install -y git docker.io curl -
Verify they’re in the
PATH:Terminal window which git docker curl -
Restart the Runner service:
Terminal window sudo systemctl restart reoclo-runner
Permission Denied (Docker)
Section titled “Permission Denied (Docker)”Cause: The user running the Runner doesn’t have Docker permissions.
Fix:
-
Add the user to the
dockergroup:Terminal window sudo usermod -aG docker $USER -
Log out and back in (or restart the server) for the change to take effect
-
Restart the Runner service:
Terminal window sudo systemctl restart reoclo-runner
Security Considerations
Section titled “Security Considerations”The Runner agent:
- Makes outbound connections only: No inbound ports are opened
- Uses WebSocket over HTTPS: All communication is encrypted in transit
- Authenticates with a one-time token: The token is used only during registration and is never reused
- Runs as a non-root user: The agent runs as the user who installed it (ensure this user has minimal privileges beyond Docker access)
You remain responsible for:
- Keeping the server’s OS and Docker installation up to date
- Restricting Docker access to trusted users
- Monitoring the agent logs for suspicious activity