version: "3.7" networks: simulation: driver: bridge ipam: driver: default config: - subnet: "10.1.0.0/22" services: foundry: image: ghcr.io/foundry-rs/foundry:nightly-9b73e06e1fe376738b92ae081107620291d50188 labels: com.centurylinklabs.watchtower.enable: '${WATCHTOWER_ENABLED:-false}' ports: - 0.0.0.0:8545:8545 command: - anvil --port=8545 --host=0.0.0.0 --chain-id=1337 --accounts=1 --allow-origin=* --block-time=12 --silent --config-out=anvil-config.txt networks: - simulation contract-repo-deployer: image: node:hydrogen-bullseye labels: com.centurylinklabs.watchtower.enable: '${WATCHTOWER_ENABLED:-false}' environment: - RPC_URL=${RPC_URL:-http://foundry:8545} entrypoint: sh command: - '/opt/deploy_rln_contract.sh' volumes: - ./deploy_rln_contract.sh:/opt/deploy_rln_contract.sh depends_on: - foundry networks: - simulation bootstrap: image: ${NWAKU_IMAGE:-wakuorg/nwaku:latest} restart: on-failure labels: com.centurylinklabs.watchtower.enable: '${WATCHTOWER_ENABLED:-false}' # TODO: expose some ports to inject traffic ports: - 127.0.0.1:60000:60000 - 127.0.0.1:8008:8008 - 127.0.0.1:9000:9000 - 127.0.0.1:8645:8645 entrypoint: sh command: - '/opt/run_bootstrap.sh' volumes: - ./run_bootstrap.sh:/opt/run_bootstrap.sh:Z networks: - simulation nwaku: image: ${NWAKU_IMAGE:-wakuorg/nwaku:latest} restart: on-failure labels: com.centurylinklabs.watchtower.enable: '${WATCHTOWER_ENABLED:-false}' deploy: replicas: ${NUM_NWAKU_NODES:-5} entrypoint: sh environment: - RPC_URL=${RPC_URL:-http://foundry:8545} - PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 - RLN_CONTRACT_ADDRESS=0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0 - RLN_CREDENTIAL_PATH=/keystore.json - RLN_CREDENTIAL_PASSWORD=passw123 command: - '/opt/run_nwaku.sh' volumes: - ./run_nwaku.sh:/opt/run_nwaku.sh:Z depends_on: - bootstrap - contract-repo-deployer networks: - simulation rest-traffic: build: context: . dockerfile: Dockerfile.rest-traffic command: > python /opt/traffic.py --multiple-nodes=http://waku-simulator_nwaku_[1..${NUM_NWAKU_NODES:-5}]:8645 --msg-size-kbytes=${MSG_SIZE_KBYTES:-10} --delay-seconds=${TRAFFIC_DELAY_SECONDS:-15} volumes: - ./traffic.py:/opt/traffic.py:Z networks: - simulation depends_on: - nwaku prometheus: image: prom/prometheus:latest volumes: - ./monitoring/prometheus-config.yml:/etc/prometheus/prometheus.yml:z - ./monitoring/alert-manager/alert-rules.yml:/etc/prometheus/alert-rules.yml:z command: - --config.file=/etc/prometheus/prometheus.yml - --storage.tsdb.retention.time=7d ports: - 127.0.0.1:9090:9090 restart: on-failure depends_on: - alertmanager networks: - simulation grafana: image: grafana/grafana:latest env_file: - ./monitoring/configuration/grafana-plugins.env volumes: - ./monitoring/configuration/grafana.ini:/etc/grafana/grafana.ini:z - ./monitoring/configuration/dashboards.yaml:/etc/grafana/provisioning/dashboards/dashboards.yaml:z - ./monitoring/configuration/datasources.yaml:/etc/grafana/provisioning/datasources/datasources.yaml:z - ./monitoring/configuration/dashboards:/var/lib/grafana/dashboards/:z - ./monitoring/configuration/customizations/custom-logo.svg:/usr/share/grafana/public/img/grafana_icon.svg:z - ./monitoring/configuration/customizations/custom-logo.svg:/usr/share/grafana/public/img/grafana_typelogo.svg:z - ./monitoring/configuration/customizations/custom-logo.png:/usr/share/grafana/public/img/fav32.png:z ports: - 0.0.0.0:3001:3001 restart: on-failure depends_on: - prometheus networks: - simulation cadvisor: image: gcr.io/cadvisor/cadvisor:latest container_name: cadvisor #ports: # - 8080:8080 volumes: - /:/rootfs:ro - /var/run:/var/run:rw - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro depends_on: - redis networks: - simulation redis: image: redis:latest container_name: redis #ports: # - 6379:6379 networks: - simulation api: image: web3labs/epirus-free-api:latest ports: - 127.0.0.1:8090:8090 environment: - NODE_ENDPOINT=${RPC_URL:-http://foundry:8545} - MONGO_CLIENT_URI=mongodb://mongodb:27017 - REINDEX_ENDPOINT=http://ingestion/reindex/ - MONGO_DB_NAME=epirus - MONGO_CREATE_INDICES=true - REDIS_HOST=redis - REDIS_PORT=6379 depends_on: - redis - mongodb - foundry networks: - simulation mongodb: image: mongo:5.0.8 environment: - COMPOSE_HTTP_TIMEOUT=900 - DOCKER_CLIENT_TIMEOUT=900 entrypoint: mongod --bind_ip "0.0.0.0" networks: - simulation web: image: web3labs/epirus-free-web:latest ports: - 0.0.0.0:3000:3000 environment: - API_URL=${EPIRUS_WEB_API_URL:-http://localhost:8090} - WS_API_URL=${EPIRUS_WEB_WS_API_URL:-ws://localhost:8090} - DISPLAY_NETWORK_TAB=disabled depends_on: - api networks: - simulation ingestion: image: web3labs/epirus-free-ingestion:latest environment: - NODE_ENDPOINT=${RPC_URL:-http://foundry:8545} - MONGO_CLIENT_URI=mongodb://mongodb:27017 - MONGO_DB_NAME=epirus - LIST_OF_METRICS_TO_CALCULATE_PER_MINUTE=hourly,daily,monthly,yearly depends_on: - mongodb - redis - foundry networks: - simulation env_replacer: image: alpine:3.19.1 environment: - DISCORD_WEBHOOK=$DISCORD_WEBHOOK volumes: - ./monitoring/alert-manager/alertmanager-config.yml.template:/etc/alertmanager/alertmanager.yml.template:z - ./monitoring/alert-manager/alertmanager-config.yml:/etc/alertmanager/alertmanager.yml:z command: ["/bin/sh", "-c", "apk add --no-cache gettext && envsubst < /etc/alertmanager/alertmanager.yml.template > /etc/alertmanager/alertmanager.yml"] alertmanager: image: prom/alertmanager:latest volumes: - ./monitoring/alert-manager/alertmanager-config.yml:/etc/alertmanager/alertmanager.yml:z command: - --config.file=/etc/alertmanager/alertmanager.yml ports: - 127.0.0.1:9093:9093 restart: on-failure networks: - simulation depends_on: - env_replacer