# Run a local indexer

## Install Indexer

{% hint style="info" %}
Have **yarn** installed, **docker,** and **docker-compose installed** and running on your machine.
{% endhint %}

### Installation process

```bash
git clone https://github.com/capsule-corp-ternoa/ternoa-subql.git
cd ternoa-subql
git checkout alphanet
yarn install
yarn codegen
yarn build
```

Every time the graphQl Schema changes, you need to run the yarn codegen command. Every time the code changes, you need to build it again with the yarn build command. Now everything is built, you can launch it with docker.

```bash
docker-compose pull
docker-compose up
```

docker-compose pull needs to be run to pull the last version and does not need to be run again unless you change any docker image.

> After a few seconds, the indexing starts. You can see in the shell every block indexed. To check the blockchain data stored, run a query in your local graphql playground in a browser (default [**localhost:3000**](http://localhost:3000)).

### Common errors on containers start

#### Database connection failed

```bash
ERROR Unable to connect to the database SequelizeConnectionRefusedError: connect ECONNREFUSED XX.XX.XX.XX:YYYY
```

The subquery-node container tends to be ready before the Postgres one. No worries, it will automatically restart until the database is ready.

#### Outdated .data

```bash
ERROR Node failed to start AssertionError: Specified project manifest chain id/genesis hash does not match database stored genesis hash, consider cleaning project schema using --force-clean
```

Remember to delete the `.data` folder at root on the network changes. Also, make sure to use the correct network genesis hash in the `project.yaml` file.

## Install Dictionary

{% hint style="info" %}
**Prerequisite**: have **yarn installed**, **docker,** and **docker-compose installed** and running on your machine.
{% endhint %}

You can set up your own dictionary to define what data you want to record for the chain. The dictionary will be used by the indexer to get only blocks that match the defined filter (for example, you can index only NFTs-related transactions (extrinsic).

Check [our repository](https://github.com/capsule-corp-ternoa/ternoa-subql-dictionary) here.

```bash
git clone https://github.com/capsule-corp-ternoa/ternoa-subql-dictionary
cd ternoa-subql-dictionary
git checkout v43/alphanet # The branch mechanism follows the one in the indexer repo, the indexer and dictionary should be on the same version.
yarn install
yarn codegen
yarn build
docker-compose pull
docker-compose up
```

> After a few seconds, the indexing starts. You can see in the shell every block indexed. To check the blockchain data stored, run a query in your local graphql playground in a browser (default [**localhost:3000**](http://localhost:3000)).
