services: nginx-proxy: image: jc21/nginx-proxy-manager:latest container_name: nginx-proxy-manager ports: - "80:80" - "443:443" - "81:81" volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt environment: - TZ=${TZ:-Asia/Bangkok} networks: - shared_data_network restart: unless-stopped keycloak: image: quay.io/keycloak/keycloak:23.0 container_name: keycloak command: start-dev environment: KC_BOOTSTRAP_ADMIN_USERNAME: ${KEYCLOAK_ADMIN} KC_BOOTSTRAP_ADMIN_PASSWORD: ${KEYCLOAK_ADMIN_PASSWORD} KC_DB: postgres KC_DB_URL: jdbc:postgresql://postgres:5432/${DB_NAME} KC_DB_USERNAME: ${DB_USER} KC_DB_PASSWORD: ${DB_PASSWORD} KC_HOSTNAME_STRICT: "false" KC_HTTP_ENABLED: "true" KC_PROXY: edge ports: - "8080:8080" networks: - shared_data_network restart: unless-stopped depends_on: - postgres postgres: image: postgres:15-alpine container_name: postgres environment: POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_USER: ${DB_USER} POSTGRES_DB: ${DB_NAME} TZ: ${TZ:-Asia/Bangkok} volumes: - ./data/postgres:/var/lib/postgresql/data - ./init:/docker-entrypoint-initdb.d networks: - shared_data_network restart: unless-stopped healthcheck: test: ["CMD-SHELL", "pg_isready -U ${DB_USER}"] interval: 10s timeout: 5s retries: 5 networks: shared_data_network: external: true