Skip to main content

Server-First Docker Compose Install

This install starts Postgres, the Wacht server, and the web UI first. Probes are created from the dashboard and started one at a time.

Requirements

  • Docker
  • Docker Compose
  • A domain and reverse proxy if probes will run on other machines

Start Server And Web

This block creates the directory, generates the admin credentials, downloads the Compose example, and starts only the server-side services.

# Create the working directory.
mkdir wacht
cd wacht

# Generate local credentials.
POSTGRES_PASSWORD="$(openssl rand -hex 24)"
SEED_USER_EMAIL="you@example.com"
SEED_USER_PASSWORD="$(openssl rand -hex 18)"

# Write the values consumed by compose.yaml.
cat > .env <<EOF
POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
SEED_USER_EMAIL=${SEED_USER_EMAIL}
SEED_USER_PASSWORD=${SEED_USER_PASSWORD}
WACHT_WEB_PORT=127.0.0.1:3000
EOF

# Download the example stack.
curl -fsSL https://wacht.cloud/examples/compose.yaml \
-o compose.yaml

# Keep the first login credentials locally.
cat > credentials.txt <<EOF
Admin email: ${SEED_USER_EMAIL}
Admin password: ${SEED_USER_PASSWORD}
EOF

# Restrict files containing secrets.
chmod 600 .env credentials.txt

# Start only the server-side services.
docker compose up -d postgres server wacht-web

Open:

http://localhost:3000

Sign in with the credentials in credentials.txt. .env and credentials.txt contain secrets; do not commit or share them.

Create Probe Credentials

Create probe-1, probe-2, and probe-3 from the dashboard. Copy each generated secret before leaving the page.

Start Probes

Paste the generated secrets into this block, then run it from the same directory as compose.yaml.

# Add the dashboard-generated probe secrets.
cat >> .env <<'EOF'
PROBE_1_SECRET=paste-generated-secret-for-probe-1
PROBE_2_SECRET=paste-generated-secret-for-probe-2
PROBE_3_SECRET=paste-generated-secret-for-probe-3
EOF

# Keep the updated .env private.
chmod 600 .env

# Start probes one at a time without recreating the server.
docker compose up -d --no-deps probe-1
docker compose up -d --no-deps probe-2
docker compose up -d --no-deps probe-3
docker compose ps

The dashboard should show each probe online after its first heartbeat.

After verifying the install, change the generated admin password.

Remote Probes

For probes running on another machine, use the public Wacht URL instead of the internal Compose URL:

server: https://wacht.example.com
probe_id: probe-remote-1
secret: replace-with-the-generated-secret
heartbeat_interval: 30s

Run the probe container on that machine:

docker run -d --name wacht-probe \
--restart unless-stopped \
-v "$PWD/probe.yaml:/etc/wacht/probe.yaml:ro" \
ghcr.io/tmater/wacht-probe:0.1 --config=/etc/wacht/probe.yaml

Remote probes need network access to the Wacht web origin. The web container forwards /api to the server.

Stop

docker compose down

Remove the database volume only when you intentionally want a clean slate:

docker compose down -v