Install
Ophiolite ships as one server image, ophiolite-server:<release>. It holds the project service,
the worker, the web gateway, the Workspace and a small web server. With it you run PostgreSQL 16;
the compose file in deployment/package/ starts both. The image runs on x86_64 Linux. ARM64 is
not qualified yet.
What you prepare
Section titled “What you prepare”A directory with:
| File | What it is |
|---|---|
compose.yaml, ophiolite-ops |
from deployment/package/ of the release you install |
config.json |
where people reach Ophiolite, the project, its first administrator, the database |
secrets/admin_token |
the first administrator’s sign-in token: one line, 32–256 printable characters |
secrets/db_password |
the database password |
.env |
OPHIOLITE_IMAGE=<registry>/ophiolite-server:<release> and optionally OPHIOLITE_PORT |
config.json (every key is checked; unknown keys are refused, and secrets never go in it):
{ "schema": "ophiolite.deployment-config/1", "origin": "https://ophiolite.example.org", "tls": "external", "project": {"id": "geoscience", "name": "Geoscience"}, "administrator": {"id": "operator", "name": "Operator"}, "database": {"host": "postgres", "name": "ophiolite", "user": "ophiolite"}, "limits": {"upload_bytes": 8388608, "scientific_reads": 2, "read_wait_ms": 10000}}tls says who terminates HTTPS: external (your load balancer or ingress, in front of port
8080), caddy (the image obtains a certificate for the origin’s host name) or none (only for
an evaluation on http://127.0.0.1).
The image runs as user 10001. Make the two secret files readable by that user (for example mode 0640 with group 10001), keep the directory private, and keep a copy of the administrator token somewhere safe: Ophiolite stores only its hash.
docker compose up -dOn the first start the server checks the configuration, waits for the database, applies the
schema and creates the project and the administrator from secrets/admin_token in one step.
Open the origin in a browser and sign in with that token. Later starts do not need the token file.
If the server does not come up, docker compose logs server names the reason: a configuration
field, the database, a migration, or a release it cannot start from (see Upgrade).
People
Section titled “People”./ophiolite-ops member bob "Bob" --no-compute # writes ./tokens/bob.token for Bob./ophiolite-ops member carol "Carol" --role viewer./ophiolite-ops user dana "Dana" # an account without project membershipGive each person their token file. Sharing, groups and stages then happen in the Workspace.
What was qualified
Section titled “What was qualified”The Integration CI job image builds the image from the pinned components and runs, on a clean
Ubuntu 24.04 host: install to a signed-in session, members, the pilot journey, the access and
tampering checks of the adversarial qualification, a publication interrupted by a kill, backup
and restore, the release gate, a project move and an offline exit.
