name: menshen services: postgresql-base: image: postgres:16 healthcheck: test: ["CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}"] interval: 1s timeout: 2s retries: 300 env_file: - env.d/development/postgresql - env.d/development/postgresql.local ports: - "15432:5432" networks: lasuite: aliases: - postgresql postgresql: extends: service: postgresql-base postgresql-pc: extends: service: postgresql-base redis: image: redis:5 networks: lasuite: aliases: - redis ports: - "6379:6379" menshen-base: build: context: . dockerfile: ./src/backend/Dockerfile target: backend-development args: DOCKER_USER: ${DOCKER_USER:-1000} user: ${DOCKER_USER:-1000} image: menshen:backend-development environment: - DJANGO_CONFIGURATION=Development env_file: - env.d/development/common - env.d/development/common.local - env.d/development/postgresql - env.d/development/postgresql.local healthcheck: test: ["CMD-SHELL", "curl localhost:8000/__heartbeat__"] interval: 1s timeout: 2s retries: 300 networks: lasuite: aliases: - menshen volumes: - ./src/backend:/app - ./data/static:/data/static menshen: extends: service: menshen-base ports: - "8071:8000" depends_on: postgresql: condition: service_healthy restart: true redis: condition: service_started keycloak: condition: service_healthy # Use proconnect instead of local keycloak instance menshen-pc: extends: service: menshen-base env_file: - env.d/development/common - env.d/development/common.local - env.d/development/postgresql - env.d/development/postgresql.local - env.d/development/proconnect.local ports: - "8071:8000" depends_on: postgresql-pc: condition: service_healthy restart: true redis: condition: service_started menshen-e2e: extends: service: menshen-base environment: OIDC_OP_URL: http://keycloak:8080/realms/menshen depends_on: postgresql: condition: service_healthy restart: true redis: condition: service_started keycloak-e2e: condition: service_healthy kc_postgresql: image: postgres:14.3 healthcheck: test: ["CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}"] interval: 1s timeout: 2s retries: 300 networks: lasuite: aliases: - kc_postgresql ports: - "5433:5432" env_file: - env.d/development/kc_postgresql - env.d/development/kc_postgresql.local keycloak: image: quay.io/keycloak/keycloak:26.6 volumes: - ./docker/auth/realm.json:/opt/keycloak/data/import/realm.json command: - start-dev - --features=preview - --import-realm - --hostname=http://localhost:8080 - --hostname-backchannel-dynamic=true - --hostname-strict=false - --health-enabled=true - --metrics-enabled=true healthcheck: test: ['CMD-SHELL', 'exec 3<>/dev/tcp/localhost/9000; echo -e "GET /health/live HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n" >&3; grep "HTTP/1.1 200 OK" <&3'] start_period: 5s interval: 1s timeout: 2s retries: 300 environment: KEYCLOAK_ADMIN: admin KEYCLOAK_ADMIN_PASSWORD: admin KC_DB: postgres KC_DB_URL_HOST: kc_postgresql KC_DB_URL_DATABASE: keycloak KC_DB_PASSWORD: pass KC_DB_USERNAME: menshen KC_DB_SCHEMA: public PROXY_ADDRESS_FORWARDING: 'true' ports: - "8080:8080" networks: lasuite: aliases: - keycloak depends_on: kc_postgresql: condition: service_healthy restart: true keycloak-e2e: extends: service: keycloak command: - start-dev - --features=preview - --import-realm - --hostname=http://keycloak:8080 - --hostname-backchannel-dynamic=true - --hostname-strict=false - --health-enabled=true - --metrics-enabled=true playground-source-base: build: context: . dockerfile: ./src/playground/source/Dockerfile target: backend-development image: menshen:playground-source ports: - "8072:8000" develop: watch: - action: sync+restart path: ./src/playground/source target: /app ignore: - ./src/playground/source/.venv/ - action: rebuild path: ./src/playground/source/uv.lock - action: rebuild path: ./src/playground/source/Dockerfile networks: lasuite: aliases: - playground-source playground-source: extends: service: playground-source-base env_file: - env.d/development/common environment: DJANGO_SETTINGS_MODULE: source.settings depends_on: keycloak: condition: service_healthy menshen: condition: service_healthy playground-source-e2e: extends: service: playground-source-base env_file: - env.d/development/common environment: DJANGO_SETTINGS_MODULE: source.settings OIDC_OP_URL: http://keycloak:8080/realms/menshen PLAYGROUND_SOURCE_SERVICE_NETLOC: playground-source:8000 depends_on: menshen-e2e: condition: service_healthy # Use proconnect instead of local keycloak instance playground-source-pc: extends: service: playground-source-base env_file: - env.d/development/proconnect.local depends_on: menshen-pc: condition: service_healthy playground-target-base: build: context: . dockerfile: ./src/playground/target/Dockerfile target: backend-development image: menshen:playground-target ports: - "8073:8000" develop: watch: - action: sync+restart path: ./src/playground/target target: /app ignore: - ./src/playground/target/.venv/ - action: rebuild path: ./src/playground/target/uv.lock - action: rebuild path: ./src/playground/target/Dockerfile networks: lasuite: aliases: - playground-target playground-target: extends: service: playground-target-base env_file: - env.d/development/common environment: DJANGO_SETTINGS_MODULE: target.settings depends_on: keycloak: condition: service_healthy menshen: condition: service_healthy playground-target-e2e: extends: service: playground-target-base env_file: - env.d/development/common environment: OIDC_OP_URL: http://keycloak:8080/realms/menshen PLAYGROUND_TARGET_SERVICE_NETLOC: playground-target:8000 DJANGO_SETTINGS_MODULE: target.settings depends_on: menshen-e2e: condition: service_healthy playground-target-pc: extends: service: playground-target-base env_file: - env.d/development/proconnect.local depends_on: menshen-pc: condition: service_healthy # Utils openssl: image: alpine/openssl:3.5.8 playwright: build: context: . dockerfile: ./src/e2e/Dockerfile args: DOCKER_UID: ${DOCKER_UID:-1000} user: ${DOCKER_USER:-1000} volumes: - ./src/e2e:/app ports: - "3000:8000" networks: lasuite: aliases: - playwright depends_on: - playground-source-e2e - playground-target-e2e networks: lasuite: name: lasuite-network driver: bridge external: true volumes: venv: