services: app: build: context: ".docker/app" args: PHP_VERSION: "8.4" restart: "unless-stopped" volumes: - ".:/var/www/glpi:rw" - "custom_php_ini:/usr/local/etc/php/custom_conf.d/:rw" ports: - "8080:80" - "8090:8090" # E2E test server - "9637:9637" depends_on: - db extra_hosts: - "host.docker.internal:host-gateway" db: image: "mariadb:11.8" restart: "unless-stopped" volumes: - "db:/var/lib/mysql" - ".docker/initdb.sql:/docker-entrypoint-initdb.d/initdb.sql" environment: MARIADB_ROOT_PASSWORD: "glpi" MARIADB_DATABASE: "glpi" MARIADB_USER: "glpi" MARIADB_PASSWORD: "glpi" expose: - "3306" mailpit: image: "axllent/mailpit" restart: "unless-stopped" expose: - "1025" ports: - "8025:8025" dbgate: image: "dbgate/dbgate:latest" restart: "unless-stopped" ports: - "9000:3000" environment: CONNECTIONS: "glpi" LABEL_glpi: "GLPI Mysql Server" SERVER_glpi: "db" USER_glpi: "glpi" PASSWORD_glpi: "glpi" PORT_glpi: 3306 ENGINE_glpi: "mysql@dbgate-plugin-mysql" # OpenID OAuth server # Opt-in: `docker compose --profile keycloak up -d keycloak`. # Same host:9090 as in-container port so the OIDC issuer is identical whether # reached from the browser (needs `127.0.0.1 keycloak.glpi.local` in /etc/hosts) or from # the app container (compose DNS alias). See .docker/keycloak/README.md. keycloak: image: "quay.io/keycloak/keycloak:26.0" profiles: ["keycloak"] restart: "unless-stopped" command: ["start-dev", "--import-realm", "--http-port=9090"] environment: KC_BOOTSTRAP_ADMIN_USERNAME: "admin" KC_BOOTSTRAP_ADMIN_PASSWORD: "admin" KC_HOSTNAME: "http://keycloak.glpi.local:9090" KC_HTTP_ENABLED: "true" KC_HEALTH_ENABLED: "true" ports: - "9090:9090" # Network alias so the app container resolves the same hostname as the browser, # keeping the OIDC issuer identical on both sides. networks: default: aliases: - "keycloak.glpi.local" volumes: - "./.docker/keycloak/realm-glpi.json:/opt/keycloak/data/import/realm-glpi.json:ro" # To create a preconfigured LDAP object in GLPI, run `make console c='tools:generate_dev_ldap'` openldap: image: "osixia/openldap:latest" restart: "unless-stopped" environment: LDAP_ORGANISATION: "GLPI" LDAP_DOMAIN: "glpi.org" LDAP_ADMIN_USERNAME: "admin" LDAP_ADMIN_PASSWORD: "admin" command: "--copy-service" volumes: - "./tests/LDAP/ldif/10-users.ldif:/container/service/slapd/assets/config/bootstrap/ldif/50-bootstrap.ldif:rw" - "ldap_files:/var/lib/ldap:rw" - "ldap_config:/etc/ldap/slapd.d/:rw" volumes: db: custom_php_ini: ldap_files: ldap_config: