• v0.2.2 520ad02dcf

    v0.2.2
    All checks were successful
    release / release (push) Successful in 20s
    Stable

    Ghost released this 2026-06-20 14:57:59 +00:00 | 51 commits to main since this release

    Added

    • Manual TLS provider (web.tls.provider: manual) — import your own certificate (internal CA,
      wildcard, etc.) instead of ACME/DNS-01. New ./src/deploy.sh set-cert imports the leaf cert +
      key (+ optional intermediate and root CA), assembles the chain (leaf→intermediate→root), verifies
      the key matches the cert, and reloads; no token required. Documented in doc/MANUAL-X509-CERT.md.
    • doc/MANAGE.md — day-to-day management guide; referenced from the README.
    • Docs: web UI + status screenshots; "Status dashboard" section in DESIGN.md.
    Downloads
  • v0.2.1 4a97b9498a

    v0.2.1
    All checks were successful
    release / release (push) Successful in 20s
    Stable

    Ghost released this 2026-06-20 11:37:05 +00:00 | 60 commits to main since this release

    Fixed

    • Release workflow now uses the automatic per-run token (github.token) instead of a
      manually-created secret, checks out into a clean subdir, and surfaces the release-API HTTP
      status — so a vX.Y.Z tag actually publishes a Forgejo release with the CHANGELOG notes.

    Changed

    • Install docs: clone the repo directly on the server (dnf install -y git + git clone)
      instead of scp — enables in-place git pull updates and an accurate commit ref in status.
    Downloads
  • v0.2.0 4f1ebf4797

    v0.2.0
    Some checks failed
    release / release (push) Failing after 27s
    Stable

    Ghost released this 2026-06-20 11:13:27 +00:00 | 62 commits to main since this release

    A large hardening, operability, and polish cycle: the mirror now runs rootless and
    self-hardens the host, the deploy.sh status/management UX was rebuilt, and the repo
    was reorganised into src/ + config/ + doc/.

    Added

    • System hardening (deploy.sh harden, also during install; opt out with --no-harden):
      guarded key-only SSH, fail2ban, hourly automatic security updates with auto-reboot,
      Docker-safe sysctl tuning, firewall least-privilege, and enforced filesystem permissions.
      Interactive enable/disable/re-apply per measure. Documented in doc/SYSTEM-HARDENING.md.
    • Web-tier abuse protection: fail2ban caddy-flood jail (firewall-bans HTTP 429 floods from
      the access log) + recidive jail; an optional SSH never-ban whitelist (PM_SSH_WHITELIST).
    • Security response headers (web.security_headers): nosniff, X-Frame-Options: DENY,
      Referrer-Policy, Server banner removed, and HSTS on HTTPS.
    • Management subcommands: status, start/stop/restart/down, logs, refresh,
      harden, set-fqdn, set-mirror-auth, set-mirror-creds, set-goaccess-creds,
      open-goaccess, and clear-config [data] (uninstall/reconfigure).
    • Status dashboard: boxed, colour-coded sections (System, Security, Services, Mirror,
      Mirror config, Content, Sync) with live sync progress, "last sweep X ago", blocked-IP count,
      effective rate limit, the outbound User-Agent, and the running version + commit ref.
    • Operator identity (operator.{name,email}): shown in the page footer and sent in the
      outbound User-Agent so MikroTik can contact whoever runs the mirror.
    • Timezone support (TZ): release/modified dates render in the operator's timezone in
      RFC 5322 format; deploy.sh prompts for and sets the host timezone.
    • Configurable TLS renewal window (web.tls.renewal_window_ratio).
    • config/env.example reference; repository-layout and disk-sizing docs in the README.

    Changed

    • Repository layout: deploy.sh, sync/, web/, monitor/ moved under src/;
      example config under config/; docs under doc/. Compose build contexts updated.
    • Containers run rootless (uid:gid 1000, no-new-privileges); Caddy keeps
      NET_BIND_SERVICE to bind 80/443. Host-bound data is owned by 1000:1000.
    • Rate limiting now defaults to all routes at 600 r/m (was feed-only at 60 r/m); tunable.
    • Download phase runs with parallel workers (default 2); release dates parsed from CHANGELOG.
    • Footer year is dynamic; redundant author link removed in favour of the repo link + version.

    Fixed

    • Completed architectures now skip all fetches/probes on later sweeps — no more per-sweep
      CDN hammering for files MikroTik doesn't offer (steady-state sweep dropped from minutes to seconds).
    • In-progress versions/architectures and *.part files are hidden until fully mirrored.
    • fail2ban requires the firewalld backend to actually enforce bans (ordered first, warned otherwise);
      re-applying an already-enabled measure now refreshes its config.
    • Real-time GoAccess board WebSocket fixed end-to-end (path, protocol, public port).

    Security

    • See Added — host hardening, rootless containers, web-tier abuse protection, and security
      headers are the headline of this release. See doc/SYSTEM-HARDENING.md.
    Downloads