--- x-logging-defaults: &logging-defaults driver: json-file options: max-size: "512m" max-file: "2" # Usage: # # mkdir rpc && cd rpc # # git init # git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git # git fetch origin vibe # git checkout origin/vibe # # docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret # # env # ... # IP=$(curl ipinfo.io/ip) # DOMAIN=${IP}.traefik.me # COMPOSE_FILE=base.yml:rpc.yml:rootstock/rskj/rootstock-mainnet-rskj-archive.yml # # docker compose up -d # # curl -X POST https://${IP}.traefik.me/rootstock-mainnet \ # -H "Content-Type: application/json" \ # --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' services: rootstock-mainnet-client: image: ${ROOTSTOCK_RSKJ_IMAGE:-rsksmart/rskj}:${ROOTSTOCK_MAINNET_RSKJ_VERSION:-VETIVER-9.0.1} sysctls: # TCP Performance net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers net.core.somaxconn: 32768 # Higher connection queue # Memory/Connection Management # net.core.netdev_max_backlog: 50000 # Increase network buffer net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets ulimits: nofile: 1048576 # Max open files (for RPC/WS connections) user: root ports: - 3234:3234 - 3234:3234/udp expose: - 8545 - 8546 environment: DEFAULT_JVM_OPTS: -Xms4G -Xmx8G DOMAIN: ${DOMAIN} RSKJ_SYS_PROPS: -Drpc.providers.web.http.bind_address=0.0.0.0 -Dpeer.active.0.url=enode://1da4ff6f289b3cc724a9565b4aea614991d405a400073083f1ca7911828c68992826f9981d6026552854db76c44aa29fc638eb64b0ceb44f34320c90fe8bf646@178.156.223.98:5050 -Dpeer.active.1.url=enode://ab6e6bc7f2b56b14bef693513e78423d1025a5acd7eb821e7f9df1fb825748535164a161512a49127ee3d6d0ea4df36601657841dbf9c3ed1ee057ee0f073b4c@178.105.196.185:5050 -Dpeer.active.2.url=enode://9611ea7ddd078de0e6a0fe9e6733f0ed484b1163bac7abf0d1cedb4687d140fbda6c2838902419eb33ca3412f9f5f4a1d86f79aa7e658697aa0402ce7702db64@178.105.155.122:5050 -Dpeer.active.3.url=enode://044314b976aae205d75ce54db57289e8fc580b6475bc3af6759b558e6d73cd035134aeaf841755c81f23efd84958c5fd0f6b49645bba4f08e4885eaf778a491d@178.105.213.138:5050 -Dpeer.active.4.url=enode://03d2015cd0b7fa03f2e846540749cbc43d865dce0e7dc5f780139dc49b4278c3607e6102cd4c7ac2d18ce970894481f958fa6adbcca6a43f7e02476102cf3f25@77.42.125.140:5050 -Dpeer.active.5.url=enode://b84c1d3c0d43958487efc3d77638e42a74ce26437a03ae0cbd8bb0948c6f73517a4fd0fe7a8a3503b9c26be97395d54defa6e4f7d5535b1a5c77430b6bbcfaec@5.78.194.169:5050 -Dpeer.active.6.url=enode://81471846e79afde2b49ede4a475e180676ae579c8ad86e677a465555b6eddaf381aea96d58fa17eed0d454a9c47d6aaf42ce3b554e920c9888d427b5064ac889@91.98.175.212:5050 -Dpeer.active.7.url=enode://4c777c3f3339b46caafa20932cd91d7d1cd23ed4c80d68419161a6479eb0949cccda62c400094514791996edd12d918de651ab2d7fe806e4ea85be44cf1f5ad2@5.223.72.83:5050 restart: unless-stopped stop_grace_period: 5m networks: - chains volumes: - ${ROOTSTOCK_MAINNET_RSKJ_ARCHIVE_DATA:-rootstock-mainnet-rskj-archive}:/var/lib/rsk/database/mainnet - ./rootstock/mainnet/node.conf:/etc/rsk/node.conf - ./rootstock/mainnet:/config - /slowdisk:/slowdisk logging: *logging-defaults labels: - prometheus-scrape.enabled=false rootstock-mainnet: image: nginx expose: - '80' environment: PROXY_HOST: rootstock-mainnet-client RPC_PATH: / RPC_PORT: 8545 WS_PATH: / WS_PORT: 8546 restart: unless-stopped depends_on: - rootstock-mainnet-client networks: - chains volumes: - ./nginx-proxy:/etc/nginx/templates logging: *logging-defaults labels: - prometheus-scrape.enabled=false - traefik.enable=true - traefik.http.middlewares.rootstock-mainnet-rskj-archive-host.headers.customrequestheaders.Host=localhost - traefik.http.middlewares.rootstock-mainnet-rskj-archive-stripprefix.stripprefix.prefixes=/rootstock-mainnet - traefik.http.services.rootstock-mainnet-rskj-archive.loadbalancer.server.port=80 - ${NO_SSL:-traefik.http.routers.rootstock-mainnet-rskj-archive.entrypoints=websecure} - ${NO_SSL:-traefik.http.routers.rootstock-mainnet-rskj-archive.tls.certresolver=myresolver} - ${NO_SSL:-traefik.http.routers.rootstock-mainnet-rskj-archive.rule=Host(`$DOMAIN`) && (Path(`/rootstock-mainnet`) || Path(`/rootstock-mainnet/`))} - ${NO_SSL:+traefik.http.routers.rootstock-mainnet-rskj-archive.rule=Path(`/rootstock-mainnet`) || Path(`/rootstock-mainnet/`)} - traefik.http.routers.rootstock-mainnet-rskj-archive.middlewares=rootstock-mainnet-rskj-archive-stripprefix, rootstock-mainnet-rskj-archive-host, ipallowlist - traefik.http.routers.rootstock-mainnet-rskj-archive.priority=50 - traefik.http.routers.rootstock-mainnet-rskj-archive-ws.priority=100 - traefik.http.services.rootstock-mainnet-rskj-archive-ws.loadbalancer.server.port=8546 - traefik.http.routers.rootstock-mainnet-rskj-archive-ws.service=rootstock-mainnet-rskj-archive-ws - traefik.http.routers.rootstock-mainnet-rskj-archive.service=rootstock-mainnet-rskj-archive - ${NO_SSL:-traefik.http.routers.rootstock-mainnet-rskj-archive-ws.entrypoints=websecure} - ${NO_SSL:-traefik.http.routers.rootstock-mainnet-rskj-archive-ws.tls.certresolver=myresolver} - ${NO_SSL:-traefik.http.routers.rootstock-mainnet-rskj-archive-ws.rule=Host(`$DOMAIN`) && (Path(`/rootstock-mainnet`) || Path(`/rootstock-mainnet/`)) && Headers(`Upgrade`, `websocket`)} - ${NO_SSL:+traefik.http.routers.rootstock-mainnet-rskj-archive-ws.rule=(Path(`/rootstock-mainnet`) || Path(`/rootstock-mainnet/`)) && Headers(`Upgrade`, `websocket`)} - traefik.http.routers.rootstock-mainnet-rskj-archive-ws.middlewares=rootstock-mainnet-rskj-archive-stripprefix, rootstock-mainnet-rskj-archive-host, ipallowlist volumes: rootstock-mainnet-rskj-archive: x-upstreams: - id: $${ID} labels: provider: $${PROVIDER} connection: generic: rpc: url: $${RPC_URL} ws: frameSize: 20Mb msgSize: 50Mb url: $${WS_URL} chain: rootstock method-groups: enabled: - debug - filter methods: disabled: enabled: - name: txpool_content # TODO: should be disabled for rollup nodes options: validate-syncing: false ...