Skip to content

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.

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.

Terminal window
docker compose up -d

On 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).

Terminal window
./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 membership

Give each person their token file. Sharing, groups and stages then happen in the Workspace.

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.