name: genarrative-container-loadtest services: spacetimedb: image: clockworklabs/spacetime:v2.2.0 user: root command: [ "start", "--listen-addr", "0.0.0.0:3101", "--data-dir", "/var/lib/spacetimedb", "--page_pool_max_size", "402653184", "--non-interactive", ] cpus: "1.0" mem_limit: 896m ports: - "${GENARRATIVE_CONTAINER_SPACETIME_PORT:-13101}:3101" volumes: - spacetime-data:/var/lib/spacetimedb ulimits: nofile: soft: 4096 hard: 4096 healthcheck: test: [ "CMD-SHELL", "spacetime server ping http://127.0.0.1:3101 >/dev/null 2>&1", ] interval: 10s timeout: 5s retries: 12 start_period: 20s api-server: build: context: ../.. dockerfile: deploy/container/api-server.Dockerfile target: api-runtime cpus: "2.0" mem_limit: 1g env_file: - ./api-server.env environment: GENARRATIVE_API_HOST: 0.0.0.0 GENARRATIVE_API_PORT: 8082 OTEL_EXPORTER_OTLP_ENDPOINT: http://otelcol:4318 extra_hosts: - "host.docker.internal:host-gateway" volumes: - api-auth-store:/var/lib/genarrative/auth - api-tracking-outbox:/var/lib/genarrative/tracking-outbox ulimits: nofile: soft: 4096 hard: 4096 depends_on: spacetimedb: condition: service_healthy otelcol: condition: service_started healthcheck: test: ["CMD", "curl", "-fsS", "http://127.0.0.1:8082/healthz"] interval: 10s timeout: 3s retries: 12 start_period: 20s nginx: build: context: ../.. dockerfile: deploy/container/api-server.Dockerfile target: nginx-runtime cpus: "0.5" mem_limit: 128m depends_on: api-server: condition: service_healthy spacetimedb: condition: service_healthy ports: - "${GENARRATIVE_CONTAINER_HTTP_PORT:-18080}:80" extra_hosts: - "host.docker.internal:host-gateway" volumes: - nginx-logs:/var/log/nginx ulimits: nofile: soft: 4096 hard: 4096 healthcheck: test: ["CMD", "wget", "-qO-", "http://127.0.0.1/api/runtime/puzzle/gallery"] interval: 10s timeout: 5s retries: 12 start_period: 20s otelcol: image: otel/opentelemetry-collector-contrib:0.151.0 command: ["--config=/etc/otelcol/config.yaml"] cpus: "0.25" mem_limit: 128m environment: GRAFANA_CLOUD_OTLP_ENDPOINT: ${GRAFANA_CLOUD_OTLP_ENDPOINT:-} GRAFANA_CLOUD_BASIC_AUTH_HEADER: ${GRAFANA_CLOUD_BASIC_AUTH_HEADER:-} HOSTNAME: ${HOSTNAME:-genarrative-container-loadtest} volumes: - ${GENARRATIVE_CONTAINER_OTELCOL_CONFIG:-./otelcol.yaml}:/etc/otelcol/config.yaml:ro ports: - "${GENARRATIVE_CONTAINER_OTLP_GRPC_PORT:-4317}:4317" - "${GENARRATIVE_CONTAINER_OTLP_HTTP_PORT:-4318}:4318" k6: image: grafana/k6:0.52.0 profiles: ["loadtest"] cpus: "1.0" mem_limit: 512m depends_on: nginx: condition: service_healthy environment: BASE_URL: http://nginx WORKS_DATA: data/works-list.sample.json SCENARIO: ${SCENARIO:-spike} START_RPS: ${START_RPS:-5} PEAK_RPS: ${PEAK_RPS:-250} HOLD: ${HOLD:-60s} END_RPS: ${END_RPS:-5} PREALLOCATED_VUS: ${PREALLOCATED_VUS:-100} MAX_VUS: ${MAX_VUS:-500} DETAIL_RATIO: ${DETAIL_RATIO:-0} SLEEP_MIN_SECONDS: ${SLEEP_MIN_SECONDS:-0} SLEEP_MAX_SECONDS: ${SLEEP_MAX_SECONDS:-0} volumes: - ../../scripts/loadtest:/scripts/loadtest:ro working_dir: /scripts/loadtest command: ["run", "k6-works-list.js"] volumes: spacetime-data: api-auth-store: api-tracking-outbox: nginx-logs: