> For the complete documentation index, see [llms.txt](https://manual-en.boxexchanger.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://manual-en.boxexchanger.net/for-developers-done/ustanovka-node/ethereum-node.md).

# Ethereum Node / DONE

{% hint style="success" %}
**Minimum server requirements:**<br>

**Disk:** At least 2 TB SSD (NVMe).

**Processor:** Minimum 8 cores.

**Memory:** 16 GB.

**Software:** It is necessary to have Docker installed.
{% endhint %}

### Prepare file system

```bash
mkdir -p /nodes/eth
```

Generate jwt secret:

```bash
openssl rand -hex 32 | tr -d "\n" > /nodes/eth/jwt.secret
```

Create docker-compose.yml

```bash
nano /nodes/eth/docker-compose.yml
```

{% hint style="warning" %}
**Note:** Replace **\_YOUR\_HOST\_IP\_** with your server IP.
{% endhint %}

{% code title="docker-compose.yml" %}

```yaml
x-logging:
  &default-logging
  driver: "json-file"
  options:
    max-file: "1"
    max-size: "500m"

services:
  prysm-beacon:
    container_name: prysm-beacon
    image: gcr.io/prysmaticlabs/prysm/beacon-chain:latest
    restart: unless-stopped
    command:
      - --datadir=/data
      - --rpc-host=0.0.0.0
      - --grpc-gateway-host=0.0.0.0
      - --monitoring-host=0.0.0.0
      - --execution-endpoint=http://geth:8551
      - --jwt-secret=/tmp/jwt.secret
      - --accept-terms-of-use
      #- --checkpoint-sync-url=https://sync.invis.tools
      - --genesis-beacon-api-url=https://sync.invis.tools
      - --p2p-denylist=private
      - --p2p-host-ip=_YOUR_HOST_IP_
      #- --clear-db=true
      #- --force-clear-db=true
    ports:
      - 127.0.0.1:3500:3500
      - 12000:12000/udp
      - 13000:13000
    volumes:
      - ./prysm-beacon:/data
      - ./jwt.secret:/tmp/jwt.secret
    logging: *default-logging

  geth:
    container_name: geth
    image: ethereum/client-go:latest
    volumes:
      - ./data-ethereum:/root/.ethereum
      - ./jwt.secret:/tmp/jwt.secret
    restart: unless-stopped
    stop_signal: SIGINT
    stop_grace_period: 5m
    ports:
      - 127.0.0.1:28545:8545
      - 30303:30303/tcp
      - 30303:30303/udp
    command:
      - --cache=32000
      - --authrpc.vhosts=*
      - --authrpc.addr=0.0.0.0
      - --authrpc.jwtsecret=/tmp/jwt.secret
      - --http
      - --ws
      - --ws.addr=0.0.0.0
      - --ws.port=8545
      - --ws.origins=*
      - --ws.api=web3,eth,net
      - --http.api=web3,eth,net
      - --http.addr=0.0.0.0
      - --http.port=8545
      - --http.vhosts=*
    logging: *default-logging

```

{% endcode %}

{% hint style="info" %}
**Fast sync:** In order to speed up beacon node synchronisation, you need to uncomment the line `--checkpoint-sync-url=https://sync.invis.tools`. After that, start the container and check the beacon container logs. After successful synchronisation, comment the line back out.
{% endhint %}

### Launching geth node:

```bash
cd /nodes/eth
docker compose up -d
```

### Opening the access port

Create a proxy from port

&#x20;\- localhost:28545 to port **8545** for geth rpc

<details>

<summary>Setting up a proxy on caddy</summary>

Installing caddy <https://caddyserver.com/docs/install>&#x20;

Documentation prepared for **Debian, Ubuntu** operating system

```shell
apt install -y debian-keyring debian-archive-keyring apt-transport-https
```

```shell
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
```

```shell
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' |  tee /etc/apt/sources.list.d/caddy-stable.list
```

```shell
apt update
```

```shell
apt install caddy
```

configure caddy for proxy&#x20;

28545 on port **8545** for the external network

```bash
nano /etc/caddy/Caddyfile
```

**! Replace&#x20;*****RANDOM\_STRING*****&#x20;with your random string.**

{% code title="/etc/caddy/Caddyfile" %}

```clike
:8545 {
  @websockets {
    header_regexp Connection (U|u)pgrade
    header Upgrade websocket
  }
  handle_path /_RANDOM_STRING_* {
    reverse_proxy @websockets 127.0.0.1:28545
    reverse_proxy 127.0.0.1:28545
  }
  respond 404
}
```

{% endcode %}

launch caddy

```bash
systemctl enable --now caddy
```

or restart if necessary

`systemctl restart caddy`

</details>

{% hint style="warning" %}
**Opening a port for RPC:** To access RPC, you must open port **8545** in the firewall settings for the IP address of the server from which the connection will originate.
{% endhint %}

### Accesses

**RPC:** `http://ip.host:8545/_RANDOM_STRING_/`
