Skip to content

Docker

services:
db:
image: postgres:16
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
ports:
- "5432:5432"
restart: unless-stopped
keycloak:
image: quay.io/keycloak/keycloak:26.3
container_name: keycloak
ports:
- "8080:8080"
environment:
KC_DB: postgres
KC_DB_URL: jdbc:postgresql://db:5432/keycloak
KC_DB_USERNAME: ${DB_USER}
KC_DB_PASSWORD: ${DB_PASSWORD}
KC_BOOTSTRAP_ADMIN_USERNAME: ${KEYCLOAK_ADMIN_USER}
KC_BOOTSTRAP_ADMIN_PASSWORD: ${KEYCLOAK_ADMIN_PASSWORD}
KC_HTTP_ENABLED: true
KC_HOSTNAME: keycloak
KC_HOSTNAME_PORT: 8080
KC_HOSTNAME_STRICT: false
KC_PROXY: edge
command: ["start-dev"]
depends_on:
- db
restart: unless-stopped
extra_hosts:
- "keycloak.local:host-gateway"
vault:
image: hashicorp/vault:1.21.1
container_name: vault
ports:
- "8200:8200"
environment:
VAULT_DEV_ROOT_TOKEN_ID: ${VAULT_TOKEN}
VAULT_ADDR: http://0.0.0.0:8200
volumes:
- vault_data:/vault/file
restart: unless-stopped
directory:
image: sysadminanywhere/directory:latest
container_name: directory
environment:
LDAP_SERVER: ${LDAP_SERVER}
LDAP_PORT: ${LDAP_PORT}
LDAP_USE_SSL: ${LDAP_USE_SSL}
LDAP_USERNAME: ${LDAP_USERNAME}
LDAP_PASSWORD: ${LDAP_PASSWORD}
KEYCLOAK_CLIENT_ID: ${KEYCLOAK_CLIENT_ID}
KEYCLOAK_CLIENT_SECRET: ${KEYCLOAK_CLIENT_SECRET}
KEYCLOAK_REDIRECT_URI: ${KEYCLOAK_REDIRECT_URI}
KEYCLOAK_ISSUER_URI: ${KEYCLOAK_ISSUER_URI}
VAULT_URI: http://vault:8200
VAULT_TOKEN: ${VAULT_TOKEN}
KAFKA_HOST: ${KAFKA_HOST}
SPRING_PROFILES_ACTIVE: prod
depends_on:
- vault
ports:
- "8081:8080"
inventory:
image: sysadminanywhere/inventory:latest
container_name: inventory
environment:
DB_ADDRESS: db
DB_PORT: 5432
DB_BASE: inventory
DB_USER: ${DB_USER}
DB_PASSWORD: ${DB_PASSWORD}
KEYCLOAK_CLIENT_ID: ${KEYCLOAK_CLIENT_ID}
KEYCLOAK_CLIENT_SECRET: ${KEYCLOAK_CLIENT_SECRET}
KEYCLOAK_REDIRECT_URI: ${KEYCLOAK_REDIRECT_URI}
KEYCLOAK_ISSUER_URI: ${KEYCLOAK_ISSUER_URI}
KAFKA_HOST: ${KAFKA_HOST}
DIRECTORY_SERVICE: http://directory:8080
SPRING_PROFILES_ACTIVE: prod
depends_on:
- db
- directory
ports:
- "8082:8080"
sysadminanywhere:
image: sysadminanywhere/sysadminanywhere:latest
container_name: sysadminanywhere
ports:
- "9090:8080"
environment:
DB_ADDRESS: db
DB_PORT: 5432
DB_BASE: sysadminanywhere
DB_USER: ${DB_USER}
DB_PASSWORD: ${DB_PASSWORD}
LDAP_GROUPS_ADMINS: "Domain Admins"
LDAP_GROUPS_USERS: "Domain Users"
KEYCLOAK_CLIENT_ID: ${KEYCLOAK_CLIENT_ID}
KEYCLOAK_CLIENT_SECRET: ${KEYCLOAK_CLIENT_SECRET}
KEYCLOAK_REDIRECT_URI: ${KEYCLOAK_REDIRECT_URI}
KEYCLOAK_ISSUER_URI: ${KEYCLOAK_ISSUER_URI}
KEYCLOAK_LOGOUT_URI: ${KEYCLOAK_LOGOUT_URI}
DIRECTORY_SERVICE: http://directory:8081
INVENTORY_SERVICE: http://inventory:8082
N8N_API_KEY: ${N8N_API_KEY}
SPRING_PROFILES_ACTIVE: prod
depends_on:
- db
- directory
volumes:
postgres_data:
vault_data:
zookeeper_data:
zookeeper_log:
kafka_data:
n8n_data:
# Database
DB_NAME=sysadminanywhere
DB_USER=[DB_USER]
DB_PASSWORD=[DB_PASSWORD]
# Keycloak
KEYCLOAK_ADMIN_USER=[KEYCLOAK_ADMIN_USER]
KEYCLOAK_ADMIN_PASSWORD=[KEYCLOAK_ADMIN_PASSWORD]
# Keycloak OAuth
KEYCLOAK_CLIENT_ID=sysadminanywhere
KEYCLOAK_CLIENT_SECRET=[KEYCLOAK_CLIENT_SECRET]
KEYCLOAK_REDIRECT_URI=http://localhost:9090/login/oauth2/code/keycloak
KEYCLOAK_ISSUER_URI=http://keycloak:8080/realms/sysadminanywhere
KEYCLOAK_LOGOUT_URI=http://keycloak:8080/realms/sysadminanywhere/protocol/openid-connect/logout
# LDAP
LDAP_SERVER=[LDAP_SERVER]
LDAP_PORT=389
LDAP_USE_SSL=false
LDAP_USERNAME=[LDAP_USERNAME]
LDAP_PASSWORD=[LDAP_PASSWORD]
# Vault
VAULT_TOKEN=[VAULT_TOKEN]
# N8N
N8N_HOST=http://localhost:5678
N8N_API_KEY=[N8N_API_KEY]
# Kafka
KAFKA_HOST=kafka:9092

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.

You can now access the service at http://localhost:9090