Subsquid Worker Node Hardware Requirements

4 vCPU
8GB RAM
1TB SSD
Public IP 
1gbps network / Always On
100_000 tSQD tokens
Some AGOR (Arbitrum Goerli)

Create bash script inside of a new folder. This script will help use run the Subsquid worker node.

mkdir -p $HOME/subsquid-setup
sudo tee $HOME/subsquid-setup/run_worker.sh > /dev/null <<'EOF'
#!/usr/bin/env sh

docker compose --version >/dev/null || (echo "Docker compose not installed"; exit 1)

if [ ! -d "$1" ]
then
    echo "Provided data directory ($1) does not exist. Usage: $0 <DATA_DIR> <DOCKER_COMPOSE_ARGS>"
    exit 1
fi

# Get absolute path
DATA_DIR="$(cd "$(dirname -- "$1")" >/dev/null; pwd -P)/$(basename -- "$1")"
echo "Using data dir $DATA_DIR"
shift

export USER_ID=$(id -u)
export GROUP_ID=$(id -g)

cat <<EOF > docker-compose.yml
version: "3.8"

services:

  rpc_node:
    image: subsquid/rpc-node:mirovia
    environment:
      P2P_LISTEN_ADDR: /ip4/0.0.0.0/tcp/${LISTEN_PORT:-12345}
      RPC_LISTEN_ADDR: 0.0.0.0:50051
      BOOT_NODES: >
        12D3KooWSRvKpvNbsrGbLXGFZV7GYdcrYNh4W2nipwHHMYikzV58 /dns4/testnet.subsquid.io/tcp/22345,
        12D3KooWQC9tPzj2ShLn39RFHS5SGbvbP2pEd7bJ61kSW2LwxGSB /dns4/testnet.subsquid.io/tcp/22346
      KEY_PATH: /app/data/key
    volumes:
      - ./:/app/data
    user: "${USER_ID}:${GROUP_ID}"
    ports:
      - "${LISTEN_PORT:-12345}:${LISTEN_PORT:-12345}"

  worker:
    depends_on:
      rpc_node:
        condition: service_healthy
    image: subsquid/p2p-worker:mirovia
    environment:
      PROXY_ADDR: rpc_node:50051
      SCHEDULER_ID: 12D3KooWQER7HEpwsvqSzqzaiV36d3Bn6DZrnwEunnzS76pgZkMU
      AWS_ACCESS_KEY_ID: 66dfc7705583f6fd9520947ac10d7e9f
      AWS_SECRET_ACCESS_KEY: a68fdd7253232e30720a4c125f35a81bd495664a154b1643b5f5d4a4a5280a4f
      AWS_S3_ENDPOINT: https://7a28e49ec5f4a60c66f216392792ac38.r2.cloudflarestorage.com
      AWS_REGION: auto
      SENTRY_DSN: https://3d427b41736042ae85010ec2dc864f05@o1149243.ingest.sentry.io/4505589334081536
    volumes:
      - ${DATA_DIR}:/app/data
    user: "${USER_ID}:${GROUP_ID}"
EOF

exec docker compose "$@"
mkdir -p $HOME/subsquid-setup
sudo tee $HOME/subsquid-setup/run_worker.sh > /dev/null <<'EOF'
#!/usr/bin/env sh

docker compose --version >/dev/null || (echo "Docker compose not installed"; exit 1)

if [ ! -d "$1" ]
then
    echo "Provided data directory ($1) does not exist. Usage: $0 <DATA_DIR> <DOCKER_COMPOSE_ARGS>"
    exit 1
fi

# Get absolute path
DATA_DIR="$(cd "$(dirname -- "$1")" >/dev/null; pwd -P)/$(basename -- "$1")"
echo "Using data dir $DATA_DIR"
shift

export USER_ID=$(id -u)
export GROUP_ID=$(id -g)

cat <<EOF > docker-compose.yml
version: "3.8"

services:

  rpc_node:
    image: subsquid/rpc-node:mirovia
    environment:
      P2P_LISTEN_ADDR: /ip4/0.0.0.0/tcp/${LISTEN_PORT:-12345}
      RPC_LISTEN_ADDR: 0.0.0.0:50051
      BOOT_NODES: >
        12D3KooWSRvKpvNbsrGbLXGFZV7GYdcrYNh4W2nipwHHMYikzV58 /dns4/testnet.subsquid.io/tcp/22345,
        12D3KooWQC9tPzj2ShLn39RFHS5SGbvbP2pEd7bJ61kSW2LwxGSB /dns4/testnet.subsquid.io/tcp/22346
      KEY_PATH: /app/data/key
    volumes:
      - ./:/app/data
    user: "${USER_ID}:${GROUP_ID}"
    ports:
      - "${LISTEN_PORT:-12345}:${LISTEN_PORT:-12345}"

  worker:
    depends_on:
      rpc_node:
        condition: service_healthy
    image: subsquid/p2p-worker:mirovia
    environment:
      PROXY_ADDR: rpc_node:50051
      SCHEhttps://github.com/subsquid/subsquid-network-contracts/wiki/Mirovia-worker-installationDULER_ID: 12D3KooWQER7HEpwsvqSzqzaiV36d3Bn6DZrnwEunnzS76pgZkMU
      AWS_ACCESS_KEY_ID: 66dfc7705583f6fd9520947ac10d7e9f
      AWS_SECRET_ACCESS_KEY: a68fdd7253232e30720a4c125f35a81bd495664a154b1643b5f5d4a4a5280a4f
      AWS_S3_ENDPOINT: https://7a28e49ec5f4a60c66f216392792ac38.r2.cloudflarestorage.com
      AWS_REGION: auto
      SENTRY_DSN: https://3d427b41736042ae85010ec2dc864f05@o1149243.ingest.sentry.io/4505589334081536
    volumes:
      - ${DATA_DIR}:/app/data
    user: "${USER_ID}:${GROUP_ID}"
EOF

exec docker compose "$@

Generate your key file. Your peer Id will be displayed after you enter this command. It is needed later so please and copy the peer Id and save it somewhere safe.

docker run --rm subsquid/rpc-node:mirovia keygen >key

Get 100_000 tSQD and some AGOR and register your peer ID on chain. You will find the wallet private key from metamask.

docker run --rm subsquid/worker-registration:mirovia <PEER_ID> <WALLET_PRIVATE_KEY>

Make the run_worker.sh script executable then execute the script

chmod +x $HOME/subsquid-setup/run_worker.sh
$HOME/subsquid-setup/run_worker.sh $HOME/squid up -d

Ensure the container has started by checking the logs

docker logs -f worker-1

More details can be found in the official documentation