f53ccbab4a
- New dl role — nginx serves files publicly over HTTPS with directory listing; atmoz/sftp on port 2223 for key-only uploads; both containers share /opt/dl/files volume - check-vault.sh gains a third tier: optional secrets are validated when present — vaultwarden_sso_client_secret must be non-empty, dl_sftp_authorized_keys must begin with a recognised SSH public key prefix - dl.ladkau.de added to DNS table, check-services.sh, and status dashboard - Configuration runbook section 7: deploy key generation, Gitea Actions scp workflow example, and SFTP client connection settings - Provisioning runbook documents the three-tier vault validation behaviour
63 lines
1.9 KiB
Bash
63 lines
1.9 KiB
Bash
#!/usr/bin/env bash
|
|
# Checks that all service endpoints are reachable and return the expected HTTP
|
|
# status code. Run this after provisioning, before configuring individual services.
|
|
# Usage: bash scripts/check-services.sh
|
|
|
|
set -uo pipefail
|
|
|
|
# "url expected_status timeout_seconds" tuples
|
|
# Nextcloud runs its first-time installation on the initial request (1-2 min),
|
|
# so it gets a much longer timeout than the other services.
|
|
CHECKS=(
|
|
"https://cloud.ladkau.de/dashboard/ 401 10"
|
|
"https://gitea.ladkau.de 200 10"
|
|
"https://nextcloud.ladkau.de 200 180"
|
|
"https://sso.ladkau.de/realms/master 200 10"
|
|
"https://mail.ladkau.de 200 10"
|
|
"https://cr.ladkau.de/v2/ 401 10"
|
|
"https://k8s.ladkau.de 200 10"
|
|
"https://vault.ladkau.de 200 10"
|
|
"https://dl.ladkau.de 200 10"
|
|
)
|
|
|
|
if ! command -v curl &>/dev/null; then
|
|
echo "ERROR: curl not found — install with: apt install curl or brew install curl" >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "==> Checking service endpoints"
|
|
|
|
FAILED=()
|
|
for check in "${CHECKS[@]}"; do
|
|
read -r url expected timeout <<< "$check"
|
|
|
|
if [ "$timeout" -gt 10 ]; then
|
|
printf " ... %s (first-run setup may take up to %d s)\n" "$url" "$timeout"
|
|
fi
|
|
|
|
actual=$(curl -sL -o /dev/null -w "%{http_code}" --max-time "$timeout" "$url" 2>/dev/null) || actual="000"
|
|
|
|
if [ "$actual" = "$expected" ]; then
|
|
printf " OK %s (%s)\n" "$url" "$actual"
|
|
else
|
|
printf " FAIL %s (expected %s, got %s)\n" "$url" "$expected" "$actual"
|
|
FAILED+=("$url")
|
|
fi
|
|
done
|
|
|
|
echo ""
|
|
|
|
if [ ${#FAILED[@]} -gt 0 ]; then
|
|
echo "ERROR: ${#FAILED[@]} endpoint(s) did not return the expected status:" >&2
|
|
for url in "${FAILED[@]}"; do
|
|
echo " - ${url}" >&2
|
|
done
|
|
echo "" >&2
|
|
echo " Check container status on the server: docker ps" >&2
|
|
echo " Check container logs: docker logs <container>" >&2
|
|
echo " Note: Keycloak and Nextcloud may take longer >90s on first boot — wait and retry." >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo " All services are reachable."
|