Installation guide
System requirements
Runtime requirements
Production environment
- Kubernetes: v1.24 or higher
 - Namespace: Dedicated namespace for XTM Composer
 - RBAC: Role-based access control for pod management
 
Development environment
- Docker: v20.10 or higher
 - Portainer: v2.0 or higher (recommended for container management)
 - Docker Compose: v2.0 or higher (optional)
 
Security requirements
- RSA Private Key: 4096-bit RSA private key for authentication
 - Network Access:
 - Connectivity to OpenCTI/OpenBAS instances
 - Access to container orchestration API
 - Permissions:
 - Production: Kubernetes service account with appropriate RBAC
 - Development: Docker socket access or Portainer API access
 
Installation methods
Create a configuration file based on your environment or add extra environment variables in the following steps. See Configuration Reference for more information on required configuration.
Production environment (Kubernetes)
Note: The Kubernetes installation method described here assumes that OpenCTI is already deployed on a Kubernetes cluster.
- 
Create namespace:
 - 
Create secret for RSA key:
 - 
Create ConfigMap for configuration:
 - 
Create service account:
 
XTM Composer uses a service account to have authorization to start new pods and deployments on the cluster.
cat <<EOF | kubectl apply -n xtm-composer -f -
apiVersion: v1
kind: ServiceAccount
metadata:
  name: xtm-composer
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: xtm-composer
rules:
- apiGroups: ["apps"]
  resources: ["deployments"]
  verbs: ["get", "watch", "list", "create", "update", "patch", "delete", "deletecollection"]
- apiGroups: [""]
  resources: ["pods", "pods/log"]
  verbs: ["get", "watch", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: xtm-composer
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: xtm-composer
subjects:
- kind: ServiceAccount
  name: xtm-composer
EOF
- Deploy XTM Composer:
cat <<EOF | kubectl apply -n xtm-composer -f - apiVersion: apps/v1 kind: Deployment metadata: name: xtm-composer namespace: xtm-composer spec: replicas: 1 selector: matchLabels: app: xtm-composer template: metadata: labels: app: xtm-composer spec: containers: - name: xtm-composer image: filigran/xtm-composer:latest env: - name: COMPOSER_ENV value: "production" - name: MANAGER__ID value: "k8s-manager" - name: MANAGER__CREDENTIALS_KEY_FILEPATH value: "/keys/private_key.pem" volumeMounts: - name: config mountPath: /config - name: keys mountPath: /keys volumes: - name: config configMap: name: xtm-composer-config - name: keys secret: secretName: xtm-composer-keys serviceAccountName: xtm-composer EOF 
Development environment (Docker/Portainer)
Docker installation with CLI
# Pull the latest image
docker pull filigran/xtm-composer:latest
# Create configuration directory
mkdir -p /opt/xtm-composer/config
# Generate RSA private key
openssl genrsa -out /opt/xtm-composer/private_key_4096.pem 4096
# Run container
docker run -d \
  --name xtm-composer \
  -v /opt/xtm-composer/config:/config \
  -v /opt/xtm-composer/private_key_4096.pem:/keys/private_key.pem \
  -e COMPOSER_ENV=development \
  filigran/xtm-composer:latest
Portainer installation
Method 1: Deploy via Portainer UI
- Access Portainer Dashboard:
 - Navigate to your Portainer instance
 - 
Select your Docker environment
 - 
Create a Stack:
 - Go to Stacks → Add Stack
 - Name: 
xtm-composer - Use the following docker-compose configuration:
 
version: '3.8'
services:
  xtm-composer:
    image: filigran/xtm-composer:latest
    container_name: xtm-composer
    environment:
      - COMPOSER_ENV=development
      - MANAGER__ID=dev-manager
      - MANAGER__CREDENTIALS_KEY_FILEPATH=/keys/private_key.pem
    volumes:
      - xtm-composer-config:/config
      - xtm-composer-keys:/keys
    restart: unless-stopped
    networks:
      - opencti_default
volumes:
  xtm-composer-config:
    driver: local
  xtm-composer-keys:
    driver: local
networks:
  opencti_default:
    external: true
- Configure Volumes:
 - After deployment, access the container console via Portainer
 - Generate the RSA key:
 - Copy your configuration files to 
/config 
Method 2: Deploy via Docker Compose
Option A: Using the preconfigured OpenCTI Docker stack (Recommended)
The OpenCTI Docker repository provides a complete docker-compose.yml that already includes:
- XTM Composer service pre-configured
- Automatic RSA key generation service
- Full OpenCTI stack integration
# Clone the repository
git clone https://github.com/OpenCTI-Platform/docker.git
cd docker
# Configure your environment
cp .env.sample .env
# Edit .env file with your settings
# Deploy the complete stack with XTM Composer
docker-compose up -d
Option B: Standalone deployment
If you prefer a standalone XTM Composer installation, create a docker-compose.yml file:
version: '3.8'
services:
  xtm-composer:
    image: filigran/xtm-composer:latest
    container_name: xtm-composer
    environment:
      - COMPOSER_ENV=development
      - MANAGER__ID=dev-manager
      - MANAGER__CREDENTIALS_KEY_FILEPATH=/keys/private_key.pem
    volumes:
      - ./config:/config
      - ./keys:/keys
    restart: unless-stopped
    ports:
      - "8080:8080"  # If web interface is available
volumes:
  xtm-composer-config:
  xtm-composer-keys:
Deploy with:
# Generate RSA key first
mkdir -p keys
openssl genrsa -out keys/private_key.pem 4096
# Deploy the stack
docker-compose up -d
Alternative installation methods
Binary installation
For advanced users who need custom builds or want to contribute to development.
Prerequisites
- Rust: 1.70.0 or higher
 - Git: For cloning the repository
 - OpenSSL: For generating RSA keys
 
Build from source
# Install Rust if not already installed
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
# Clone repository
git clone https://github.com/OpenCTI-Platform/xtm-composer.git
cd xtm-composer
# Build release binary
cargo build --release
# Generate RSA key
openssl genrsa -out ./private_key_4096.pem 4096
# Run the binary
./target/release/xtm-composer
Troubleshooting
For common issues and their solutions, see the Troubleshooting Guide.
Next steps
- Configure XTM Composer - See Configuration Reference
 - Connect to OpenCTI/OpenBAS - See Quick Start
 - Verify integration management functionality