feat(sp23): operator scripts (cyclone-init, post-deploy, smoke) + RUNBOOK
cyclone-init.sh generates /etc/cyclone/secrets/{db.key,admin_username,admin_pw} with openssl rand, prints the admin password once. post-deploy.sh installs logrotate.d/cyclone and a 5-minute healthcheck cron. smoke.sh brings up + logs in + parses a sample 837 end-to-end. RUNBOOK.md covers daily/weekly/quarterly/annual ops procedures plus the emergency runbook.
This commit is contained in:
Executable
+53
@@ -0,0 +1,53 @@
|
||||
#!/usr/bin/env bash
|
||||
# post-deploy.sh — set up host-side logrotate and healthcheck cron for a
|
||||
# production Cyclone deploy. Run once after `docker compose up -d`.
|
||||
set -euo pipefail
|
||||
|
||||
LOG_DIR="/var/log/cyclone"
|
||||
HEALTHCHECK_URL="${CYCLONE_HEALTHCHECK_URL:-http://localhost:8080/api/healthz}"
|
||||
HEALTHCHECK_EMAIL="${CYCLONE_HEALTHCHECK_EMAIL:-root}"
|
||||
CRON_USER="${CYCLONE_CRON_USER:-root}"
|
||||
|
||||
if [[ $EUID -ne 0 ]]; then
|
||||
echo "ERROR: post-deploy.sh must run as root." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 1. Logrotate — keeps 14 days of JSON logs compressed.
|
||||
cat > /etc/logrotate.d/cyclone <<'LOGROTATE'
|
||||
/var/log/cyclone/*.log {
|
||||
daily
|
||||
rotate 14
|
||||
compress
|
||||
delaycompress
|
||||
missingok
|
||||
notifempty
|
||||
copytruncate
|
||||
dateext
|
||||
dateformat -%Y%m%d
|
||||
}
|
||||
LOGROTATE
|
||||
|
||||
mkdir -p "${LOG_DIR}"
|
||||
chmod 755 "${LOG_DIR}"
|
||||
|
||||
# 2. Healthcheck cron — every 5 minutes, email if down.
|
||||
CRON_LINE="*/5 * * * * curl -fsS --max-time 10 ${HEALTHCHECK_URL} >/dev/null 2>&1 || echo 'Cyclone DOWN at \$(date)' | mail -s 'Cyclone healthz FAIL' ${HEALTHCHECK_EMAIL}"
|
||||
TMP_CRON="$(mktemp)"
|
||||
crontab -u "${CRON_USER}" -l 2>/dev/null > "${TMP_CRON}" || true
|
||||
# Remove any existing cyclone healthcheck line, then re-add.
|
||||
grep -v -F "Cyclone healthz" "${TMP_CRON}" > "${TMP_CRON}.new" || cp "${TMP_CRON}" "${TMP_CRON}.new"
|
||||
echo "${CRON_LINE}" >> "${TMP_CRON}.new"
|
||||
crontab -u "${CRON_USER}" "${TMP_CRON}.new"
|
||||
rm -f "${TMP_CRON}" "${TMP_CRON}.new"
|
||||
|
||||
cat <<EOF
|
||||
post-deploy.sh complete:
|
||||
- logrotate installed at /etc/logrotate.d/cyclone
|
||||
- healthcheck cron for ${HEALTHCHECK_URL} installed for user '${CRON_USER}'
|
||||
- logs rotate daily, 14 days retention
|
||||
|
||||
Verify with:
|
||||
logrotate -d /etc/logrotate.d/cyclone
|
||||
crontab -u ${CRON_USER} -l | grep -i cyclone
|
||||
EOF
|
||||
Reference in New Issue
Block a user