services: app: image: mcr.microsoft.com/devcontainers/base:ubuntu volumes: - ..:/workspace/growi:delegated - pnpm-store:/workspace/.pnpm-store - ${HOME}/.claude:/home/vscode/.claude - ${HOME}/.config/gh:/home/vscode/.config/gh - ${HOME}/.config/glab-cli:/home/vscode/.config/glab-cli - ../../growi-docker-compose:/workspace/growi-docker-compose:delegated - ../../share:/workspace/share:delegated - page_bulk_export_tmp:/tmp/page-bulk-export tty: true networks: - default - opentelemetry-collector-dev-setup_default mongo: image: mongo:8.2 restart: unless-stopped command: ["--replSet", "rs0", "--bind_ip_all"] ports: - 27017 volumes: - /data/db healthcheck: test: ["CMD", "mongosh", "--quiet", "--eval", "db.adminCommand('ping').ok"] interval: 5s timeout: 5s retries: 20 # Initializes the replica set and ensures Feature Compatibility Version matches the mongo image. # The replica set (single node `rs0`) is required for transactions and change streams used in development. # FCV update is required when the mongo image is upgraded while existing data persists in the volume. # https://www.mongodb.com/ja-jp/docs/upcoming/release-notes/8.2-upgrade-standalone/ mongo-init: image: mongo:8.2 depends_on: mongo: condition: service_healthy restart: 'no' entrypoint: - mongosh - --quiet - --host - mongo:27017 - --eval - | // 1. Initiate the replica set (single node) if not already initialized. try { const status = rs.status(); print(`Replica set already initialized: $${status.set}`); } catch (e) { if (e.codeName === 'NotYetInitialized') { print('Initiating replica set rs0...'); rs.initiate({ _id: 'rs0', members: [{ _id: 0, host: 'mongo:27017' }] }); // Wait until this node is elected primary so subsequent admin commands succeed. while (!db.hello().isWritablePrimary) { sleep(500); } print('Replica set initiated and primary is ready'); } else { throw e; } } // 2. Ensure FCV matches the mongo image. const target = '8.2'; const result = db.adminCommand({ getParameter: 1, featureCompatibilityVersion: 1 }); if (result.featureCompatibilityVersion.version === target) { print(`FCV already $${target}`); } else { db.adminCommand({ setFeatureCompatibilityVersion: target, confirm: true }); print(`FCV upgraded: $${result.featureCompatibilityVersion.version} -> $${target}`); } # This container requires '../../growi-docker-compose' repository # cloned from https://github.com/growilabs/growi-docker-compose.git elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:9.3.3 restart: unless-stopped ports: - 9200 environment: - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms256m -Xmx256m" - LOG4J_FORMAT_MSG_NO_LOOKUPS=true # CVE-2021-44228 mitigation for Elasticsearch <= 6.8.20/7.16.0 ulimits: memlock: soft: -1 hard: -1 volumes: - /usr/share/elasticsearch/data - ../../growi-docker-compose/elasticsearch/v9/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml - ../../growi-docker-compose/elasticsearch/v9/config/elasticsearch-plugins.yml:/usr/share/elasticsearch/config/elasticsearch-plugins.yml volumes: pnpm-store: page_bulk_export_tmp: networks: default: opentelemetry-collector-dev-setup_default: external: ${OPENTELEMETRY_COLLECTOR_DEV_ENABLED:-false}