本指南将介绍如何在基础设施上运行本地SubQuery节点,其中包括索引器和查询服务的使用。不用担心在运行自己的SubQuery基础架构中所出现的问题。
SubQuery向社区免费提供管理的托管服务。按照我们所发布的指南查看您如何将项目部署到SubQuery项目。
使用Docker
另一个解决方案是运行一个 Docker Container,由 docker-compose.yml 文件定义。对于一个刚刚初始化的新项目,你不需要在这里做任何改动。
在项目目录下运行以下命令:
docker-compose pull && docker-compose up
第一次下载所需软件包可能需要一些时间(@subql/node, @subql/quiry, and Postgress) ,但很快你就会看到一个运行中的 SubQuery 节点。
运行Indexer
需求:
Postgres 数据库 (版本12或更高). 当<0>SubQuery node</0> 为区块链建立索引时,提取的数据将会存储在外部数据库实例中。
SubQuery 节点需要一个加载的过程,它能够从 SubQuery 项目中提取基于子区块链的数据,并将其保存到 Postgres 数据库。
安装:
# NPM
npm install -g @subql/node
请注意我们不推荐使用 yarn global ,因为它的依赖管理性能不佳,可能导致在运行中出现错误。
安装完毕后,您可以使用以下命令来启动节点:
subql-node <command>
输入命令:
以下命令将帮助您完成 SubQuery 的节点配置并建立索引。要了解更多信息,您可以运行 –help。
指向本地项目路径:
subql-node -f your-project-path
使用字典:
使用完整的链词库可以在测试期间或在您的第一个索引期间大大加快 SubQuery 项目的处理速度。在特定情况下,我们可以看到索引性能提高了10倍。
完整的链词库预先索引特定链中所有事件和外观的位置,并允许您的节点服务在索引时跳到相关位置,而不是检查每个区块。
您可以在 project.yaml 文件中添加字典端点(请参见Manifest File:
https://crowdin.com/backend/create/manifest.md),或在运行时使用以下命令指定它:
subql-node --network-dictionary=https://api.subquery.network/sq/subquery/dictionary-polkadot
阅读更多关于 SubQuery 词典的工作原理:
https://crowdin.com/backend/tutorials_examples/dictionary.md
连接数据库:
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
由于您的 Postgres 数据库的配置(例如不同的数据库密码),还请确保索引器(`subql/node`)和查询服务(`subql/query`)都可以与其建立连接。
指定一个配置文件:
subql-node -c your-project-config.yml
这将把查询节点指向一个配置文件,该文件可以是 YAML 或 JSON 格式。看看下面的例子。
subquery: ../../../../subql-example/extrinsics
subqueryName: extrinsics
batchSize:100
localMode:true
如何更改区块链批处理大小:
subql-node -f your-project-path --batch-size 200
Result:
[IndexerManager] fetch block [203, 402]
[IndexerManager] fetch block [403, 602]
当索引器首次在链上运行时,获取单个区块将大大降低性能。增加批量处理的规模以调整获取的区块数量,这将会减少整个处理时间。默认的批处理大小为100。
在本地模式下运行:
subql-node -f your-project-path --local
出于调试的目的,用户可以在本地模式下运行该节点。切换到本地模式将在默认模式 public 中创建 Postgres 表。
如果未使用本地模式,则使用初始的 Postgres 模式,并将创建初始的 subquery_ 和与其相对应的项目表。
检查节点运行状况:
有两个端口可用来检查和监视所运行的 SubQuery 节点的健康状况。
-
返回普通 200 响应的健康检查端口
-
Metadata 端口,其中包括您正在运行的 SubQuery 节点的额外分析
将其附加到您的 SubQuery 节点的基本URL。例如: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
}
http://localhost:3000/health 如果成功,将返回 HTTP 200。
如果索引器出现错误,将返回500错误。这通常可以在节点启动时看到。
{
"status": 500,
"error": "Indexer is not healthy"
}
如果使用了错误的 URL,将返回 404 not found 错误。
{
"statusCode": 404,
"message": "Cannot GET /healthy",
"error": "Not Found"
}
调试您的项目:
使用 node inspector 来运行以下命令。
node --inspect-brk <path to subql-node> -f <path to subQuery project>
例如:
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/inspectorDebugger
attached.
然后打开 Chrome 开发工具,进入 Source>Filesystem,将项目添加到工作区并开始调试。查看更多信息如何调试SubQuery项目:
https://doc.subquery.network/tutorials_examples/debug-projects/
运行Query服务
安装:
# NPM
npm install -g @subql/query
请注意我们不推荐使用 yarn global ,因为它的依赖管理性能不佳,可能导致在运行中出现错误。
运行 Query 服务:
export DB_HOST=localhost
subql-query --name <project_name> --playground
确保项目名称与你初始化项目时的项目名称相同。另外,检查环境变量是否正确。
在成功运行subql-query 服务后,打开你的浏览器,前往 http://localhost:3000。你应该看到资源管理器中显示了一个 GraphQL 操场,以及准备查询的模式。