logos-messaging-simulator/docker-compose.yml
2025-03-17 15:49:10 +01:00

358 lines
11 KiB
YAML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

version: "3.7"
x-bootstrap-environment: &bootstrap_env
BOOTSTRAP_IP: 10.2.0.100
BOOTSTRAP_MULTIADDRESS: "/ip4/10.2.0.100/tcp/60000/p2p/16Uiu2HAmGNtM2rQ8abySFNhqPDFY4cmfAEpfo9Z9fD3NekoFR2ip"
BOOTSTRAP_ENR: "enr:-LG4QK3uc1orOi79J5eAprzwyfj4QcYaR_oamz1YY0U3PmaRY807UrJTkQJiSDT8PNmIPwxIw9POrel-sf1OOTlcK9UCgmlkgnY0gmlwhAoCAGSKbXVsdGlhZGRyc4oACAQKAgBkBupggnJzhQBCAQAAiXNlY3AyNTZrMaEDN06qX-XhZ-Cc7ZuIAdGNCVUicscmbFvEEfkFOQ2W_j2DdGNwgupgg3VkcIIjKIV3YWt1MgA"
x-servicenode-environment: &servicenode_env
SERVICENODE_IP: 10.2.0.101
SERVICENODE_MULTIADDRESS: "/ip4/10.2.0.101/tcp/60001/p2p/16Uiu2HAkyte8uj451tGkbww4Mjcg6DRnmAHxNeWyF4zp23RbpG3n"
SERVICENODE_WS_MULTIADDRESS: "/ip4/10.2.0.101/tcp/8000/ws/p2p/16Uiu2HAkyte8uj451tGkbww4Mjcg6DRnmAHxNeWyF4zp23RbpG3n"
SERVICENODE_ENR: "enr:-LO4QDhRxZ-YJBeiriq07BkSiA-qSJCcy3Kz7bAWXeop48dIPpsQK2QNuDX7umonw3Wu0zFXXoMxGrIFmpQiJ1mBd_sBgmlkgnY0gmlwhAoCAGWKbXVsdGlhZGRyc4wACgQKAgBlBh9A3QOCcnOFAEIBAACJc2VjcDI1NmsxoQJCV1iKpD3kj-6EDB8QIiRtUZE3-g0OK1QbmXL2OoziNYN0Y3CC6mCDdWRwgiMohXdha3UyDw"
x-edgenode-environment: &edgenode_env
EDGENODE_IP: 10.2.0.102
EDGENODE_MULTIADDRESS: "/ip4/10.2.0.102/tcp/60002/p2p/16Uiu2HAm5tojCrfxXrum5VxAVtCQk6h1jkA2Ecy447rQkKwwgf51"
EDGENODE_ENR: "enr:-KC4QAsSQM0tP9Zs8UxbHl3pe7HKE_0xLNA2P5LLVCbzCArsATKeH6EK43hhQJznAKjaMcpzqbMcd3UEjYJSkahMyg4BgmlkgnY0gmlwhAoCAGaKbXVsdGlhZGRyc4CCcnOFAEIBAACJc2VjcDI1NmsxoQKbiE_1i7pL24P02qgEFs0jHaso1XPo8HmcXAfqJPjGeIN0Y3CC6mKFd2FrdTIA"
x-rln-environment: &rln_env
RPC_URL: ${RPC_URL:-http://foundry:8545}
RLN_CONTRACT_ADDRESS: 0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9
RLN_CREDENTIAL_PATH: /keystore.json
RLN_CREDENTIAL_PASSWORD: passw123
RLN_RELAY_MSG_LIMIT: ${RLN_RELAY_MSG_LIMIT:-10}
RLN_RELAY_EPOCH_SEC: ${RLN_RELAY_EPOCH_SEC:-60}
x-pg-pass: &pg_pass test123
x-pg-user: &pg_user postgres
x-pg-environment: &pg_env
POSTGRES_USER: *pg_user
POSTGRES_PASSWORD: *pg_pass
x-pg-exporter-env: &pg_exp_env
environment:
POSTGRES_PASSWORD: *pg_pass
DATA_SOURCE_URI: postgres?sslmode=disable
DATA_SOURCE_USER: *pg_user
DATA_SOURCE_PASS: *pg_pass
PG_EXPORTER_EXTEND_QUERY_PATH: /etc/pgexporter/queries.yml
networks:
simulation:
driver: bridge
ipam:
driver: default
config:
- subnet: "10.2.0.0/24"
services:
# Accounts are hardcoded to 520 with the idea that nwaku nodes use up to 500 for membership registration and the last 20 are used for ad-hoc testing.
# The account number and private key pairs of the last 20 accounts can be found in the Register memberships section of the Waku-simulator book.
foundry:
image: ghcr.io/foundry-rs/foundry:nightly-9b73e06e1fe376738b92ae081107620291d50188
labels:
com.centurylinklabs.watchtower.enable: '${WATCHTOWER_ENABLED:-true}'
ports:
- 0.0.0.0:8545:8545
command:
- anvil
--port=8545
--host=0.0.0.0
--accounts=520
--allow-origin=*
--block-time=12
--chain-id=1234
--silent
--config-out=/shared/anvil-config.txt
volumes:
- privatekeys-volume:/shared
networks:
- simulation
contract-repo-deployer:
image: node:hydrogen-bullseye
labels:
com.centurylinklabs.watchtower.enable: '${WATCHTOWER_ENABLED:-true}'
environment:
- RLN_CONTRACT_REPO_COMMIT=${RLN_CONTRACT_REPO_COMMIT:-64df4593c6a14e43b8b0e9b396d2f4772bb08b34}
- PRIVATE_KEY=${PRIVATE_KEY:-0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80}
- RPC_URL=${RPC_URL:-http://foundry:8545}
- ETH_FROM=${ETH_FROM:-0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266}
- MAX_MESSAGE_LIMIT=${MAX_MESSAGE_LIMIT:-20}
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:-true}'
# 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:8646:8645
entrypoint: sh
command:
- '/opt/run_bootstrap.sh'
volumes:
- ./run_bootstrap.sh:/opt/run_bootstrap.sh:Z
networks:
simulation:
ipv4_address: 10.2.0.100
servicenode:
image: ${NWAKU_IMAGE:-wakuorg/nwaku:latest}
restart: on-failure
labels:
com.centurylinklabs.watchtower.enable: '${WATCHTOWER_ENABLED:-true}'
ports:
- 127.0.0.1:60001:60001/tcp
- 127.0.0.1:60001:60001/udp
- 127.0.0.1:8000:8000/tcp #WSS
- 127.0.0.1:8645:8645 # Service node REST-API
environment:
NODEKEY: ${NODEKEY}
STORAGE_SIZE: ${STORAGE_SIZE}
<<:
- *pg_env
- *rln_env
- *bootstrap_env
volumes:
- ./run_servicenode.sh:/opt/run_servicenode.sh:Z
- privatekeys-volume:/shared
entrypoint: sh
command:
- /opt/run_servicenode.sh
depends_on:
contract-repo-deployer:
condition: service_completed_successfully
postgres:
condition: service_started
networks:
simulation:
ipv4_address: 10.2.0.101
nwaku:
image: ${NWAKU_IMAGE:-wakuorg/nwaku:latest}
restart: on-failure
labels:
com.centurylinklabs.watchtower.enable: '${WATCHTOWER_ENABLED:-true}'
deploy:
replicas: ${NUM_NWAKU_NODES:-5}
entrypoint: sh
environment:
<<:
- *rln_env
- *bootstrap_env
command:
- '/opt/run_nwaku.sh'
volumes:
- ./run_nwaku.sh:/opt/run_nwaku.sh:Z
- privatekeys-volume:/shared
depends_on:
contract-repo-deployer:
condition: service_completed_successfully
networks:
- simulation
edgenode:
image: ${NWAKU_IMAGE:-wakuorg/nwaku:latest}
restart: on-failure
ports:
- 127.0.0.1:60002:60002/tcp
- 127.0.0.1:60002:60002/udp
- 127.0.0.1:8644:8645 # Service node REST-API
entrypoint: sh
environment:
<<:
- *servicenode_env
command:
- '/opt/run_edgenode.sh'
volumes:
- ./run_edgenode.sh:/opt/run_edgenode.sh:Z
depends_on:
servicenode:
condition: service_started
networks:
simulation:
ipv4_address: 10.2.0.102
prometheus:
image: prom/prometheus:latest
volumes:
- ./monitoring/prometheus-config.yml:/etc/prometheus/prometheus.yml:z
command:
- --config.file=/etc/prometheus/prometheus.yml
- --storage.tsdb.retention.time=7d
ports:
- 127.0.0.1:9090:9090
restart: on-failure
networks:
- simulation
grafana:
image: grafana/grafana:latest
env_file:
- ./monitoring/configuration/grafana-plugins.env
environment:
- GF_SECURITY_ADMIN_USER=${GF_SECURITY_ADMIN_USER}
- GF_SECURITY_ADMIN_PASSWORD=${GF_SECURITY_ADMIN_PASSWORD}
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
environment:
- API_URL=${EPIRUS_WEB_API_URL:-/api}
- 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
nginx:
image: nginx:latest
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./5xx.html:/www/error_pages/5xx.html
ports:
- 0.0.0.0:3000:80
depends_on:
- api
- web
networks:
- simulation
postgres:
# This service is used when the Waku node has the 'store' protocol enabled
# and the store-message-db-url is set to use Postgres
image: postgres:15.4-alpine3.18
restart: on-failure:5
shm_size: "${POSTGRES_SHM:-1g}" # Set default shared memory size to 1 GB
environment:
<<: *pg_env
volumes:
- ./postgres_cfg/postgresql.conf:/etc/postgresql/postgresql.conf:Z
- ./postgres_cfg/db.sql:/docker-entrypoint-initdb.d/db.sql:Z
- ${PG_DATA_DIR:-./postgresql}:/var/lib/postgresql/data:Z
command: postgres -c config_file=/etc/postgresql/postgresql.conf
ports:
- 127.0.0.1:5432:5432
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres -d postgres"]
interval: 30s
timeout: 60s
retries: 5
start_period: 80s
networks:
- simulation
postgres-exporter:
# Service aimed to scrape information from Postgres and post it to Prometeus
image: quay.io/prometheuscommunity/postgres-exporter:v0.12.0
restart: on-failure:5
<<: *pg_exp_env
volumes:
- ./monitoring/configuration/postgres-exporter.yml:/etc/pgexporter/postgres-exporter.yml:Z
- ./monitoring/configuration/pg-exporter-queries.yml:/etc/pgexporter/queries.yml:Z
command:
# Both the config file and 'DATA_SOURCE_NAME' should contain valid connection info
- --config.file=/etc/pgexporter/postgres-exporter.yml
depends_on:
- postgres
networks:
- simulation
volumes:
privatekeys-volume: