Files
Argus/README.md
T
Курнат Андрей 5f80c4bf6a Initial Argus web catalog
2026-06-20 19:55:11 +03:00

2.9 KiB

Argus

Argus is an ASP.NET Core 10 web application. It serves a public catalog of published applications and downloadable release files.

Scope

  • public web catalog
  • public read-only API
  • package file serving from disk
  • SQLite metadata storage
  • Docker-ready deployment for Raspberry Pi 5 (linux/arm64)

There is no HTTP admin API, browser publishing form, or external publishing endpoint. Releases must be published on the server side, for example over SSH, by updating the SQLite database and placing package files under Data/Packages.

Use ARGUS_PUBLICATION.md as the canonical instruction for publishing applications and integrating update checks through Argus.

What It Stores

  • app metadata: slug, name, summary, description, repository URL, homepage URL
  • release metadata: version, channel, platform, package kind, notes, publish timestamp
  • package files on disk under Data/Packages
  • SHA-256 checksum and file size for each package

latest release selection is based on semantic version precedence first, then on publish time as a tie-breaker.

Successful startup keeps only the most recently published release per app. Older release records and their stored package files are pruned automatically.

SQLite data is stored in Data/argus.db.

Public API

  • GET /health
  • GET /api/apps
  • GET /api/apps/{slug}
  • GET /api/apps/{slug}/manifest?platform=web&channel=stable
  • GET /api/apps/{slug}/download/latest?platform=web&channel=stable
  • GET /api/apps/{slug}/releases/{releaseId}/download
  • GET /api/releases/recent

Local Run

dotnet run --project .\Argus.csproj

Default local URL:

http://localhost:5105

Publishing

Publishing is intentionally not exposed through HTTP. Connect to the server over SSH, copy package files into Data/Packages, and update Data/argus.db locally.

See ARGUS_PUBLICATION.md for the complete publication command template and the client update protocol.

Required release fields in SQLite:

  • CatalogAppId
  • Version
  • Channel
  • Platform
  • PackageKind
  • OriginalFileName
  • StoredRelativePath
  • ContentType
  • PackageSizeBytes
  • Sha256
  • PublishedAt

Docker On Raspberry Pi 5

Files included:

  • Dockerfile
  • docker-compose.rpi5.yml
  • .env.example

Quick start:

cp .env.example .env
docker compose -f docker-compose.rpi5.yml up -d --build

The service binds only to 127.0.0.1:5105. Put Nginx or another reverse proxy in front of it for external access.

Reverse Proxy For argus.kusoft.xyz

Prepared Nginx site config:

  • deploy/nginx/argus.kusoft.xyz.conf

It is configured to:

  • redirect http://argus.kusoft.xyz to HTTPS
  • proxy HTTPS traffic to http://127.0.0.1:5105
  • pass X-Forwarded-* headers expected by the app
  • use standard Let's Encrypt certificate paths for argus.kusoft.xyz

Persistent data mount:

  • host: ${ARGUS_DATA_PATH}
  • container: /app/Data