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: cleanspeak 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/ networks: - search_net restart: unless-stopped ulimits: memlock: soft: -1 hard: -1 nofile: soft: 65536 hard: 65536 volumes: - search_data:/usr/share/opensearch/data cleanspeak: image: cleanspeak/cleanspeak-app:latest depends_on: - db - search environment: DATABASE_URL: jdbc:postgresql://db:5432/cleanspeak DATABASE_ROOT_USERNAME: ${POSTGRES_USER} DATABASE_ROOT_PASSWORD: ${POSTGRES_PASSWORD} DATABASE_USERNAME: ${DATABASE_USER} DATABASE_PASSWORD: ${DATABASE_PASSWORD} CLEANSPEAK_APP_MEMORY: ${CLEANSPEAK_APP_MEMORY} LICENSE_ID: ${LICENSE_ID} SEARCH_SERVERS: http://search:9200 networks: - db_net - search_net restart: unless-stopped ports: - 8001:8001 volumes: - cs_config:/usr/local/cleanspeak/config networks: db_net: driver: bridge search_net: driver: bridge volumes: db_data: search_data: cs_config: