Simple Docker setup for:
- HexLicSrv
- HexVault
- Lumina (with MySQL)
Installers are not included in this repository. Put each installer into the matching image/ folder.
Supported installer versions:
hexlicsrv/- HexLicSrv image, config, data, logs, CAhexvault/- HexVault image, config, data, logs, CAlumina/- Lumina image, config, data, logs, CA, and MySQL volumeida/- helperlicense_patch.pyfor local IDA client patchingshell.9.0.reg,shell.9.1.reg,shell.9.2.reg,shell.9.3.reg- Windows context-menu shortcuts
- Linux host with Docker + Docker Compose
- A CA pair:
CA.pemandCA.key - Installers:
hexlicsrv/image/hexlicsrv_x64linux.runhexvault/image/hexvault_x64linux.runlumina/image/lumina_x64linux.run
- Create a CA (once):
openssl req -x509 \
-newkey rsa:4096 -sha512 -keyout CA.key -out CA.pem -days 3650 -nodes \
-subj "/C=BE/L=Liege/O=Hex-Rays SA./CN=Hex-Rays SA. Root CA"- Copy
CA.pemandCA.keyinto:
hexlicsrv/CA/hexvault/CA/lumina/CA/
- Adjust hostnames in compose files:
hexlicsrv/docker-compose.yml:LICENSE_HOSThexvault/docker-compose.yml:VAULT_HOSTlumina/docker-compose.yml:LUMINA_HOST
- Configure MySQL secrets for Lumina:
- Copy
.env.exampleto.env(for example:cp .env.example .env) - Set strong values for
MYSQL_PASSWORDandMYSQL_ROOT_PASSWORD
- Start services (from repository root):
docker compose -f hexlicsrv/docker-compose.yml up -d --build
docker compose -f hexvault/docker-compose.yml up -d --build
docker compose -f lumina/docker-compose.yml up -d --build- Default ports:
- HexLicSrv:
65434 - HexVault:
65433 - Lumina:
443
- Create
C:\Program Files\IDA Professional <version>\CA - Put only
CA.pemthere - Copy
ida/license_patch.pyinto your IDA install directory - Run as Administrator:
python3 license_patch.py ida-proEach service can backup/restore state to GitHub on container start.
How it works:
- If local state is empty and a remote snapshot exists, the service restores from GitHub.
- If local state is not empty, the service creates a new snapshot and uploads only when data changed.
hexlicsrvandhexvaultsync filesystem data.luminasyncs MySQL dump.
Where to configure:
- Add sync variables to the
environment:block of the needed service in:hexlicsrv/docker-compose.ymlhexvault/docker-compose.ymllumina/docker-compose.yml
environment:
SYNC_ENABLED: "true"
SYNC_METHOD: "commits" # or "releases"
GH_REMOTE: "https://github.com/yourorg/yourrepo.git"
SYNC_HOST_ID: "hexvault-prod-01" # unique node id
SYNC_CHUNK_SIZE_MB: "49" # keep <= 49 for GitHub limitsNotes:
SYNC_HOST_IDshould be unique per node/environment.- For private repos and uploads, provide auth (token or SSH key).
- For HTTPS remotes without
SYNC_AUTH_TOKEN, sync works in read-only mode (restore only, no upload).
Required:
SYNC_METHOD=commitsGH_REMOTESYNC_HOST_ID
Optional:
GH_BRANCH(defaultmain)GH_COMMIT_NAME,GH_COMMIT_EMAILSYNC_AUTH_TOKENfor HTTPS write accessGH_SSH_PRIVATE_KEY(+ optionallyGH_KNOWN_HOSTS) for SSH
Example:
environment:
SYNC_ENABLED: "true"
SYNC_METHOD: "commits"
GH_REMOTE: "https://github.com/yourorg/yourrepo.git"
GH_BRANCH: "main"
SYNC_HOST_ID: "hexlicsrv-prod-01"
SYNC_AUTH_TOKEN: "${SYNC_AUTH_TOKEN}"Required:
SYNC_METHOD=releasesGH_REMOTESYNC_HOST_ID
Optional:
GH_RELEASE_TAG(default service name)GH_RELEASE_NAMEGH_APIandGH_UPLOADfor GitHub EnterpriseSYNC_AUTH_TOKENfor creating/updating release assets
Example:
environment:
SYNC_ENABLED: "true"
SYNC_METHOD: "releases"
GH_REMOTE: "https://github.com/yourorg/yourrepo.git"
GH_RELEASE_TAG: "lumina-prod"
GH_RELEASE_NAME: "Lumina Prod Snapshot"
SYNC_HOST_ID: "lumina-prod-01"
SYNC_AUTH_TOKEN: "${SYNC_AUTH_TOKEN}"- Read container logs and find lines about
restore,checksum,uploaded, ornothing to upload. - If nothing is uploaded, usually it means data hash is unchanged (this is normal).
- In
commitsmode, snapshots are stored in repo files underbackups/<SYNC_HOST_ID>/. - In
releasesmode, snapshots are stored as release assets underGH_RELEASE_TAG.
- Missing CA files: container exits early. Check
CA/CA.pemandCA/CA.key. - Permission errors on config: set strict permissions (for example
chmod 600on config files). - Sync issues: verify
GH_REMOTE, token/key, and repository permissions.
- Never commit tokens, SSH private keys, or CA private keys.
- Do not copy
CA.keyto client workstations. - Restrict permissions for all secrets and config files.