From cf3437076b7edd5be8897e4516c191826a6c8f06 Mon Sep 17 00:00:00 2001 From: eizus Date: Fri, 3 Jul 2026 16:24:13 -0400 Subject: [PATCH] feat(catalog): add ArchiveBox as a Supply Depot service MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- admin/constants/service_names.ts | 1 + admin/database/seeders/service_seeder.ts | 48 ++++++++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/admin/constants/service_names.ts b/admin/constants/service_names.ts index 8bbc817..9e25d45 100644 --- a/admin/constants/service_names.ts +++ b/admin/constants/service_names.ts @@ -18,4 +18,5 @@ export const SERVICE_NAMES = { HOMEBOX: 'nomad_homebox', VAULTWARDEN: 'nomad_vaultwarden', JELLYFIN: 'nomad_jellyfin', + ARCHIVEBOX: 'nomad_archivebox', } diff --git a/admin/database/seeders/service_seeder.ts b/admin/database/seeders/service_seeder.ts index 77362b1..cde900f 100644 --- a/admin/database/seeders/service_seeder.ts +++ b/admin/database/seeders/service_seeder.ts @@ -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() {