Skip to Content
Services

Services

Each deployable unit, what it does and what it depends on.

Every service is a container that listens on port 8080 and answers GET /health.

ServiceDoesDepends on
Portal APIThe backend of the admin portal: content, users, roles, publishing.Database
Public APIServes pages, posts, search and feeds to client websites.Database
MediaServes uploaded files and resizes images on request.Database, blob storage
UploadReceives uploads in chunks and stores them. Single replica.Database, blob storage
Operations WorkerRuns queued operations outside the Portal API.Database, ffmpeg
Analytics APIReads and writes analytics events.Elasticsearch
Parse APIFeeds the search indexer.Database
MCPExposes support tickets and tenant information to AI agents.Per-tenant databases
QA StatusA command-line tool and monitor that checks each tenant’s hosts and pages.Nothing

Images

Each service is published as ghcr.io/mangopulse/<service>. db-tools is not a service: it holds the schema, the migrations and the first-tenant seed, and is run once per install or upgrade.

Environment

VariableMeaning
PLATFORMX_DB_ENGINESqlServer or Postgres.
PLATFORMX_DB_CONNECTION_STRINGThe database. Required.
PLATFORMX_CURRENT_SUBSCRIPTIONThe tenant code this process serves.
PLATFORMX_JWT_SIGNING_KEYPortal API. Base64 HMAC key of at least 32 bytes. No default.
PLATFORMX_INTERNAL_API_KEYPublic API internal endpoints. They refuse every call while it is unset.
AZURE_BLOB_CONNECTIONMedia and Upload.
PLATFORMX_OPERATIONS_MODEPortal API. inline runs operations in process; queue hands them to the worker.

The full list is in the AGENTS.md at the root of platform.