# Any Linux box

At the end, Loopgate's runner is running on your box and listed on your org's Devices page in the portal.

## At a glance

**Time:** 5 minutes.

**You need:**

- A Linux box with Docker, 2 GB of free memory and 5 GB of free disk, plus room for your code. x86 or Arm both run it. [AWS](aws.md), [Google Cloud](gcp.md), [Azure](azure.md) and [A VPS](vps.md) make one.
- A Terminal on it
- Your Loopgate sign-in as an owner or admin of your org

## Steps

1. **Check that Docker Compose is there.** With no Docker, `curl -fsSL https://get.docker.com | sh` installs it.

   ```sh
   docker compose version
   ```

   You should see: `Docker Compose version v2.` followed by more numbers.

2. **On your laptop, open the portal's Devices page and press Add a runner**, then **Copy**. The line holds a token that works once, for an hour. Press Add a runner again for a fresh one.

   You should see: a line starting `curl -fsSL https://loopgate.dev/runner/install.sh` and `Expires in 59 min · Waiting for the box…`.

3. **Paste the line on the box and press Enter.**

   You should see: the image download, `Waiting for the runner to start and register…`, then `Runner connected. Open the portal's Devices page: …`. The portal says `Connected · <the box's name>`, and the runner's row shows an address ending `trycloudflare.com` marked `temporary`.

4. **Read the runner's own lines.** The install line made a `loopgate` folder in your home folder.

   ```sh
   cd ~/loopgate && docker compose logs runner
   ```

   You should see: `Registered as <name> with <your org>` and `Runner ready at https://….trycloudflare.com (temporary address)`.

5. **In the portal's Devices page, press Open on the runner's row.**

   You should see: the workbench, served by your box.

## Good to know

- The runner gets its first address by itself, through a free Cloudflare quick tunnel. It changes when the box restarts. [A permanent address with Cloudflare Tunnel](address-cloudflare.md) or [with Tailscale](address-tailscale.md) keeps it.
- `runner.env` in the `loopgate` folder holds the runner's settings, readable only by you.
- [By hand](by-hand.md) downloads the files, writes `runner.env` and signs the runner in with a device code instead.

## If something is off

- **The script says `The runner did not register within two minutes.`** The lines under it are the runner's. `The install token was refused: …` says why, such as a token already used or expired, and retries each minute. Press Add a runner again and paste the new line.
- **Docker says permission denied.** Your user cannot run Docker yet. The cloud page's last steps fix that.
- **Anything else.** [Updates and backups](care.md) says what each line means.

## Next

- [Engines, GitHub and a repository](sign-in.md)
