Skip to content

Docker

services:
db:
image: postgres:17
container_name: db
environment:
POSTGRES_DB: ${DB_NAME}
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- postgres_data:/var/lib/postgresql/data
- ./db/init-multiple-dbs.sh:/docker-entrypoint-initdb.d/init-multiple-dbs.sh
restart: unless-stopped
vault:
image: hashicorp/vault:latest
container_name: vault
environment:
VAULT_DEV_ROOT_TOKEN_ID: ${VAULT_TOKEN}
VAULT_ADDR: http://0.0.0.0:8200
volumes:
- vault_data:/vault/file
restart: unless-stopped
n8n:
image: n8nio/n8n:stable
container_name: n8n
ports:
- "5678:5678"
environment:
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=${N8N_USER}
- N8N_BASIC_AUTH_PASSWORD=${N8N_PASSWORD}
- N8N_ENDPOINT_WEBHOOK=true
- N8N_PROTOCOL=http
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=db
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=${DB_USER}
- DB_POSTGRESDB_PASSWORD=${DB_PASSWORD}
- N8N_METRICS=true
- N8N_LOG_LEVEL=info
- N8N_HOST=http://n8n:5678
- WEBHOOK_URL=http://n8n:5678/
- GENERIC_TIMEZONE=UTC
depends_on:
- db
restart: unless-stopped
volumes:
- n8n_data:/home/node/.n8n
directory:
image: sysadminanywhere/directory:${APP_IMAGE_TAG}
container_name: directory
environment:
LDAP_SERVER: ${LDAP_SERVER}
LDAP_PORT: ${LDAP_PORT}
LDAP_USE_SSL: ${LDAP_USE_SSL}
VAULT_URI: http://vault:8200
VAULT_TOKEN: ${VAULT_TOKEN}
JWT_SECRET: ${JWT_SECRET}
SPRING_PROFILES_ACTIVE: prod
depends_on:
- vault
restart: unless-stopped
inventory:
image: sysadminanywhere/inventory:${APP_IMAGE_TAG}
container_name: inventory
environment:
DB_ADDRESS: db
DB_PORT: 5432
DB_BASE: inventory
DB_USER: ${DB_USER}
DB_PASSWORD: ${DB_PASSWORD}
DIRECTORY_SERVICE: http://directory:8080
SCAN_CRON: ${INVENTORY_SCAN_CRON}
LDAP_USERNAME: ${INVENTORY_USERNAME}
LDAP_PASSWORD: ${INVENTORY_PASSWORD}
JWT_SECRET: ${JWT_SECRET}
SPRING_PROFILES_ACTIVE: prod
ports:
- "8082:8080"
restart: unless-stopped
incident:
image: sysadminanywhere/incident:${APP_IMAGE_TAG}
container_name: incident
environment:
DB_ADDRESS: db
DB_PORT: 5432
DB_BASE: incident
DB_USER: ${DB_USER}
DB_PASSWORD: ${DB_PASSWORD}
DIRECTORY_SERVICE: http://directory:8080
SCAN_CRON: ${WEF_SCAN_CRON}
WEF_SERVER: ${WEF_SERVER}
WEF_PORT: ${WEF_PORT}
WEF_USERNAME: ${WEF_USERNAME}
WEF_PASSWORD: ${WEF_PASSWORD}
WEF_USE_SSL: ${WEF_USE_SSL}
JWT_SECRET: ${JWT_SECRET}
SPRING_PROFILES_ACTIVE: prod
depends_on:
- db
- directory
restart: unless-stopped
sysadminanywhere:
image: sysadminanywhere/sysadminanywhere:${APP_IMAGE_TAG}
container_name: sysadminanywhere
ports:
- "8080:8080"
environment:
DB_ADDRESS: db
DB_PORT: 5432
DB_BASE: sysadminanywhere
DB_USER: ${DB_USER}
DB_PASSWORD: ${DB_PASSWORD}
DIRECTORY_SERVICE: http://directory:8080
INVENTORY_SERVICE: http://inventory:8080
INCIDENT_SERVICE: http://incident:8080
JWT_SECRET: ${JWT_SECRET}
N8N_HOST: http://n8n:5678
N8N_API_KEY: ${N8N_API_KEY}
SPRING_PROFILES_ACTIVE: prod
ALLOWED_USERS: ${ALLOWED_USERS}
ALLOWED_GROUPS: ${ALLOWED_GROUPS}
depends_on:
- db
- directory
- inventory
- incident
restart: unless-stopped
volumes:
postgres_data:
vault_data:
n8n_data:
# Use a verified, published 4.x tag for all application images.
APP_IMAGE_TAG=[PUBLISHED_4X_TAG]
# Database
DB_NAME=sysadminanywhere
DB_USER=[DB_USER]
DB_PASSWORD=[DB_PASSWORD]
# LDAP
LDAP_SERVER=[LDAP_SERVER]
LDAP_PORT=389
LDAP_USE_SSL=false
# Vault
VAULT_TOKEN=[VAULT_TOKEN]
# N8N
N8N_API_KEY=[N8N_API_KEY]
# Incident
WEF_SERVER=[WEF_SERVER]
WEF_PORT=5985
WEF_USERNAME=[WEF_USERNAME]
WEF_PASSWORD=[WEF_PASSWORD]
WEF_USE_SSL=false
WEF_SCAN_CRON=0 * * * * *
# Inventory
INVENTORY_SCAN_CRON=0 * * * * *
INVENTORY_USERNAME=[INVENTORY_USERNAME]
INVENTORY_PASSWORD=[INVENTORY_PASSWORD]
# ALLOWED_USERS=admin,user1,user2
# ALLOWED_GROUPS=ADMIN,MANAGER
# Empty - Allow all
ALLOWED_USERS=[ALLOWED_USERS]
ALLOWED_GROUPS=[ALLOWED_GROUPS]

Replace the values specified in [VALUE_NAME] with actual values. Change service addresses and ports if necessary. After configuring all services and specifying the necessary parameters, restart them.

Open the service on the host port mapped in your Compose file (the example maps port 8080). Verify that the selected 4.x image tag exists before starting; latest may point to a different major version.