mirror of
https://github.com/tornadocash/rpc-nodes
synced 2024-02-02 14:53:56 +01:00
added proxy traefik
added geth and nethermind nodes
This commit is contained in:
parent
57070c7ec3
commit
bac930fe51
24
README.md
24
README.md
@ -1 +1,23 @@
|
||||
# rpc-nodes
|
||||
# rpc-nodes
|
||||
|
||||
## 1. Start proxy (traefik)
|
||||
Create a shared network for running containers:
|
||||
```bash
|
||||
docker network create rpc-shared-network
|
||||
```
|
||||
|
||||
Specify the domain name to be used and the email address for issuing the Let's Encrypt certificate in the `example.env` file. Rename `example.env` to `.env`:
|
||||
```
|
||||
mv example.env .env
|
||||
```
|
||||
|
||||
Start proxy:
|
||||
```bash
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
## 2. Start blockchain node
|
||||
* Ethereum - [geth.md](/geth/geth.md)
|
||||
* Polygon - [bor.md](/bor/bor.md)
|
||||
* BSC - [bsc.md](/bsc/bsc.md)
|
||||
* Xdai - [nethermind.md](/nethermind/nethermind.md)
|
1
geth/.dockerignore
Normal file
1
geth/.dockerignore
Normal file
@ -0,0 +1 @@
|
||||
./geth-data/
|
83
geth/docker-compose.yml
Normal file
83
geth/docker-compose.yml
Normal file
@ -0,0 +1,83 @@
|
||||
version: "3.7"
|
||||
|
||||
services:
|
||||
geth-pruning:
|
||||
image: ethereum/client-go:stable
|
||||
container_name: geth-pruning
|
||||
restart: always
|
||||
env_file: .env
|
||||
command: "snapshot prune-state"
|
||||
volumes:
|
||||
- ./geth-data:/root/.ethereum
|
||||
geth:
|
||||
image: ethereum/client-go:stable
|
||||
container_name: geth
|
||||
restart: always
|
||||
env_file: .env
|
||||
command:
|
||||
- --maxpeers
|
||||
- "50"
|
||||
- --cache
|
||||
- "10629"
|
||||
- --port
|
||||
- "${P2P_PORT}"
|
||||
- --nat
|
||||
- "any"
|
||||
- --http
|
||||
- --http.addr
|
||||
- "0.0.0.0"
|
||||
- --http.port
|
||||
- "${HTTP_PORT}"
|
||||
- --http.corsdomain=*
|
||||
- --http.vhosts=*
|
||||
- --http.api
|
||||
- "eth,net,web3"
|
||||
- --ws
|
||||
- --ws.addr
|
||||
- "0.0.0.0"
|
||||
- --ws.port
|
||||
- "${WS_PORT}"
|
||||
- --ws.origins=*
|
||||
- --ws.api
|
||||
- "eth,net,web3"
|
||||
- --rpc.gascap
|
||||
- "0"
|
||||
- --rpc.txfeecap
|
||||
- "0"
|
||||
ports:
|
||||
# - ${HTTP_PORT}:${HTTP_PORT}
|
||||
# - ${WS_PORT}:${WS_PORT}
|
||||
- ${P2P_PORT}:${P2P_PORT}
|
||||
volumes:
|
||||
- ./geth-data:/root/.ethereum
|
||||
stop_grace_period: 3m30s
|
||||
stop_signal: SIGINT
|
||||
healthcheck:
|
||||
test: wget -nv -t1 --spider 'http://127.0.0.1:${HTTP_PORT}/' || exit 1
|
||||
interval: 5s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.geth-http.middlewares=geth-http-acl"
|
||||
- "traefik.http.middlewares.geth-http.headers.customrequestheaders.Access-Control-Allow-Origin=*"
|
||||
- "traefik.http.middlewares.geth-http-acl.ipwhitelist.sourcerange=127.0.0.1/32, ${ALLOW_FROM}"
|
||||
- "traefik.http.routers.geth-http.service=geth-http"
|
||||
- "traefik.http.routers.geth-http.rule=Host(`${DOMAIN}`) && Path(`/geth-http/`)"
|
||||
- "traefik.http.routers.geth-http.entrypoints=websecure"
|
||||
- "traefik.http.routers.geth-http.tls.certresolver=myresolver"
|
||||
- "traefik.http.services.geth-http.loadbalancer.server.port=${HTTP_PORT}"
|
||||
- "traefik.http.routers.geth-ws.middlewares=geth-ws-acl"
|
||||
- "traefik.http.middlewares.geth-ws.headers.customrequestheaders.Access-Control-Allow-Origin=*"
|
||||
- "traefik.http.middlewares.geth-ws-acl.ipwhitelist.sourcerange=127.0.0.1/32, ${ALLOW_FROM}"
|
||||
- "traefik.http.routers.geth-ws.service=geth-ws"
|
||||
- "traefik.http.routers.geth-ws.rule=Host(`${DOMAIN}`) && Path(`/geth-ws/`)"
|
||||
- "traefik.http.routers.geth-ws.entrypoints=websecure"
|
||||
- "traefik.http.routers.geth-ws.tls.certresolver=myresolver"
|
||||
- "traefik.http.services.geth-ws.loadbalancer.server.port=${WS_PORT}"
|
||||
networks:
|
||||
- rpc
|
||||
|
||||
networks:
|
||||
rpc:
|
||||
name: rpc-shared-network
|
5
geth/example.env
Normal file
5
geth/example.env
Normal file
@ -0,0 +1,5 @@
|
||||
DOMAIN=domain.org
|
||||
P2P_PORT=30304
|
||||
HTTP_PORT=8545
|
||||
WS_PORT=8546
|
||||
ALLOW_FROM=0.0.0.0/0
|
30
geth/geth.md
Normal file
30
geth/geth.md
Normal file
@ -0,0 +1,30 @@
|
||||
# Geth node
|
||||
|
||||
## Requirements for Ethereum network
|
||||
* memory: 32Gb
|
||||
* disk: 1Tb SSD (if you periodically prune state)
|
||||
|
||||
## Installation
|
||||
Set the domain name to be used in the `.env` file. You can also set a list of allowed IP addresses there. Rename `example.env` to `.env`:
|
||||
```
|
||||
mv example.env .env
|
||||
```
|
||||
|
||||
Start node:
|
||||
```bash
|
||||
docker-compose up -d geth
|
||||
```
|
||||
|
||||
## Upgrade
|
||||
```bash
|
||||
docker-compose pull
|
||||
docker-compose up -d geth
|
||||
```
|
||||
|
||||
## Pruning
|
||||
```bash
|
||||
docker-compose down
|
||||
docker-compose up geth-pruning
|
||||
docker-compose down
|
||||
docker-compose up -d geth
|
||||
```
|
1
nethermind/.dockerignore
Normal file
1
nethermind/.dockerignore
Normal file
@ -0,0 +1 @@
|
||||
./nethermind-data/
|
72
nethermind/docker-compose.yml
Normal file
72
nethermind/docker-compose.yml
Normal file
@ -0,0 +1,72 @@
|
||||
version: "3.7"
|
||||
services:
|
||||
nethermind:
|
||||
image: nethermind/nethermind:latest
|
||||
container_name: nethermind
|
||||
restart: always
|
||||
env_file: .env
|
||||
stop_grace_period: 2m
|
||||
ports:
|
||||
# - ${HTTP_PORT}:${HTTP_PORT}
|
||||
# - ${WS_PORT}:${WS_PORT}
|
||||
- ${P2P_PORT}:${P2P_PORT}/tcp
|
||||
- ${P2P_PORT}:${P2P_PORT}/udp
|
||||
command:
|
||||
- --datadir
|
||||
- /var/lib/nethermind
|
||||
- --Init.WebSocketsEnabled
|
||||
- "true"
|
||||
- --Network.DiscoveryPort
|
||||
- "${P2P_PORT}"
|
||||
- --Network.P2PPort
|
||||
- "${P2P_PORT}"
|
||||
- --JsonRpc.Enabled
|
||||
- "true"
|
||||
- --JsonRpc.EnabledModules
|
||||
- "Web3,Eth,Subscribe,Net,Parity"
|
||||
- --JsonRpc.Host
|
||||
- "0.0.0.0"
|
||||
- --JsonRpc.Port
|
||||
- "${HTTP_PORT}"
|
||||
- --JsonRpc.WebSocketsPort
|
||||
- "${WS_PORT}"
|
||||
- --Sync.FastSync
|
||||
- "true"
|
||||
- --config
|
||||
- xdai
|
||||
- --Pruning.Enabled
|
||||
- "true"
|
||||
- --Pruning.CacheMb
|
||||
- "4096"
|
||||
- --TxPool.Size
|
||||
- "4096"
|
||||
- --Sync.AncientBodiesBarrier
|
||||
- "1"
|
||||
- --Sync.AncientReceiptsBarrier
|
||||
- "1"
|
||||
volumes:
|
||||
- ./nethermind-data:/var/lib/nethermind
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.nm-http.middlewares=nm-http-acl"
|
||||
- "traefik.http.middlewares.nm-http.headers.customrequestheaders.Access-Control-Allow-Origin=*"
|
||||
- "traefik.http.middlewares.nm-http-acl.ipwhitelist.sourcerange=127.0.0.1/32, ${ALLOW_FROM}"
|
||||
- "traefik.http.routers.nm-http.service=nm-http"
|
||||
- "traefik.http.routers.nm-http.rule=Host(`${DOMAIN}`) && Path(`/nm-http/`)"
|
||||
- "traefik.http.routers.nm-http.entrypoints=websecure"
|
||||
- "traefik.http.routers.nm-http.tls.certresolver=myresolver"
|
||||
- "traefik.http.services.nm-http.loadbalancer.server.port=${HTTP_PORT}"
|
||||
- "traefik.http.routers.nm-ws.middlewares=nm-ws-acl"
|
||||
- "traefik.http.middlewares.nm-ws.headers.customrequestheaders.Access-Control-Allow-Origin=*"
|
||||
- "traefik.http.middlewares.nm-ws-acl.ipwhitelist.sourcerange=127.0.0.1/32, ${ALLOW_FROM}"
|
||||
- "traefik.http.routers.nm-ws.service=nm-ws"
|
||||
- "traefik.http.routers.nm-ws.rule=Host(`${DOMAIN}`) && Path(`/nm-ws/`)"
|
||||
- "traefik.http.routers.nm-ws.entrypoints=websecure"
|
||||
- "traefik.http.routers.nm-ws.tls.certresolver=myresolver"
|
||||
- "traefik.http.services.nm-ws.loadbalancer.server.port=${WS_PORT}"
|
||||
networks:
|
||||
- rpc
|
||||
|
||||
networks:
|
||||
rpc:
|
||||
name: rpc-shared-network
|
5
nethermind/example.env
Normal file
5
nethermind/example.env
Normal file
@ -0,0 +1,5 @@
|
||||
DOMAIN=domain.org
|
||||
P2P_PORT=30303
|
||||
HTTP_PORT=8535
|
||||
WS_PORT=8536
|
||||
ALLOW_FROM=0.0.0.0/32
|
22
nethermind/nethermind.md
Normal file
22
nethermind/nethermind.md
Normal file
@ -0,0 +1,22 @@
|
||||
# Nethermind node
|
||||
|
||||
## Requirements for Xdai network
|
||||
* memory: 16Gb
|
||||
* disk: 200Gb SSD
|
||||
|
||||
## Installation
|
||||
Set the domain name to be used in the `.env` file. You can also set a list of allowed IP addresses there. Rename `example.env` to `.env`:
|
||||
```
|
||||
mv example.env .env
|
||||
```
|
||||
|
||||
Start node:
|
||||
```bash
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
## Upgrade
|
||||
```bash
|
||||
docker-compose pull
|
||||
docker-compose up -d
|
||||
```
|
34
proxy/docker-compose.yml
Normal file
34
proxy/docker-compose.yml
Normal file
@ -0,0 +1,34 @@
|
||||
version: "3.7"
|
||||
|
||||
services:
|
||||
traefic:
|
||||
image: traefik
|
||||
restart: always
|
||||
container_name: "traefik"
|
||||
env_file: .env
|
||||
command:
|
||||
- "--providers.docker=true"
|
||||
- "--providers.docker.exposedbydefault=false"
|
||||
- "--certificatesresolvers.myresolver.acme.tlschallenge=true"
|
||||
- "--certificatesresolvers.myresolver.acme.email=${EMAIL}"
|
||||
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
|
||||
- "--entrypoints.websecure.address=:443"
|
||||
- "--entrypoints.web.address=:80"
|
||||
- "--entrypoints.web.http.redirections.entrypoint.to=websecure"
|
||||
- "--entrypoints.web.http.redirections.entrypoint.scheme=https"
|
||||
- "--entrypoints.websecure.http.tls=true"
|
||||
- "--entrypoints.websecure.http.tls.certResolver=letsencrypt"
|
||||
- "--entrypoints.websecure.http.tls.domains[0].main=${DOMAIN}"
|
||||
- "--entrypoints.websecure.http.tls.domains[0].sans=*.${DOMAIN}"
|
||||
ports:
|
||||
- 80:80
|
||||
- 443:443
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
- ./letsencrypt:/letsencrypt
|
||||
networks:
|
||||
- rpc
|
||||
|
||||
networks:
|
||||
rpc:
|
||||
name: rpc-shared-network
|
2
proxy/example.env
Normal file
2
proxy/example.env
Normal file
@ -0,0 +1,2 @@
|
||||
EMAIL=email@mail.org
|
||||
DOMAIN=domain.org
|
Loading…
Reference in New Issue
Block a user