diff --git a/traefik/logrotate/install.sh b/traefik/logrotate/install.sh index 27f0f6a..bf8d397 100644 --- a/traefik/logrotate/install.sh +++ b/traefik/logrotate/install.sh @@ -1 +1,44 @@ -IyEvdXNyL2Jpbi9lbnYgYmFzaAojIE9uZS10aW1lIGluc3RhbGxlciBmb3IgVHJhZWZpayBsb2cgcm90YXRpb24uCiMKIyBNVVNUIGJlIHJ1biBtYW51YWxseSwgb25jZSwgb24gRUFDSCBvZiBkb2NrZXItMSwgZG9ja2VyLTIsIGRvY2tlci0zLgojIFRoaXMgaXMgaW50ZW50aW9uYWxseSBOT1QgcGFydCBvZiBzdGFjay1kZXBsb3kuc2ggLyB0aGUgV29vZHBlY2tlcgojIHBpcGVsaW5lOiBpdCBpbnN0YWxscyBhIGhvc3QtbGV2ZWwgY3Jvbi5kIGVudHJ5IGFuZCAvZXRjL2xvZ3JvdGF0ZS5kCiMgY29uZmlnLCBhbmQgYGRvY2tlciBzdGFjayBkZXBsb3lgIGhhcyBubyBtZWNoYW5pc20gdG8gcmVhY2ggb3V0c2lkZSB0aGUKIyBTd2FybS9jb250YWluZXIgYm91bmRhcnkgb250byBob3N0IGNyb24uIFNlZSBSRUFETUUubWQgZm9yIHdoeSB0aGlzIG5lZWRzCiMgdG8gcnVuIG9uIGFsbCB0aHJlZSBub2Rlcy4KIwojIFVzYWdlIChmcm9tIGEgY2hlY2tvdXQgb2YgdGhpcyByZXBvLCBvbiBlYWNoIG5vZGUpOgojICAgc3VkbyBiYXNoIHRyYWVmaWsvbG9ncm90YXRlL2luc3RhbGwuc2gKc2V0IC1ldW8gcGlwZWZhaWwKCmlmIFtbICRFVUlEIC1uZSAwIF1dOyB0aGVuCiAgZWNobyAiUnVuIGFzIHJvb3QgKHN1ZG8pLiIgPiYyCiAgZXhpdCAxCmZpCgpSRVBPX0RJUj0iJChjZCAiJChkaXJuYW1lICIke0JBU0hfU09VUkNFWzBdfSIpIiAmJiBwd2QpIgoKZWNobyAiSW5zdGFsbGluZyBsb2dyb3RhdGUgY29uZmlnLi4uIgppbnN0YWxsIC1tIDA2NDQgIiRSRVBPX0RJUi90cmFlZmlrLWxvZ3MuY29uZiIgL2V0Yy9sb2dyb3RhdGUuZC90cmFlZmlrLWxvZ3MKCmVjaG8gIkluc3RhbGxpbmcgcm90YXRpb24gd3JhcHBlci4uLiIKaW5zdGFsbCAtbSAwNzU1ICIkUkVQT19ESVIvdHJhZWZpay1sb2dyb3RhdGUuc2giIC91c3IvbG9jYWwvc2Jpbi90cmFlZmlrLWxvZ3JvdGF0ZS5zaAoKZWNobyAiSW5zdGFsbGluZyBjcm9uLmQgc2NoZWR1bGUgKGV2ZXJ5IDE1IG1pbnV0ZXMpLi4uIgpjYXQgPiAvZXRjL2Nyb24uZC90cmFlZmlrLWxvZ3JvdGF0ZSA8PCAnRU9GJwojIE1hbmFnZWQgYnkgaG9tZWxhYi9jb21wb3NlLWZpbGVzIHRyYWVmaWsvbG9ncm90YXRlL2luc3RhbGwuc2ggLS0gZG8gbm90CiMgaGFuZC1lZGl0OyB1cGRhdGUgdHJhZWZpay9sb2dyb3RhdGUvKi57Y29uZixzaH0gaW4gR2l0ZWEgYW5kIHJlLXJ1bgojIGluc3RhbGwuc2ggaW5zdGVhZC4KKi8xNSAqICogKiAqIHJvb3QgL3Vzci9sb2NhbC9zYmluL3RyYWVmaWstbG9ncm90YXRlLnNoCkVPRgpjaG1vZCAwNjQ0IC9ldGMvY3Jvbi5kL3RyYWVmaWstbG9ncm90YXRlCgplY2hvICJWZXJpZnlpbmcgbG9ncm90YXRlIGNvbmZpZyBzeW50YXguLi4iCmxvZ3JvdGF0ZSAtZCAvZXRjL2xvZ3JvdGF0ZS5kL3RyYWVmaWstbG9ncwoKZWNobyAiRG9uZS4gRmlyc3Qgcm90YXRpb24gY2hlY2sgcnVucyBvbiB0aGUgbmV4dCBjcm9uIHRpY2sgKHVwIHRvIDE1IG1pbikuIgplY2hvICJUaGlzIG9ubHkgcm90YXRlcyBnb2luZyBmb3J3YXJkIG9uY2UgdGhlIGZpbGUgY3Jvc3NlcyB0aGUgc2l6ZSB0aHJlc2hvbGQuIgplY2hvICJUbyBzaHJpbmsgdGhlIEVYSVNUSU5HIGFscmVhZHktbGFyZ2UgbG9nIGZpbGUsIHNlZSBSRUFETUUubWQgLS0gdGhhdCBpcyIKZWNobyAiYSBzZXBhcmF0ZSwgZGVsaWJlcmF0ZSBtYW51YWwgc3RlcCAobm90IGRvbmUgYnkgdGhpcyBzY3JpcHQpIGJlY2F1c2UgaXQiCmVjaG8gIm5lZWRzIGRpc2sgaGVhZHJvb20gYXdhcmVuZXNzIGZpcnN0LiI= \ No newline at end of file +#!/usr/bin/env bash +# One-time installer for Traefik log rotation. +# +# MUST be run manually, once, on EACH of docker-1, docker-2, docker-3. +# This is intentionally NOT part of stack-deploy.sh / the Woodpecker +# pipeline: it installs a host-level cron.d entry and /etc/logrotate.d +# config, and `docker stack deploy` has no mechanism to reach outside the +# Swarm/container boundary onto host cron. See README.md for why this needs +# to run on all three nodes. +# +# Usage (from a checkout of this repo, on each node): +# sudo bash traefik/logrotate/install.sh +set -euo pipefail + +if [[ $EUID -ne 0 ]]; then + echo "Run as root (sudo)." >&2 + exit 1 +fi + +REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +echo "Installing logrotate config..." +install -m 0644 "$REPO_DIR/traefik-logs.conf" /etc/logrotate.d/traefik-logs + +echo "Installing rotation wrapper..." +install -m 0755 "$REPO_DIR/traefik-logrotate.sh" /usr/local/sbin/traefik-logrotate.sh + +echo "Installing cron.d schedule (every 15 minutes)..." +cat > /etc/cron.d/traefik-logrotate << 'EOF' +# Managed by homelab/compose-files traefik/logrotate/install.sh -- do not +# hand-edit; update traefik/logrotate/*.{conf,sh} in Gitea and re-run +# install.sh instead. +*/15 * * * * root /usr/local/sbin/traefik-logrotate.sh +EOF +chmod 0644 /etc/cron.d/traefik-logrotate + +echo "Verifying logrotate config syntax..." +logrotate -d /etc/logrotate.d/traefik-logs + +echo "Done. First rotation check runs on the next cron tick (up to 15 min)." +echo "This only rotates going forward once the file crosses the size threshold." +echo "To shrink the EXISTING already-large log file, see README.md -- that is" +echo "a separate, deliberate manual step (not done by this script) because it" +echo "needs disk headroom awareness first."