Production deployment
This compose project runs the Search API and its private OpenSearch node. It
binds the API only to 127.0.0.1; publish it through an authenticated reverse
proxy or VPN. OpenSearch is not published outside the compose network.
The current compose intentionally disables the OpenSearch security plugin to match the existing API client. Keep both services on a private host/network. The application provides cookie-based accounts for its search API and review workspace; it does not replace host-level network controls or TLS.
First deployment
-
Copy this directory to the host with the repository source.
-
Copy
.env.exampleto.env, set an absoluteDATA_ROOT, and replaceREVIEW_SECRETwith a random value. Do not commit.env. -
Put the normalized dataset under
$DATA_ROOT/minjust-normalized/. -
Check the rendered configuration:
docker compose --env-file .env -f compose.yaml config -
Start the services:
docker compose --env-file .env -f compose.yaml up -d --build docker compose --env-file .env -f compose.yaml ps curl -fsS http://127.0.0.1:${BACKEND_PORT:-8080}/review >/dev/null -
Load the versioned index and switch its alias only after the import and validation succeed. Back up
DATA_ROOTand theopensearch-datavolume before the first import.
Initial administrator and accounts
After starting the backend for the first time, create the initial admin
account with an interactive password prompt:
docker compose --env-file .env -f compose.yaml exec backend python -m search.api --create-admin
The account database is stored at DATA_ROOT/search-users.sqlite3. Back it up
alongside the review database. Sign in at /review; admin can create accounts
with temporary passwords. Each new account must replace its temporary password
at first sign-in. Only the admin login can create, reset, or delete accounts.
If the admin password is lost, reset it in an interactive terminal with:
docker compose --env-file .env -f compose.yaml exec backend python -m search.api --reset-admin-password
The next sign-in requires another password change. Serve the backend behind
HTTPS, rate-limit login requests at the reverse proxy, and keep
COOKIE_SECURE=true in production.
This is a deployment baseline, not a public internet exposure recipe. TLS, backups, monitoring, and a production OpenSearch security configuration must be provided by the host reverse proxy/operations setup.