70 lines
1.9 KiB
YAML
70 lines
1.9 KiB
YAML
services:
|
|
|
|
mssql:
|
|
image: mcr.microsoft.com/mssql/server:2022-latest
|
|
environment:
|
|
SA_PASSWORD: ${SA_PASSWORD}
|
|
ACCEPT_EULA: "Y"
|
|
MSSQL_PID: Developer
|
|
ports:
|
|
- "1433:1433"
|
|
volumes:
|
|
- mssql_data:/var/opt/mssql
|
|
healthcheck:
|
|
test: ["CMD", "/opt/mssql-tools18/bin/sqlcmd", "-S", "localhost", "-U", "sa", "-P", "${SA_PASSWORD}", "-Q", "SELECT 1", "-No", "-l", "5"]
|
|
interval: 10s
|
|
timeout: 10s
|
|
retries: 12
|
|
start_period: 40s
|
|
|
|
keycloak:
|
|
image: quay.io/keycloak/keycloak:24.0
|
|
command: start-dev --import-realm --http-port=8180
|
|
environment:
|
|
KEYCLOAK_ADMIN: ${KC_ADMIN}
|
|
KEYCLOAK_ADMIN_PASSWORD: ${KC_ADMIN_PASSWORD}
|
|
KC_DB: dev-file
|
|
KC_HTTP_PORT: "8180"
|
|
KC_HOSTNAME_STRICT: "false"
|
|
KC_HOSTNAME_STRICT_HTTPS: "false"
|
|
KC_HTTP_ENABLED: "true"
|
|
KC_HEALTH_ENABLED: "true"
|
|
ports:
|
|
- "8180:8180"
|
|
volumes:
|
|
- ./keycloak:/opt/keycloak/data/import
|
|
- keycloak_data:/opt/keycloak/data
|
|
healthcheck:
|
|
# Keycloak image has no curl/wget; use bash TCP to confirm port is open
|
|
test: ["CMD-SHELL", "bash -c 'exec 3<>/dev/tcp/localhost/8180' 2>/dev/null && echo ok || exit 1"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 18
|
|
start_period: 30s
|
|
|
|
api:
|
|
build: .
|
|
ports:
|
|
- "9080:9080"
|
|
env_file: .env
|
|
environment:
|
|
DB_DSN: "sqlserver://sa:${SA_PASSWORD}@mssql:1433?database=workorders"
|
|
OIDC_ISSUER: "http://localhost:8180/realms/workorders"
|
|
JWKS_URL: "http://keycloak:8180/realms/workorders/protocol/openid-connect/certs"
|
|
extra_hosts:
|
|
- "localhost:host-gateway"
|
|
volumes:
|
|
- uploads:/uploads
|
|
- ./web:/app/web
|
|
depends_on:
|
|
mssql:
|
|
condition: service_healthy
|
|
keycloak:
|
|
condition: service_healthy
|
|
restart: on-failure
|
|
|
|
volumes:
|
|
mssql_data:
|
|
keycloak_data:
|
|
uploads:
|