@@ -87,6 +87,21 @@ services:
8787 interval : 30s
8888 timeout : 30s
8989 retries : 3
90+ pgsql-copilot :
91+ # Dedicated pgvector-enabled instance for XTM One.
92+ image : pgvector/pgvector:pg17
93+ environment :
94+ POSTGRES_USER : ${XTM_ONE_POSTGRES_USER}
95+ POSTGRES_PASSWORD : ${XTM_ONE_POSTGRES_PASSWORD}
96+ POSTGRES_DB : copilot
97+ volumes :
98+ - pgsqlcopilotdata:/var/lib/postgresql/data
99+ restart : always
100+ healthcheck :
101+ test : [ "CMD", "pg_isready", "-U", "${XTM_ONE_POSTGRES_USER}", "-d", "copilot" ]
102+ interval : 10s
103+ timeout : 5s
104+ retries : 5
90105
91106 # ##########################
92107 # COMMON #
@@ -149,6 +164,9 @@ services:
149164 - SMTP__PORT=25
150165 - PROVIDERS__LOCAL__STRATEGY=LocalStrategy
151166 - APP__HEALTH_ACCESS_KEY=${OPENCTI_HEALTHCHECK_ACCESS_KEY}
167+ # XTM One
168+ - XTM__XTM_ONE_URL=http://xtm-one:4000
169+ - XTM__XTM_ONE_TOKEN=${PLATFORM_REGISTRATION_TOKEN}
152170 ports :
153171 - " ${OPENCTI_PORT}:8080"
154172 depends_on :
@@ -328,9 +346,79 @@ services:
328346 opencti :
329347 condition : service_healthy
330348
349+ # ##########################
350+ # XTM ONE #
351+ # ##########################
352+
353+ xtm-one :
354+ image : filigran/xtm-one:${XTM_ONE_VERSION:-rolling}
355+ environment :
356+ - PLATFORM_MODE=xtm_one
357+ - PLATFORM_REGISTRATION_TOKEN=${PLATFORM_REGISTRATION_TOKEN}
358+ - BASE_URL=${XTM_ONE_EXTERNAL_SCHEME}://${XTM_ONE_HOST}:${XTM_ONE_PORT}
359+ - FRONTEND_URL=${XTM_ONE_EXTERNAL_SCHEME}://${XTM_ONE_HOST}:${XTM_ONE_PORT}
360+ - ADMIN_EMAIL=${XTM_ONE_ADMIN_EMAIL}
361+ - ADMIN_PASSWORD=${XTM_ONE_ADMIN_PASSWORD}
362+ - SECRET_KEY=${XTM_ONE_SECRET_KEY}
363+ - DATABASE_URL=postgresql+asyncpg://${XTM_ONE_POSTGRES_USER}:${XTM_ONE_POSTGRES_PASSWORD}@pgsql-copilot:5432/copilot
364+ - REDIS_URL=redis://redis:6379
365+ - S3_ENDPOINT=minio:9000
366+ - S3_ACCESS_KEY=${MINIO_ROOT_USER}
367+ - S3_SECRET_KEY=${MINIO_ROOT_PASSWORD}
368+ - S3_BUCKET=${XTM_ONE_S3_BUCKET:-copilot-files}
369+ - S3_USE_SSL=false
370+ - LOG_LEVEL=${XTM_ONE_LOG_LEVEL:-info}
371+ - LOG_FORMAT=${XTM_ONE_LOG_FORMAT:-json}
372+ - ENTERPRISE_LICENSE=${XTM_ONE_ENTERPRISE_LICENSE:-}
373+ # OpenCTI federation
374+ - OPENCTI_ENABLE=true
375+ - OPENCTI_URL=${OPENCTI_EXTERNAL_SCHEME}://${OPENCTI_HOST}:${OPENCTI_PORT}
376+ - OPENCTI_API_URL=http://opencti:8080
377+ - OPENCTI_TOKEN=${OPENCTI_ADMIN_TOKEN}
378+ ports :
379+ - " ${XTM_ONE_PORT}:4000"
380+ depends_on :
381+ pgsql-copilot :
382+ condition : service_healthy
383+ redis :
384+ condition : service_healthy
385+ minio :
386+ condition : service_healthy
387+ restart : always
388+ healthcheck :
389+ test : ["CMD-SHELL", "python -c \"import urllib.request; urllib.request.urlopen('http://localhost:4000/api/health')\""]
390+ interval : 15s
391+ timeout : 10s
392+ retries : 5
393+ start_period : 60s
394+
395+ xtm-one-worker :
396+ image : filigran/xtm-one-worker:${XTM_ONE_VERSION:-rolling}
397+ environment :
398+ - PLATFORM_MODE=xtm_one
399+ - PLATFORM_REGISTRATION_TOKEN=${PLATFORM_REGISTRATION_TOKEN}
400+ - ADMIN_EMAIL=${XTM_ONE_ADMIN_EMAIL}
401+ - ADMIN_PASSWORD=${XTM_ONE_ADMIN_PASSWORD}
402+ - SECRET_KEY=${XTM_ONE_SECRET_KEY}
403+ - DATABASE_URL=postgresql+asyncpg://${XTM_ONE_POSTGRES_USER}:${XTM_ONE_POSTGRES_PASSWORD}@pgsql-copilot:5432/copilot
404+ - REDIS_URL=redis://redis:6379
405+ - S3_ENDPOINT=minio:9000
406+ - S3_ACCESS_KEY=${MINIO_ROOT_USER}
407+ - S3_SECRET_KEY=${MINIO_ROOT_PASSWORD}
408+ - S3_BUCKET=${XTM_ONE_S3_BUCKET:-copilot-files}
409+ - S3_USE_SSL=false
410+ - LOG_LEVEL=${XTM_ONE_LOG_LEVEL:-info}
411+ - LOG_FORMAT=${XTM_ONE_LOG_FORMAT:-json}
412+ - ENTERPRISE_LICENSE=${XTM_ONE_ENTERPRISE_LICENSE:-}
413+ depends_on :
414+ xtm-one :
415+ condition : service_healthy
416+ restart : always
417+
331418volumes :
332419 esdata :
333420 s3data :
334421 redisdata :
335422 amqpdata :
336423 rsakeys :
424+ pgsqlcopilotdata :
0 commit comments