scripts/snapshot.mjs renders every public page (home, browse, publish, boundaries, 8 categories, every active listing) to <out>/<path>/index.html, plus /sitemap.xml, /robots.txt, and the two static assets. Writing to a directory next to the service AND uploading via `aws s3 sync` are two flags on the same command: --out to pick the directory, --upload to push. Live routes added for /sitemap.xml and /robots.txt so a crawler hitting the live service sees the same enumeration the snapshot bakes into the bucket. renderSitemap / renderRobots in service/seo.js are the single rendering path both call sites use. Scope deliberately limited to the browse surface — /submit and the API routes depend on the live backend and were never going to work on a static mirror. The browse surface IS what the fallback is for: readers survive an outage, publishers can't. systemd unit + timer under deploy/ run the snapshot weekly on Sunday 04:00 UTC with 30 min jitter and Persistent=yes so a missed run after a reboot catches up. Unit uses the sia-storage AWS profile per [[sia-storage-credentials-location]] and the per-process endpoint URL baked in via Environment=. Local dry-run against an empty DB produced 14 HTML files + sitemap + robots + the two assets.
14 lines
403 B
SYSTEMD
14 lines
403 B
SYSTEMD
[Unit]
|
|
Description=Prometheus snapshot — weekly upload to the Sia fallback
|
|
|
|
[Timer]
|
|
# Weekly on Sunday 04:00 UTC, with a jitter so a cluster of timers does not
|
|
# all fire the same second if we ever run more than one. Persistent=yes catches
|
|
# a missed run after a reboot.
|
|
OnCalendar=Sun 04:00 UTC
|
|
RandomizedDelaySec=30m
|
|
Persistent=yes
|
|
Unit=prometheus-snapshot.service
|
|
|
|
[Install]
|
|
WantedBy=timers.target
|