76 lines
1.9 KiB
Bash
76 lines
1.9 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
set -euo pipefail
|
||
|
|
|
||
|
|
: "${UPTIMELINK_CONTROLLER_URL:?UPTIMELINK_CONTROLLER_URL is required}"
|
||
|
|
: "${UPTIMELINK_RUNNER_ID:?UPTIMELINK_RUNNER_ID is required}"
|
||
|
|
: "${UPTIMELINK_RUNNER_TOKEN:?UPTIMELINK_RUNNER_TOKEN is required}"
|
||
|
|
|
||
|
|
target_port="${UPTIMELINK_TARGET_PORT:-18081}"
|
||
|
|
|
||
|
|
install -d -m 0755 /opt/uptimerunner /etc/uptimerunner
|
||
|
|
|
||
|
|
cd /uptime.link/uptimerunner
|
||
|
|
deno compile \
|
||
|
|
--allow-net \
|
||
|
|
--allow-read \
|
||
|
|
--allow-write \
|
||
|
|
--allow-run \
|
||
|
|
--allow-env \
|
||
|
|
--allow-sys \
|
||
|
|
--output /opt/uptimerunner/uptimerunner \
|
||
|
|
mod.ts
|
||
|
|
|
||
|
|
chmod +x /opt/uptimerunner/uptimerunner
|
||
|
|
ln -sf /opt/uptimerunner/uptimerunner /usr/local/bin/uptimerunner
|
||
|
|
|
||
|
|
cat >/opt/uptimerunner/target-server.ts <<'DENO'
|
||
|
|
const port = Number(Deno.env.get('UPTIMELINK_TARGET_PORT') ?? '18081');
|
||
|
|
|
||
|
|
Deno.serve({ hostname: '127.0.0.1', port }, () => {
|
||
|
|
return new Response('runner-local healthy\n', {
|
||
|
|
headers: { 'content-type': 'text/plain' },
|
||
|
|
});
|
||
|
|
});
|
||
|
|
DENO
|
||
|
|
|
||
|
|
cat >/etc/systemd/system/uptimerunner-target.service <<SYSTEMD
|
||
|
|
[Unit]
|
||
|
|
Description=uptime.link Vagrant target service
|
||
|
|
After=network-online.target
|
||
|
|
Wants=network-online.target
|
||
|
|
|
||
|
|
[Service]
|
||
|
|
ExecStart=/usr/local/bin/deno run --allow-net --allow-env /opt/uptimerunner/target-server.ts
|
||
|
|
Restart=always
|
||
|
|
RestartSec=2
|
||
|
|
User=root
|
||
|
|
Group=root
|
||
|
|
Environment=UPTIMELINK_TARGET_PORT=${target_port}
|
||
|
|
|
||
|
|
[Install]
|
||
|
|
WantedBy=multi-user.target
|
||
|
|
SYSTEMD
|
||
|
|
|
||
|
|
uptimerunner config write \
|
||
|
|
--url "${UPTIMELINK_CONTROLLER_URL}" \
|
||
|
|
--runner-id "${UPTIMELINK_RUNNER_ID}" \
|
||
|
|
--token "${UPTIMELINK_RUNNER_TOKEN}" \
|
||
|
|
--labels 'scenario:vagrant,role:internal' \
|
||
|
|
--interval 1000 \
|
||
|
|
--concurrency 2
|
||
|
|
|
||
|
|
uptimerunner service install
|
||
|
|
systemctl daemon-reload
|
||
|
|
systemctl reset-failed uptimerunner-target.service || true
|
||
|
|
systemctl enable --now uptimerunner-target.service
|
||
|
|
|
||
|
|
for _ in $(seq 1 30); do
|
||
|
|
if curl -fsS "http://127.0.0.1:${target_port}/health" >/dev/null 2>&1; then
|
||
|
|
break
|
||
|
|
fi
|
||
|
|
sleep 1
|
||
|
|
done
|
||
|
|
|
||
|
|
curl -fsS "http://127.0.0.1:${target_port}/health" >/dev/null
|
||
|
|
systemctl restart uptimerunner.service
|