Skip to main content

Air-gapped install

Operator

Ticketra is designed to run fully offline. There are no runtime dependencies on external CDNs or services — the only time you need connectivity is to build images and pull the source onto a connected staging machine, after which everything transfers to the air-gapped host.

Strategy

1. On a connected machine: build and export images

git clone https://github.com/ticketra/ticketra.git
cd ticketra
docker compose build

# Save the built/pulled images to tarballs
docker save ticketra-frontend ticketra-api -o ticketra-app-images.tar
docker save postgres:16-alpine -o postgres-image.tar
docker save opensearchproject/opensearch:latest -o opensearch-image.tar

Also copy the repository itself (for docker-compose.yml, migrations, and .env.example).

Confirm image names

The exact image tags depend on your docker-compose.yml. Run docker compose config | grep image on the connected machine to list the precise images to save.

2. Transfer to the air-gapped host

Move the .tar files and the repository to the target host using your approved transfer media.

3. On the air-gapped host: load and run

docker load -i ticketra-app-images.tar
docker load -i postgres-image.tar
docker load -i opensearch-image.tar

cd ticketra
cp .env.example .env # then edit for this environment
# create the files under secrets/ (see Quickstart)

docker compose up -d # no --build needed; images are pre-loaded

4. TLS in an air-gapped environment

Local/offline deployments use self-signed certificates by default. For an internal CA, place your certificate and key in the certs/ directory as referenced by the frontend Nginx configuration, then restart the frontend container.

Verify

docker compose ps
curl -k https://<host>/api/v1/health

Notes for offline operation

  • Threat-intel enrichment requires reaching external providers (VirusTotal, AbuseIPDB, etc.). In a true air-gap these will be unreachable; either leave integrations disabled or point MISP at an internal MISP instance.
  • Documentation (this site) builds to a static bundle and can be self-hosted offline alongside the app.

Continue with the Hardening guide before going live.