Getting started
From zero to streaming in five minutes.
The shortest path through Pier + Beacon: sign up, register a host, push a deploy, watch its logs in real time.
1. Sign up
Head to pier.repoless.com/signup and enter your email. We'll send a 6-digit OTP code. Same session works for both Pier and Beacon — you don't need to sign in twice.
First-time signups create a workspace owned by your email. Invite teammates from Admin → Team; they sign in with the same OTP flow and start with no project access until you grant it.
2. Install the agent on a host
Pier needs at least one Linux host to deploy to. The agent installs in one curl: it hardens the box (UFW, fail2ban, unattended-upgrades), joins the Wireguard mesh, and registers with the control plane.
Mint a bootstrap token
Open Admin → Servers → Add server. Pick a label, copy the rendered install one-liner.
# On the new host (Ubuntu/Debian, root or sudo):
$ curl -fsSL https://pier.repoless.com/install \
| sudo BOOTSTRAP_TOKEN=dwb_••••• LABEL=fra-1 shThe script:
- Downloads the agent binary (SHA256-verified) into
/opt/deploywatch/agent - Writes a systemd service
deploywatch-agent.service+ watchdog - Exchanges the bootstrap token for a long-lived host token (
dwh_*) stored in/etc/deploywatch/agent.env - Runs the hardening tasks (UFW, fail2ban, unattended-upgrades)
- Joins the Wireguard mesh and reports back
Verify
/admin/servers with a green dot. Disk, CPU, RAM, kernel, and Docker versions show on its detail page.3. Create a project
Projects group apps that share a namespace, RBAC, and (importantly) a Beacon project for log routing. From Projects → Create a project, pick a slug — this is the canonical name used by both Pier and Beacon.
Slug matters
acme — apps inside it become acme-api, acme-web, etc.4. Deploy your first app
Inside a project, click New app. Pier supports four build modes:
- Compose — point at a
docker-compose.ymlin your repo - Dockerfile — Pier builds with BuildKit + cache
- Static — public-folder static sites
- Nixpacks — auto-detect language + build
Connect your GitHub account, pick a repo, choose a branch, and the first deploy starts. Push to main and Pier health-gates a blue-green swap — old containers keep serving traffic until the new ones probe healthy.
# Example app.yml (committed to your repo root)
app: api
build:
mode: dockerfile
dockerfile: ./Dockerfile
processes:
web:
cmd: ./bin/server
health: { path: /healthz, port: 8080 }
worker:
cmd: ./bin/jobs
domain: api.acme.com
env:
NODE_ENV: production5. Stream logs into Beacon
Stdout from every container deployed by Pier is forwarded to Beacon automatically — the agent attaches a host token at install time and tags every line with the deploy revision that produced it.
For hosts you provisioned outside Pier, install Vector with the provided vector.yaml config in deploy/vector/. Each container's service identity is derived from Compose labels + container-name role prefix:
service = <serviceName>[-<role>][-pr-<id>]
# web-bgyb… → acme-api-web
# worker-bgyb… → acme-api-worker
# web-bgyb…-pr-163 → acme-api-web-pr-1636. Install the Beacon CLI
For local development and live-tailing:
$ curl -fsSL https://beacon.repoless.com/install | sh
$ logwatch login # browser OTP → ~/.logwatch/token
$ logwatch apps # list every service + line count
$ logwatch tail acme-api-web # live taillogwatch for backward compatibility with existing shell aliases and scripts. See CLI reference.