Skip to content

What lies underneath

An Organtia installation is a small set of containers with a database and its own file store. Nothing more.

Piece What it is What it stores
api The application: it serves the office, the interface, the API and the cron clock. Nothing by itself: it writes to the database and to the store.
db PostgreSQL 17. All the state: roles, assignments, messages, cron jobs, audit.
archivos (volume) Document store. What the client uploads and what the roles produce.

There are two more services that do not stay running:

  • cli: a console for operations tasks (creating users, diagnostics).
  • tests: the automated test suite.

They are invoked by hand and they finish.

Very little, and on purpose:

  • The api listens only on 127.0.0.1 (whatever port is configured, 18011 by default). It is not exposed directly to the internet: Caddy sits in front, providing HTTPS and the domain certificate.
  • The database is not exposed. It only opens on loopback so the host’s test runner can connect; no container needs it from outside.
  • The api container reaches the internet only to talk to the model provider. There is no telemetry: the application does not send usage data to third parties.

There is no separate service: the scheduler lives inside the api. Every few seconds it checks whether any cron job is due and, if one is, it launches the assignment. That is why, if the api is down, cron jobs do not run; when it comes back, the runs that are due are recovered.

The database is built from numbered SQL files, in order, applied on startup. A new file is added without rebuilding the image: it is mounted from the host. If a migration fails, startup stops instead of carrying on with a half-built database.

Each installation has:

  • Its containers, prefixed with the client name.
  • Its volumes: <cliente>-pgdata and <cliente>-archivos.
  • Its network, with its own subnet.

There is no shared database with several companies inside. If a client leaves tomorrow, its installation is stopped and its volumes are deleted: the others never notice.