Skip to content

[docker] Bundle XTM One in the default stack#578

Open
SamuelHassine wants to merge 6 commits into
masterfrom
feat/introduce-xtm-one
Open

[docker] Bundle XTM One in the default stack#578
SamuelHassine wants to merge 6 commits into
masterfrom
feat/introduce-xtm-one

Conversation

@SamuelHassine
Copy link
Copy Markdown
Member

@SamuelHassine SamuelHassine commented May 30, 2026

Proposed changes

Adds XTM One alongside OpenCTI in the default compose stack so docker compose up -d brings up the AI assistant next to the platform.

  • New pgsql-xtm-one service (pgvector/pgvector:pg17) with dedicated credentials and volume.
  • New xtm-one and xtm-one-worker services pulled from the published xtmone/platform:latest and xtmone/worker:latest images (hub.docker.com/u/xtmone), reusing the existing redis and minio. Images are pinned to :latest like opencti/platform.
  • xtm-one is exposed on host port 8090; BASE_URL and FRONTEND_URL both resolve to the templated ${XTM_ONE_EXTERNAL_SCHEME}://${XTM_ONE_HOST}:${XTM_ONE_PORT} (no hard-coded internal hostnames). Its healthcheck uses curl (present in the image; wget is not).
  • OpenCTI is wired to XTM One via XTM__XTM_ONE_URL / XTM__XTM_ONE_TOKEN and the shared PLATFORM_REGISTRATION_TOKEN.
  • The same XTM One services + OpenCTI wiring are mirrored into docker-compose.opensearch.yml, so both the Elasticsearch and OpenSearch stacks bundle XTM One and the shared .env.sample variables take effect in both.
  • .env.sample documents the new XTM ONE block and the mandatory-to-rotate PLATFORM_REGISTRATION_TOKEN. Admin email defaults to admin@filigran.io.

This mirrors the unified xtm-docker stack (FiligranHQ/xtm-docker#15); the OpenAEV docker repo receives the same treatment via OpenAEV-Platform/docker#131.

Related issues

Adds XTM One alongside OpenCTI in the default compose stack:

- New pgsql-xtm-one service (pgvector/pgvector:pg17) with dedicated
  credentials and volume (pgsqlxtmonedata).
- New xtm-one + xtm-one-worker services (published filigran images),
  reusing the existing redis and minio.
- xtm-one exposed on host port 8090 (after OpenCTI 8080); BASE_URL and
  FRONTEND_URL both resolve to the templated
  ${XTM_ONE_EXTERNAL_SCHEME}://${XTM_ONE_HOST}:${XTM_ONE_PORT}.
- OpenCTI wired to XTM One via XTM__XTM_ONE_URL / XTM__XTM_ONE_TOKEN and
  the shared PLATFORM_REGISTRATION_TOKEN.
- .env.sample documents the XTM ONE block and the mandatory-to-rotate
  PLATFORM_REGISTRATION_TOKEN.
The XTM One images are published on Docker Hub as xtmone/platform and
xtmone/worker, not filigran/xtm-one(-worker).
Use admin@filigran.io as the default admin email for OpenCTI and XTM One
in .env.sample so the shared JWT email claim resolves on the platform.
Admin emails live in .env.sample only; none are hard-coded in the compose
file. Unify the XTM One comments to match the other docker repos.
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds XTM One to the default Docker Compose stack so it can run alongside OpenCTI with its own PostgreSQL/pgvector store while reusing existing Redis and MinIO dependencies.

Changes:

  • Wires OpenCTI to XTM One via XTM__XTM_ONE_URL and shared registration token.
  • Adds pgsql-xtm-one, xtm-one, and xtm-one-worker services plus a dedicated volume.
  • Extends .env.sample with XTM One configuration and shared platform registration settings.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

File Description
docker-compose.yml Adds XTM One services, PostgreSQL storage, OpenCTI integration env vars, port exposure, and volume.
.env.sample Documents new shared token and XTM One environment variables; adjusts OpenCTI admin email default.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread .env.sample
Comment thread docker-compose.yml Outdated
Use xtmone/platform:latest and xtmone/worker:latest directly, matching the
opencti/platform:latest convention, and drop the XTM_ONE_VERSION variable
from .env.sample.
- Use curl for the XTM One healthcheck (the xtmone/platform image ships
  curl, not wget).
- Mirror the XTM One services and OpenCTI XTM__XTM_ONE_* wiring into
  docker-compose.opensearch.yml so both stacks bundle XTM One and the
  shared .env.sample variables take effect there too.
@SamuelHassine
Copy link
Copy Markdown
Member Author

All review threads addressed and resolved; CI is green (signed commits + build).

Note: I can't self-approve this PR (I opened it) — it needs a maintainer approval to merge.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

Comment thread docker-compose.opensearch.yml Outdated
Strip the trailing whitespace on the connector-mitre depends_on line that
precedes the new XTM ONE section in both docker-compose.yml and
docker-compose.opensearch.yml.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants