WearLab¶
Full-stack app — Docker backend on the apps VPS, CI builds on the apps Woodpecker agent.
Repository¶
| Field | Value |
|---|---|
| Forgejo | alex/wearlab-main |
| Profile | fullstack |
| Woodpecker label | location: apps-vps |
| Public URL | https://wearlab.rafaelgonzalezalbes.com |
Deploy target¶
| Field | Value |
|---|---|
| Apps VPS IP | 82.165.177.110 |
| Path | /opt/apps/wearlab/ |
| SSH user | deploy (Woodpecker CI) |
| Edge proxy | Traefik in /opt/apps/traefik on apps VPS |
Woodpecker pipeline¶
Top of .woodpecker.yml:
labels:
location: apps-vps
Build and image steps run on the apps VPS agent. Deploy runs in a bridge-network Alpine container and SSHs to 172.17.0.1 (Docker bridge gateway on the apps host — not 127.0.0.1 and not the public IP). The remote command runs /opt/apps/wearlab/run-deploy.sh as deploy.
Deploy logic: scripts/ci-deploy-wearlab.sh in the app repo (template in templates/ci-deploy-wearlab.sh).
Woodpecker secrets¶
App repos use ssh_* (not deploy_ssh_*):
| Secret | Value |
|---|---|
ssh_host |
172.17.0.1 (CI deploy from apps agent container) |
ssh_user |
deploy |
ssh_key |
Base64-encoded OpenSSH private key (single line; Woodpecker mangles multiline keys) |
sops_age_key |
AGE secret line for wearlab SOPS |
Wire on the infra VPS:
cp ~/.ssh/bioscan_vps /tmp/wearlab_wire_key
SSH_KEY_FILE=/tmp/wearlab_wire_key bash scripts/set-wearlab-wp-ssh-secrets-sql.sh
Or from your machine: bash local/run-rewire-wearlab-on-vps.sh
Diagnose: bash scripts/diagnose-wearlab-ci-ssh.sh (on infra VPS).
Migration from infra VPS¶
WearLab previously ran on the infra VPS. Migration checklist: Migrate app to apps VPS.
Scripts:
bash scripts/bootstrap-apps-vps.sh— first-time apps VPS setupbash scripts/migrate-wearlab-uploads.sh— move Docker volume databash scripts/deploy-apps-woodpecker-agent.sh— remote CI agent on apps VPS
Monitoring¶
Uptime Kuma monitor WearLab (HTTPS) → https://wearlab.{domain} (apps VPS group in uptime-kuma/monitors.manifest.json).
See Monitoring.