Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 31 additions & 2 deletions .env.sample
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,18 @@ ELASTIC_MEMORY_SIZE=4G
XTM_COMPOSER_ID=8215614c-7139-422e-b825-b20fd2a13a23
COMPOSE_PROJECT_NAME=xtm

# Shared secret used to register the platforms with XTM One.
# All platforms sharing an XTM One instance MUST use the same value.
PLATFORM_REGISTRATION_TOKEN=ChangeMeWithGeneratedRandomString # [MANDATORY] Replace with a long random string (e.g. `openssl rand -hex 32`)

###########################
# OPENCTI #
###########################

OPENCTI_HOST=localhost
OPENCTI_PORT=8080
OPENCTI_EXTERNAL_SCHEME=http
OPENCTI_ADMIN_EMAIL=admin@opencti.io
OPENCTI_ADMIN_EMAIL=admin@filigran.io
OPENCTI_ADMIN_PASSWORD=changeme
OPENCTI_ADMIN_TOKEN=ChangeMe_UUIDv4
OPENCTI_HEALTHCHECK_ACCESS_KEY=changeme
Expand All @@ -48,4 +52,29 @@ CONNECTOR_ANALYSIS_ID=4dffd77c-ec11-4abe-bca7-fd997f79fa36
###########################

CONNECTOR_OPENCTI_ID=dd010812-9027-4726-bf7b-4936979955ae
CONNECTOR_MITRE_ID=8307ea1e-9356-408c-a510-2d7f8b28a0e2
CONNECTOR_MITRE_ID=8307ea1e-9356-408c-a510-2d7f8b28a0e2

###########################
# XTM ONE #
###########################
Comment thread
SamuelHassine marked this conversation as resolved.

XTM_ONE_HOST=localhost
XTM_ONE_PORT=8090
XTM_ONE_EXTERNAL_SCHEME=http
# Image tag for xtmone/platform and xtmone/worker (e.g. rolling, testing-xtm-one, 1.260513.0)
XTM_ONE_VERSION=rolling
# Must match the admin email of the connected platform(s) so XTM One's JWT
# email claim resolves to an existing user.
XTM_ONE_ADMIN_EMAIL=admin@filigran.io
XTM_ONE_ADMIN_PASSWORD=changeme
# Long random string (e.g. `openssl rand -hex 32`). Used to sign sessions/tokens.
XTM_ONE_SECRET_KEY=ChangeMeWithGeneratedRandomString
# Credentials for the dedicated pgsql-xtm-one Postgres instance.
XTM_ONE_POSTGRES_USER=xtmone
XTM_ONE_POSTGRES_PASSWORD=ChangeMe
# Optional: bucket name in MinIO (auto-created on first boot)
XTM_ONE_S3_BUCKET=xtm-one-files
# Optional: enterprise license PEM (leave empty in xtm_one mode)
XTM_ONE_ENTERPRISE_LICENSE=
XTM_ONE_LOG_LEVEL=info
XTM_ONE_LOG_FORMAT=json
86 changes: 86 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,9 @@ services:
- SMTP__PORT=25
- PROVIDERS__LOCAL__STRATEGY=LocalStrategy
- APP__HEALTH_ACCESS_KEY=${OPENCTI_HEALTHCHECK_ACCESS_KEY}
# XTM One
- XTM__XTM_ONE_URL=http://xtm-one:4000
- XTM__XTM_ONE_TOKEN=${PLATFORM_REGISTRATION_TOKEN}
ports:
- "${OPENCTI_PORT}:8080"
depends_on:
Expand Down Expand Up @@ -328,9 +331,92 @@ services:
opencti:
condition: service_healthy

###########################
# XTM ONE #
###########################

pgsql-xtm-one:
# Dedicated pgvector-enabled instance for XTM One.
image: pgvector/pgvector:pg17
environment:
POSTGRES_USER: ${XTM_ONE_POSTGRES_USER}
POSTGRES_PASSWORD: ${XTM_ONE_POSTGRES_PASSWORD}
POSTGRES_DB: xtm_one
volumes:
- pgsqlxtmonedata:/var/lib/postgresql/data
restart: always
healthcheck:
test: [ "CMD", "pg_isready", "-U", "${XTM_ONE_POSTGRES_USER}", "-d", "xtm_one" ]
interval: 10s
timeout: 5s
retries: 5

