version: '3' services: db: image: postgres:16.0-bookworm environment: PGDATA: /var/lib/postgresql/data/pgdata POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} healthcheck: test: [ "CMD-SHELL", "pg_isready -U postgres" ] interval: 5s timeout: 5s retries: 5 networks: - db_net restart: unless-stopped volumes: - db_data:/var/lib/postgresql/data search: image: opensearchproject/opensearch:2.11.0 environment: cluster.name: fusionauth discovery.type: single-node node.name: search plugins.security.disabled: true bootstrap.memory_lock: true OPENSEARCH_JAVA_OPTS: ${OPENSEARCH_JAVA_OPTS} healthcheck: interval: 10s retries: 80 test: curl --write-out 'HTTP %{http_code}' --fail --silent --output /dev/null http://localhost:9200/ restart: unless-stopped ulimits: memlock: soft: -1 hard: -1 nofile: soft: 65536 hard: 65536 ports: - 9200:9200 # REST API - 9600:9600 # Performance Analyzer volumes: - search_data:/usr/share/opensearch/data networks: - search_net fusionauth: image: fusionauth/fusionauth-app:latest depends_on: db: condition: service_healthy search: condition: service_healthy environment: DATABASE_URL: jdbc:postgresql://db:5432/fusionauth DATABASE_ROOT_USERNAME: ${POSTGRES_USER} DATABASE_ROOT_PASSWORD: ${POSTGRES_PASSWORD} DATABASE_USERNAME: ${DATABASE_USERNAME} DATABASE_PASSWORD: ${DATABASE_PASSWORD} FUSIONAUTH_APP_MEMORY: ${FUSIONAUTH_APP_MEMORY} FUSIONAUTH_APP_RUNTIME_MODE: ${FUSIONAUTH_APP_RUNTIME_MODE} FUSIONAUTH_APP_URL: http://fusionauth:9011 SEARCH_SERVERS: http://search:9200 SEARCH_TYPE: elasticsearch healthcheck: test: curl --silent --fail http://localhost:9011/api/status -o /dev/null -w "%{http_code}" interval: 5s timeout: 5s retries: 5 networks: - db_net - search_net restart: unless-stopped ports: - 9011:9011 volumes: - fusionauth_config:/usr/local/fusionauth/config networks: db_net: driver: bridge search_net: driver: bridge volumes: db_data: fusionauth_config: search_data: