256ddfa5fa
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.
54 lines
1.7 KiB
Bash
Executable File
54 lines
1.7 KiB
Bash
Executable File
#!/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
|