xtm-one:
image: xtmone/platform:${XTM_ONE_VERSION:-rolling}
Comment thread
SamuelHassine marked this conversation as resolved.
Outdated
environment:
- PLATFORM_MODE=xtm_one
- PLATFORM_REGISTRATION_TOKEN=${PLATFORM_REGISTRATION_TOKEN}
- BASE_URL=${XTM_ONE_EXTERNAL_SCHEME}://${XTM_ONE_HOST}:${XTM_ONE_PORT}
- FRONTEND_URL=${XTM_ONE_EXTERNAL_SCHEME}://${XTM_ONE_HOST}:${XTM_ONE_PORT}
- ADMIN_EMAIL=${XTM_ONE_ADMIN_EMAIL}
- ADMIN_PASSWORD=${XTM_ONE_ADMIN_PASSWORD}
- SECRET_KEY=${XTM_ONE_SECRET_KEY}
- DATABASE_URL=postgresql+asyncpg://${XTM_ONE_POSTGRES_USER}:${XTM_ONE_POSTGRES_PASSWORD}@pgsql-xtm-one:5432/xtm_one
- REDIS_URL=redis://redis:6379
- S3_ENDPOINT=minio:9000
- S3_ACCESS_KEY=${MINIO_ROOT_USER}
- S3_SECRET_KEY=${MINIO_ROOT_PASSWORD}
- S3_BUCKET=${XTM_ONE_S3_BUCKET:-xtm-one-files}
- S3_USE_SSL=false
- LOG_LEVEL=${XTM_ONE_LOG_LEVEL:-info}
- LOG_FORMAT=${XTM_ONE_LOG_FORMAT:-json}
- ENTERPRISE_LICENSE=${XTM_ONE_ENTERPRISE_LICENSE:-}
# Internal API endpoint for the OpenCTI integration (Docker hostname)
- OPENCTI_API_URL=http://opencti:8080
ports:
- "${XTM_ONE_PORT}:4000"
depends_on:
pgsql-xtm-one:
condition: service_healthy
redis:
condition: service_healthy
minio:
condition: service_healthy
restart: always
healthcheck:
test: ["CMD-SHELL", "python -c \"import urllib.request; urllib.request.urlopen('http://localhost:4000/api/health')\""]
interval: 15s
timeout: 10s
retries: 5
start_period: 60s

xtm-one-worker:
image: xtmone/worker:${XTM_ONE_VERSION:-rolling}
environment:
- PLATFORM_MODE=xtm_one
- PLATFORM_REGISTRATION_TOKEN=${PLATFORM_REGISTRATION_TOKEN}
- ADMIN_EMAIL=${XTM_ONE_ADMIN_EMAIL}
- ADMIN_PASSWORD=${XTM_ONE_ADMIN_PASSWORD}
- SECRET_KEY=${XTM_ONE_SECRET_KEY}
- DATABASE_URL=postgresql+asyncpg://${XTM_ONE_POSTGRES_USER}:${XTM_ONE_POSTGRES_PASSWORD}@pgsql-xtm-one:5432/xtm_one
- REDIS_URL=redis://redis:6379
- S3_ENDPOINT=minio:9000
- S3_ACCESS_KEY=${MINIO_ROOT_USER}
- S3_SECRET_KEY=${MINIO_ROOT_PASSWORD}
- S3_BUCKET=${XTM_ONE_S3_BUCKET:-xtm-one-files}
- S3_USE_SSL=false
- LOG_LEVEL=${XTM_ONE_LOG_LEVEL:-info}
- LOG_FORMAT=${XTM_ONE_LOG_FORMAT:-json}
- ENTERPRISE_LICENSE=${XTM_ONE_ENTERPRISE_LICENSE:-}
depends_on:
xtm-one:
condition: service_healthy
restart: always

volumes:
esdata:
s3data:
redisdata:
amqpdata:
rsakeys:
pgsqlxtmonedata:
Loading