Skip to content

TheArchiver — Runbook

Quick Reference

Item Value
LXC 129 @ 192.168.1.129
URL https://archiver.eva-00.network
Image ghcr.io/pauljoda/the-archiver:latest
Health curl http://192.168.1.129:3002 (200 = OK)
Vault secret/data/external-oauth2-proxies (archiver_*)
Deploy Forgejo Actions -> Deploy Archival Stack

Check Service Status

ssh [email protected] docker compose -f /opt/the-archiver/docker-compose.yml ps

The the-archiver container should be running on port 3002.

Restart Service

ssh [email protected] docker compose -f /opt/the-archiver/docker-compose.yml restart

View Logs

Via Loki (preferred)

{container_name="the-archiver"}
{container_name="the-archiver"} |= "error"
{container_name="the-archiver"} |= "download"

Via SSH (fallback)

ssh [email protected] docker compose -f /opt/the-archiver/docker-compose.yml logs -f --tail 100

Submit URLs

Via API

curl -X POST https://archiver.eva-00.network/api/download \
  -H "Content-Type: application/json" \
  -d '{"url": "https://reddit.com/r/selfhosted/comments/..."}'

Via Web UI

Navigate to https://archiver.eva-00.network, paste URL in the submit field.

Via iOS Shortcut

Share any URL from Safari/YouTube/Reddit -> tap "Archive" shortcut.

Manage Plugins

Install from Marketplace

  1. Go to https://archiver.eva-00.network -> Plugins tab
  2. Click Community
  3. Browse and install plugins

Install Manually

# Copy plugin folder to LXC
scp -r my-plugin/ [email protected]:/opt/the-archiver/plugins/

# Restart to load
ssh [email protected] docker compose -f /opt/the-archiver/docker-compose.yml restart

Check Installed Plugins

curl -s https://archiver.eva-00.network/api/plugins | python3 -m json.tool

Check Download Queue

curl -s https://archiver.eva-00.network/api/queue | python3 -m json.tool

Check Failed Downloads

curl -s https://archiver.eva-00.network/api/failed | python3 -m json.tool

Retry a Failed Download

curl -X POST https://archiver.eva-00.network/api/failed/<id>/retry

Storage

Check Disk Usage

# urahara mount (downloaded content)
ssh [email protected] du -sh /mnt/archiver/downloads/

# Local rootfs (SQLite + plugins)
ssh [email protected] du -sh /opt/the-archiver/data/ /opt/the-archiver/plugins/

Browse Files via API

curl -s "https://archiver.eva-00.network/api/files?path=/" | python3 -m json.tool

Fresh Redeploy

Trigger via Forgejo Actions (workflow_dispatch), or manually:

ssh [email protected]
docker compose -f /opt/the-archiver/docker-compose.yml down
rm -rf /opt/the-archiver/data/*
# Note: downloads on urahara are preserved

Then re-run the workflow.

Troubleshooting

OAuth2 login loop

Clear the _oauth2_archiver cookie in your browser, or try incognito. Verify the oauth2-proxy container is running:

{container_name="oauth2-proxy-archiver"}

API returns 502

TheArchiver container may be starting up. Check health:

ssh [email protected] docker compose -f /opt/the-archiver/docker-compose.yml ps
curl -s http://192.168.1.129:3002/api/health

Downloads not appearing in /mnt/archiver/downloads

Verify the bind mount is active:

ssh [email protected] df -h /mnt/archiver/downloads
ssh [email protected] ls -la /mnt/archiver/downloads/

If empty, check Proxmox bind mount config for LXC 129.

ntfy notifications not working

Verify the ntfy URL is set in the container:

ssh [email protected] docker exec the-archiver printenv NTFY_URL

Should return http://192.168.1.119:2586/archiver. Test ntfy:

curl -s -X POST http://192.168.1.119:2586/archiver -d "test notification"

Port conflict with browserless

TheArchiver runs on 3002 (not 3000) because browserless uses 3000. If the port is already in use:

ssh [email protected] docker ps --format '{{.Names}}\t{{.Ports}}' | grep 3002