Стартиране на SubQuery локално

... 2022-8-10 About 2 min

# Стартиране на SubQuery локално

Това ръководство показва как да стартирате локален SubQuery нод във вашата инфраструктура, който включва индексатора и услугата за заявки. Не желаете да се занимавате със стартирането на собствена SubQuery инфраструктура? SubQuery предоставя управлявана хоствана услуга (opens new window) безплатно за общността. Следвайте нашето ръководство за публикуване, за да видите как можете да качите проекта си в SubQuery Projects (opens new window).

# Използване на Docker

Алтернативно решение е да стартирате Docker Container, дефиниран от файла docker-compose.yml. За нов проект, който току-що е инициализиран, няма да е необходимо да променяте нищо тук.

Под директорията на проекта изпълнете следната команда:

docker-compose pull && docker-compose up
1

Може да отнеме известно време, за да изтеглите необходимите пакети (@subql/node (opens new window), @subql/query (opens new window), и Postgres) за първи път, но скоро ще видите работещ SubQuery нод.

# Изпълнение на индексатор (subql/node)

Изисквания:

  • База данни Postgres (opens new window) (версия 12 или по-нова). Докато SubQuery нодът индексира блокчейна, извлечените данни се съхраняват във външна база данни.

Нодът SubQuery е реализация, която извлича базирани на Substrate/Polkadot блокчейн данни за проекта SubQuery и ги записва в база данни на Postgres.

# Инсталация

Моля, имайте предвид, че ние НЕ насърчаваме използването на yarn global поради лошото му управление на зависимостите, което може да доведе до грешки в бъдеще.

Веднъж инсталиран, можете да стартирате нода със следната команда:

# Ключови команди

Следните команди ще ви помогнат да завършите конфигурацията на нода на SubQuery и да започнете индексирането. За да научите повече, винаги можете да стартирате --help.

# Посочете пътя към локалния проект

# Използване на речник

Използването на речник с пълна верига може драстично да ускори обработката на проект SubQuery по време на тестване или по време на първия ви индекс. В някои случаи сме виждали увеличение на ефективността на индексирането до 10 пъти.

Пълноверижен речник предварително индексира местоположението на всички събития и външни елементи в конкретната верига и позволява на услугата на нода да прескача до съответните местоположения при индексиране, вместо да инспектира всеки блок.

Можете да добавите крайната точка на речника във вашия файл project.yaml (вижте Manifest File) или да я посочите по време на изпълнение, като използвате следната команда:

Прочетете повече за това как работи речник на SubQuery.

# Свържете се с базата данни

export DB_USER=postgres
export DB_PASS=postgres
export DB_DATABASE=postgres
export DB_HOST=localhost
export DB_PORT=5432
subql-node -f your-project-path
1
2
3
4
5
6

В зависимост от конфигурацията на вашата база данни Postgres (например различна парола за база данни), моля, уверете се също, че както индексаторът (subql/node), така и услугата за заявки (subql/query) може да установи връзка с него.

# Посочете конфигурационен файл

Това ще насочи възела на заявката към конфигурационен файл, който може да бъде във формат YAML или JSON. Вижте примера по-долу.

subquery: ../../../../subql-example/extrinsics
subqueryName: extrinsics
batchSize:100
localMode:true
1
2
3
4

# Промяна размера на партидата за извличане на блок

subql-node -f your-project-path --batch-size 200

Резултат:
[IndexerManager] fetch block [203, 402]
[IndexerManager] fetch block [403, 602]
1
2
3
4
5

Когато индексаторът първо индексира веригата, извличането на единични блокове значително ще намали производителността. Увеличаването на размера на партидата, с цел регулиране на броя на извлечените блокове, ще намали общото време за обработка. Текущият размер на партидата по подразбиране е 100.

# Работете в локален мод (режим)

За целите на отстраняване на грешки, потребителите могат да стартират нода в локален режим. Преминаването към локален модел ще създаде Postgres таблици схемата по подразбиране - public.

Ако не се използва локален режим, ще бъде създадена нова Postgres схема с първоначалната subquery_ и съответните таблици на проектите.

# Проверете здравето на вашия нод

Има 2 крайни точки, които можете да използвате за проверка и наблюдение на здравето на работещ SubQuery нод.

  • Крайна точка за проверка на състоянието, която връща опростен 200 отговор
  • Крайна точка с метаданни, която включва допълнителни анализи на вашия работещ SubQuery нод

Добавете това към основния URL адрес на вашия SubQuery нод. Например: http://localhost:3000/meta ще върне:

{
    "currentProcessingHeight": 1000699,
    "currentProcessingTimestamp": 1631517883547,
    "targetHeight": 6807295,
    "bestHeight": 6807298,
    "indexerNodeVersion": "0.19.1",
    "lastProcessedHeight": 1000699,
    "lastProcessedTimestamp": 1631517883555,
    "uptime": 41.151789063,
    "polkadotSdkVersion": "5.4.1",
    "apiConnected": true,
    "injectedApiConnected": true,
    "usingDictionary": false,
    "chain": "Polkadot",
    "specName": "polkadot",
    "genesisHash": "0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3",
    "blockTime": 6000
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

http://localhost:3000/health ще върне HTTP 200 ако е успешно.

Ще бъде върната грешка 500, ако индексаторът не е здрав. Това често може да се види, когато нодът се зарежда.

{
    "status": 500,
    "error": "Indexer is not healthy"
}
1
2
3
4

Ако е използван грешен URL, грешка 404 „не е намерено“ ще се появи, отново.

{
"statusCode": 404,
"message": "Cannot GET /healthy",
"error": "Not Found"
}
1
2
3
4
5

# Отстранете грешките в проекта си

Използвайте node inspector (opens new window) за да изпълните следната команда.

node --inspect-brk <path to subql-node> -f <path to subQuery project>
1

Например:

node --inspect-brk /usr/local/bin/subql-node -f ~/Code/subQuery/projects/subql-helloworld/
Debugger listening on ws://127.0.0.1:9229/56156753-c07d-4bbe-af2d-2c7ff4bcc5ad
For help, see: https://nodejs.org/en/docs/inspector
Debugger attached.
1
2
3
4

След това отворете инструментите за разработка на Chrome, отидете на Source > Filesystem и добавете проекта си към работното пространство и започнете да отстранявате грешки. За повече информация вижте Как да отстраним грешки в проект на SubQuery (opens new window)

# Изпълнение на услуга за заявки (subql/query)

# Инсталация

# NPM
npm install -g @subql/query
1
2

Моля, имайте предвид, че ние НЕ насърчаваме използването на yarn global поради лошото управление на зависимостта, което може да доведе до грешки в бъдеще.

# Изпълнение на Query услуга

export DB_HOST=localhost
subql-query --name <project_name> --playground
1
2

Уверете се, че името на проекта е същото като името на проекта, когато инициализирате проекта. Също така проверете дали променливите на средата са правилни.

След като стартирате успешно услугата subql-query, отворете браузъра си и се насочете към http://localhost:3000. Трябва да видите работното меню на GraphQL, показващo се в Explorer и схемата, която е готова за заявка.

Last update: August 10, 2022 00:49