Docker
docker-compose.yaml
Section titled “docker-compose.yaml”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]
# DatabaseDB_NAME=sysadminanywhereDB_USER=[DB_USER]DB_PASSWORD=[DB_PASSWORD]
# LDAPLDAP_SERVER=[LDAP_SERVER]LDAP_PORT=389LDAP_USE_SSL=false
# VaultVAULT_TOKEN=[VAULT_TOKEN]
# N8NN8N_API_KEY=[N8N_API_KEY]
# IncidentWEF_SERVER=[WEF_SERVER]WEF_PORT=5985WEF_USERNAME=[WEF_USERNAME]WEF_PASSWORD=[WEF_PASSWORD]WEF_USE_SSL=falseWEF_SCAN_CRON=0 * * * * *
# InventoryINVENTORY_SCAN_CRON=0 * * * * *INVENTORY_USERNAME=[INVENTORY_USERNAME]INVENTORY_PASSWORD=[INVENTORY_PASSWORD]
# ALLOWED_USERS=admin,user1,user2# ALLOWED_GROUPS=ADMIN,MANAGER# Empty - Allow allALLOWED_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.