traefik: add log rotation for access.log / traefik.log #23

Merged
AVB merged 9 commits from fix/traefik-log-rotation into main 2026-09-12 00:29:28 -07:00
Showing only changes of commit 0a334fa781 - Show all commits
+44 -1
View File
@@ -1 +1,44 @@
IyEvdXNyL2Jpbi9lbnYgYmFzaAojIE9uZS10aW1lIGluc3RhbGxlciBmb3IgVHJhZWZpayBsb2cgcm90YXRpb24uCiMKIyBNVVNUIGJlIHJ1biBtYW51YWxseSwgb25jZSwgb24gRUFDSCBvZiBkb2NrZXItMSwgZG9ja2VyLTIsIGRvY2tlci0zLgojIFRoaXMgaXMgaW50ZW50aW9uYWxseSBOT1QgcGFydCBvZiBzdGFjay1kZXBsb3kuc2ggLyB0aGUgV29vZHBlY2tlcgojIHBpcGVsaW5lOiBpdCBpbnN0YWxscyBhIGhvc3QtbGV2ZWwgY3Jvbi5kIGVudHJ5IGFuZCAvZXRjL2xvZ3JvdGF0ZS5kCiMgY29uZmlnLCBhbmQgYGRvY2tlciBzdGFjayBkZXBsb3lgIGhhcyBubyBtZWNoYW5pc20gdG8gcmVhY2ggb3V0c2lkZSB0aGUKIyBTd2FybS9jb250YWluZXIgYm91bmRhcnkgb250byBob3N0IGNyb24uIFNlZSBSRUFETUUubWQgZm9yIHdoeSB0aGlzIG5lZWRzCiMgdG8gcnVuIG9uIGFsbCB0aHJlZSBub2Rlcy4KIwojIFVzYWdlIChmcm9tIGEgY2hlY2tvdXQgb2YgdGhpcyByZXBvLCBvbiBlYWNoIG5vZGUpOgojICAgc3VkbyBiYXNoIHRyYWVmaWsvbG9ncm90YXRlL2luc3RhbGwuc2gKc2V0IC1ldW8gcGlwZWZhaWwKCmlmIFtbICRFVUlEIC1uZSAwIF1dOyB0aGVuCiAgZWNobyAiUnVuIGFzIHJvb3QgKHN1ZG8pLiIgPiYyCiAgZXhpdCAxCmZpCgpSRVBPX0RJUj0iJChjZCAiJChkaXJuYW1lICIke0JBU0hfU09VUkNFWzBdfSIpIiAmJiBwd2QpIgoKZWNobyAiSW5zdGFsbGluZyBsb2dyb3RhdGUgY29uZmlnLi4uIgppbnN0YWxsIC1tIDA2NDQgIiRSRVBPX0RJUi90cmFlZmlrLWxvZ3MuY29uZiIgL2V0Yy9sb2dyb3RhdGUuZC90cmFlZmlrLWxvZ3MKCmVjaG8gIkluc3RhbGxpbmcgcm90YXRpb24gd3JhcHBlci4uLiIKaW5zdGFsbCAtbSAwNzU1ICIkUkVQT19ESVIvdHJhZWZpay1sb2dyb3RhdGUuc2giIC91c3IvbG9jYWwvc2Jpbi90cmFlZmlrLWxvZ3JvdGF0ZS5zaAoKZWNobyAiSW5zdGFsbGluZyBjcm9uLmQgc2NoZWR1bGUgKGV2ZXJ5IDE1IG1pbnV0ZXMpLi4uIgpjYXQgPiAvZXRjL2Nyb24uZC90cmFlZmlrLWxvZ3JvdGF0ZSA8PCAnRU9GJwojIE1hbmFnZWQgYnkgaG9tZWxhYi9jb21wb3NlLWZpbGVzIHRyYWVmaWsvbG9ncm90YXRlL2luc3RhbGwuc2ggLS0gZG8gbm90CiMgaGFuZC1lZGl0OyB1cGRhdGUgdHJhZWZpay9sb2dyb3RhdGUvKi57Y29uZixzaH0gaW4gR2l0ZWEgYW5kIHJlLXJ1bgojIGluc3RhbGwuc2ggaW5zdGVhZC4KKi8xNSAqICogKiAqIHJvb3QgL3Vzci9sb2NhbC9zYmluL3RyYWVmaWstbG9ncm90YXRlLnNoCkVPRgpjaG1vZCAwNjQ0IC9ldGMvY3Jvbi5kL3RyYWVmaWstbG9ncm90YXRlCgplY2hvICJWZXJpZnlpbmcgbG9ncm90YXRlIGNvbmZpZyBzeW50YXguLi4iCmxvZ3JvdGF0ZSAtZCAvZXRjL2xvZ3JvdGF0ZS5kL3RyYWVmaWstbG9ncwoKZWNobyAiRG9uZS4gRmlyc3Qgcm90YXRpb24gY2hlY2sgcnVucyBvbiB0aGUgbmV4dCBjcm9uIHRpY2sgKHVwIHRvIDE1IG1pbikuIgplY2hvICJUaGlzIG9ubHkgcm90YXRlcyBnb2luZyBmb3J3YXJkIG9uY2UgdGhlIGZpbGUgY3Jvc3NlcyB0aGUgc2l6ZSB0aHJlc2hvbGQuIgplY2hvICJUbyBzaHJpbmsgdGhlIEVYSVNUSU5HIGFscmVhZHktbGFyZ2UgbG9nIGZpbGUsIHNlZSBSRUFETUUubWQgLS0gdGhhdCBpcyIKZWNobyAiYSBzZXBhcmF0ZSwgZGVsaWJlcmF0ZSBtYW51YWwgc3RlcCAobm90IGRvbmUgYnkgdGhpcyBzY3JpcHQpIGJlY2F1c2UgaXQiCmVjaG8gIm5lZWRzIGRpc2sgaGVhZHJvb20gYXdhcmVuZXNzIGZpcnN0LiI=
#!/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."