feat(catalog): add ArchiveBox as a Supply Depot service

Adds ArchiveBox to the curated service catalog so NOMAD users can
capture ad hoc snapshots of websites — HTML, PDF, wget, WARC, favicon,
and title — for offline access, complementing the pre-packaged Kiwix
and Kolibri content libraries.

- Port 8460 (Supply Depot range 8400–8499, next available)
- Category: utility
- Chrome-dependent extractors (screenshot, DOM) disabled — NOMAD is
  offline-first and Chromium adds significant resource overhead
- PUID/PGID=1000 for Synology/DSM file permission compatibility
- Pinned to stable 0.7.4 (0.9.x are release candidates)
This commit is contained in:
eizus 2026-07-03 16:24:13 -04:00
parent 6a4f02dd46
commit cf3437076b
2 changed files with 49 additions and 0 deletions

View File

@ -18,4 +18,5 @@ export const SERVICE_NAMES = {
HOMEBOX: 'nomad_homebox',
VAULTWARDEN: 'nomad_vaultwarden',
JELLYFIN: 'nomad_jellyfin',
ARCHIVEBOX: 'nomad_archivebox',
}

View File

@ -536,6 +536,54 @@ export default class ServiceSeeder extends BaseSeeder {
depends_on: null,
metadata: JSON.stringify({ minMemoryMB: 2048, minDiskMB: 20480 }),
},
{
service_name: SERVICE_NAMES.ARCHIVEBOX,
friendly_name: 'ArchiveBox',
powered_by: 'ArchiveBox',
display_order: 28,
description:
'Self-hosted web archiver — capture snapshots of websites as HTML, PDF, screenshots, and metadata for offline access',
icon: 'IconWorld',
container_image: 'archivebox/archivebox:0.7.4',
source_repo: 'https://github.com/ArchiveBox/ArchiveBox',
container_command: null,
container_config: JSON.stringify({
HostConfig: {
RestartPolicy: { Name: 'unless-stopped' },
PortBindings: { '8000/tcp': [{ HostPort: '8460' }] },
Binds: [`${ServiceSeeder.NOMAD_STORAGE_ABS_PATH}/archivebox:/data`],
},
ExposedPorts: { '8000/tcp': {} },
Env: [
'PUID=1000',
'PGID=1000',
'SAVE_ARCHIVE=1',
'SAVE_TITLE=1',
'SAVE_FAVICON=1',
'SAVE_PDF=1',
'SAVE_WGET=1',
'SAVE_WARC=1',
'SAVE_DOM=false',
'SAVE_Screenshot=false',
'USE_CHROME=false',
'FETCH_PDF=1',
'FETCH_WGET=1',
'FETCH_WARC=1',
'FETCH_FAVICON=1',
'FETCH_TITLE=1',
'FETCH_DOM=false',
'FETCH_SCREENSHOT=false',
'MEDIA_MAX_SIZE=750m',
],
}),
ui_location: '8460',
installed: false,
installation_status: 'idle',
is_dependency_service: false,
is_custom: false,
category: 'utility',
depends_on: null,
},
]
async run() {