A local development environment for Itential Platform and other related technologies.
Note: This environment is for development and testing only. Do not use in production.
# First-time setup (generates key, certs, starts services, connects IAG to Gateway Manager)
make setup
# Daily usage
make up # Start all services
make down # Stop all services
make logs # View logs
make status # Check status and URLsContainer Runtime (one of the following):
- Docker (v20.10+) with Docker Compose (v2.0+)
- Podman (v4.0+) with Podman Compose β see Using Podman
Other Requirements:
- AWS CLI configured with Itential ECR access (only required if images need to be pulled)
Before first use, ensure you have access to Itential's AWS ECR repository. See Repository Access.
Note: If all required Itential images are already present locally,
make setupwill skip AWS CLI and ECR authentication automatically.
This project is OCI-compliant and works with Podman (and other container runtimes). The scripts and Makefile reference docker commands directly, so choose one of these approaches:
Install the compatibility package that creates a docker symlink:
# Fedora/RHEL/CentOS
sudo dnf install podman-docker
# Ubuntu/Debian
sudo apt install podman-dockerWith this installed, all make commands and scripts work unchanged.
Replace docker with podman and docker compose with podman-compose:
# Instead of: make up
podman-compose --profile full up -d
# Instead of: make down
podman-compose --profile full down
# Instead of: make logs
podman-compose --profile full logs -faws ecr get-login-password --region us-east-2 | \
podman login --username AWS --password-stdin 497639811223.dkr.ecr.us-east-2.amazonaws.com- Rootless mode: Works with proper volume permissions (containers run as your user ID)
- podman-compose: Feature parity with Docker Compose v2 is good but verify version 1.0.6+
- Compose profiles: Fully supported in podman-compose 1.0.6+
- Health checks: Work identically to Docker
Configuration is managed via .env file. On first run, make setup creates this from .env.example.
| Variable | Description | Default |
|---|---|---|
ITENTIAL_ENCRYPTION_KEY |
64-char hex encryption key (auto-generated) | Required |
GATEWAY5_CLUSTER_ID |
Gateway Manager cluster identifier | cluster_1 |
# Image versions (defaults to latest stable)
PLATFORM_VERSION=6
GATEWAY4_VERSION=4.3.7
GATEWAY5_VERSION=5.1.0-amd64
MONGO_VERSION=8.0
REDIS_VERSION=7.4
# Ports (if defaults conflict)
PLATFORM_PORT=3000
GATEWAY4_PORT=8083
GATEWAY5_PORT=50051
# Logging
LOG_LEVEL=debug
# Gateway Manager timing (seconds to wait after Platform API responds)
PLATFORM_INIT_DELAY=15| Service | URL | Credentials |
|---|---|---|
| Platform | http://localhost:3000 | admin / admin |
| Gateway4 | http://localhost:8083 | admin@itential / admin |
| Gateway5 | localhost:50051 (gRPC) | Use iagctl client |
| OpenLDAP | localhost:3389 | cn=admin,dc=itential,dc=io / admin |
| MCP | http://localhost:8000 (SSE) | N/A |
| OpenBao | http://localhost:8200 | Token from volumes/openbao/init-keys.json |
| MongoDB | localhost:27017 | N/A |
| Redis | localhost:6379 | N/A |
Start specific service combinations:
# All services (default)
docker compose --profile full up -d
# Platform + dependencies only (most common for development)
docker compose --profile platform up -d
# Dependencies only (MongoDB + Redis)
docker compose --profile deps up -d
# Add Gateway4 to running stack
docker compose --profile gateway4 up -d
# Add Gateway5 to running stack
docker compose --profile gateway5 up -d
# Platform with LDAP (for enterprise auth testing)
docker compose --profile platform --profile ldap up -d
# Platform with MCP (for LLM integration)
docker compose --profile platform --profile mcp up -d
# Full stack with OpenBao (for secrets management)
docker compose --profile full --profile openbao up -ditential-dev-stack/
βββ docker-compose.yml # Unified compose configuration
βββ .env # Your configuration (git-ignored)
βββ .env.example # Configuration template
βββ Makefile # Common commands
βββ scripts/
β βββ setup.sh # First-time setup
β βββ generate-certificates.sh
β βββ configure-gateway-manager.sh
βββ docs/ # Usage documentation
β βββ README.md # Client configuration examples
βββ volumes/
β βββ platform/
β β βββ adapters/ # Custom adapters
β β βββ ssl/ # SSL certificates
β β # Note: Platform logs use a named Docker volume (platform-logs)
β βββ gateway4/
β β βββ data/ # SQLite databases
β β βββ playbooks/ # Ansible playbooks
β β βββ scripts/ # Python scripts
β β βββ ssl/ # SSL certificates
β βββ gateway5/
β β βββ certificates/ # Gateway Manager certs
β β βββ scripts/ # Custom scripts
β β # Note: Gateway5 database uses a named Docker volume (gateway5-data)
β βββ ldap/
β β βββ openldap.ldif # LDAP users & groups
β βββ mcp/
β β βββ logs/ # MCP server logs
β βββ openbao/ # OpenBao configuration (optional)
βββ dependencies/
βββ mongodb-data/ # MongoDB persistent data
make help # Show all commands
make setup # First-time setup
make up # Start all services
make down # Stop all services
make logs # Follow all logs (or: make logs LOG=platform)
make status # Show status and URLs
make certs # Generate SSL certificates
make login # Login to AWS ECR
make clean # Stop and remove all data (destructive)
make generate-key # Generate new encryption keycd volumes/platform/adapters/
git clone https://gitlab.com/itentialopensource/adapters/adapter-servicenow.git
cd adapter-servicenow && npm install
cd ../../..
make up # Restart to load adapterFind adapters at Itential Automation Marketplace.
Playbooks and scripts must be executable to appear in the Gateway4 UI:
chmod +x volumes/gateway4/playbooks/*.yml
chmod +x volumes/gateway4/scripts/*.pyNote:
make setuphandles this automatically.
OpenLDAP is available as an optional service for testing enterprise LDAP authentication with Itential Platform.
Add to your .env file:
LDAP_ENABLED=trueThen run make setup - the LDAP adapter will be configured automatically via API.
After setup completes, you can log in with any LDAP user:
| User | Password | Access |
|---|---|---|
| admin@itential | admin | Full admin (all roles + Gateway Manager) |
| builder@itential | builder | LDAP group: builders |
| operator@itential | operator | LDAP group: operators |
Note: The
admin@itentialuser automatically receives all roles from the local admin account and is added toadmin_groupfor Gateway Manager access.
# Start Platform with LDAP container only
docker compose --profile platform --profile ldap up -d
# Configure LDAP adapter manually
./scripts/configure-ldap.sh| Property | Value |
|---|---|
| Host (from containers) | openldap |
| Host (from host) | localhost |
| Port | 389 (container) / 3389 (host) |
| Admin DN | cn=admin,dc=itential,dc=io |
| Admin Password | admin |
| Base DN | dc=itential,dc=io |
For advanced LDAP configuration, see the official documentation.
The MCP (Model Context Protocol) server enables LLM tools like Claude Code and Claude Desktop to interact with Itential Platform.
Add to your .env file:
MCP_ENABLED=trueThen run make setup or make up.
| Variable | Description | Default |
|---|---|---|
MCP_ENABLED |
Enable MCP server | false |
MCP_TRANSPORT |
Transport mode: stdio or sse |
stdio |
MCP_SSE_PORT |
Port for SSE transport | 8000 |
MCP_PLATFORM_USER |
Platform username | admin |
MCP_PLATFORM_PASSWORD |
Platform password | admin |
See docs/itential-mcp for Claude Desktop configuration examples.
For more information, see itential-mcp.
OpenBao is a Vault-compatible secrets management solution available as an optional service for storing and retrieving sensitive data.
Add to your .env file:
OPENBAO_ENABLED=trueThen run make setup. The setup script will:
- Start the OpenBao container
- Initialize and unseal OpenBao automatically
- Save the root token and unseal keys to
volumes/openbao/init-keys.json - Enable the KV v2 secrets engine
- Configure Platform environment variables for Vault integration
- Install and configure the HashiCorp Vault adapter in Platform
| Variable | Description | Default |
|---|---|---|
OPENBAO_ENABLED |
Enable OpenBao server | false |
OPENBAO_VERSION |
OpenBao image version | 2 |
OPENBAO_PORT |
API port | 8200 |
OpenBao runs with persistent file storage:
- Data persists across container restarts in the
openbao-dataDocker volume - Requires initialization on first run (handled automatically by
make setup) - Requires unsealing after restart (handled automatically by
configure-openbao.sh) - Root token is generated during initialization and saved locally
Platform is automatically configured with these environment variables:
ITENTIAL_VAULT_URL=http://openbao:8200ITENTIAL_VAULT_AUTH_METHOD=tokenITENTIAL_VAULT_TOKEN=<generated-root-token>ITENTIAL_VAULT_SECRETS_ENDPOINT=secret/data
After make setup, get your root token:
# View root token
cat volumes/openbao/init-keys.json | jq -r '.root_token'
# Or use the token from .env
grep ITENTIAL_VAULT_TOKEN .envWrite and read secrets:
# Set your token (replace with actual token)
export VAULT_TOKEN=$(cat volumes/openbao/init-keys.json | jq -r '.root_token')
# Write a secret using curl
curl -X POST http://localhost:8200/v1/secret/data/myapp/config \
-H "X-Vault-Token: $VAULT_TOKEN" \
-d '{"data": {"username": "admin", "password": "secret"}}'
# Read a secret
curl http://localhost:8200/v1/secret/data/myapp/config \
-H "X-Vault-Token: $VAULT_TOKEN"Access the web UI at http://localhost:8200 and log in with your root token.
If OpenBao is sealed after a container restart, run:
./scripts/configure-openbao.shFor detailed usage examples, see docs/openbao.
Gateway5 connects to Platform via Gateway Manager. The setup is fully automated:
- Generates client certificates (
volumes/gateway5/certificates/) - Uploads certificates to Platform via API
- Configures RBAC (assigns gateway roles to admin)
- Creates and enables the gateway cluster
If automatic configuration fails, the script displays manual instructions.
See Gateway Manager Documentation.
# Shell access (use podman instead of docker for Podman users)
docker exec -it platform /bin/sh
docker exec -it gateway4 /bin/sh
docker exec -it gateway5 sh
# MongoDB shell
docker exec -it mongodb mongosh
# Redis CLI
docker exec -it redis redis-cli
# Check environment
docker exec platform env | grep ITENTIALPodman users: Replace
dockerwithpodmanin the commands above, or usepodman-dockerfor automatic compatibility.