Skip to content

Operators

This section is for the people who install and run ulams: a multi-tenant Laravel API with an H5P service, a PDF renderer, an admin panel and a learner front, backed by PostgreSQL, a Redis-protocol server (Valkey) and S3-compatible object storage.

Container Image Role State
api ghcr.io/ulams-dev/api Laravel API (php-fpm on port 9000), Horizon, tenant queue workers, scheduler Laravel storage/ (keys, logs, local disks), generated env files
h5p ghcr.io/ulams-dev/h5p H5P player, editor and content API (GPL-3.0-or-later) Installed libraries in /data/libraries
pdf ghcr.io/ulams-dev/pdf PDF renderer for certificates None
web ghcr.io/ulams-dev/web Learner front (Astro SSR, port 4321) None (in-memory cache)
admin ghcr.io/ulams-dev/admin Admin and author panel (static build on unprivileged nginx, port 8080) None
front ghcr.io/ulams-dev/front The older React learner front, optional None
PostgreSQL upstream Platform database plus one database per tenant Yes
Valkey upstream Queues, cache, locks, H5P caches Queues (persist it)
Object storage any S3-compatible service Platform bucket plus one bucket per tenant Yes
Caddy upstream TLS, routing by host, content origins, CSP headers Certificates

The architecture is explained for developers in Architecture and Tenancy; image details are in Container images.