Hello World (localhost & Docker)

SubQuery TeamAbout 2 min

Hello World (localhost & Docker)

ยินดีต้อนรับ quick start ของ SubQuery Hello World การ quick start มีจุดมุ่งหมายเพื่อแสดงให้เห็นวิธีการใช้ starter project เพื่อรันใน Docker ได้อย่างไรในไม่กี่ขั้นตอนง่ายๆ

วัตถุประสงค์การเรียนรู้

เมื่อจบจาก quick start นี้ คุณจะ:

  • ทำความเข้าใจข้อกำหนดเบื้องต้นที่จำเป็น
  • เข้าใจคำสั่งทั่วไปพื้นฐาน
  • สามารถไปยัง localhost:3000 และดู playground ได้
  • รัน query อย่างง่ายเพื่อ get ค่า block height ของเครือข่าย Polkadot mainnet

กลุ่มเป้าหมาย

คู่มือนี้จัดทำขึ้นสำหรับนักพัฒนาหน้าใหม่ที่มีประสบการณ์ด้านการพัฒนามาบ้างแล้วและสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับ SubQuery

คู่มือวิดีโอ


ข้อกำหนดเบื้องต้น

คุณจะต้องมี:

  • yarn หรือ npm package manager
  • SubQuery CLI (@subql/cli)
  • Docker

คุณสามารถรันคำสั่งต่อไปนี้ในเทอร์มินัลเพื่อดูว่าคุณมีข้อกำหนดเบื้องต้นเหล่านี้อยู่แล้วหรือไม่

yarn -v (or npm -v)
subql -v
docker -v

สำหรับผู้ใช้งานขั้นสูง ให้คัดลอกและวางสิ่งต่อไปนี้:

echo -e "My yarn version is:" `yarn -v` "\nMy subql version is:" `subql -v`  "\nMy docker version is:" `docker -v`

ซึ่งควรส่งคืนค่า: (สำหรับผู้ใช้ npm ให้แทนที่ yarn ด้วย npm)

My yarn version is: 1.22.10
My subql version is: @subql/cli/0.9.3 darwin-x64 node-v16.3.0
My docker version is: Docker version 20.10.5, build 55c4c88

หากคุณได้รับดังข้างต้น แสดงว่าคุณพร้อมแล้วสำหรับขั้นต่ำต่อไป หากไม่เป็นเช่นนั้น ให้ทำตามลิงก์เหล่านี้เพื่อติดตั้ง:

1. เริ่มต้นโปรเจกต์

ขั้นตอนแรกในการเริ่มต้นกับ SubQuery คือการเรียกใช้คำสั่ง subql init โดยเริ่มต้นโปรเจกต์ด้วยชื่อ subqlHelloWorld โปรดทราบว่า มีเพียง author เท่านั้นที่จำเป็น อย่างอื่นที่เหลือให้เว้นว่างไว้

> subql init subqlHelloWorld
? Select a network Polkadot
? Select a template project subql-starter     Starter project for subquery
Cloning project... done
RPC endpoint: [wss://polkadot.api.onfinality.io/public-ws]:
Git repository [https://github.com/subquery/subql-starter]:
Fetching network genesis hash... done
Author [Ian He & Jay Ji]:
Description [This project can be use as a starting po...]:
Version [0.0.4]:
License [MIT]:
Preparing project... done
subqlHelloWorld is ready

อย่าลืมไปที่ไดเร็กทอรีใหม่นี้

cd subqlHelloWorld

2. ติดตั้ง dependencies

ในตอนนี้ ให้ทำการติดตั้ง yarn หรือ node เพื่อติดตั้ง dependencies ต่างๆ

::: code-tabs @tab:active yarn shell yarn install @tab npm bash npm install :::

ตัวอย่างของ yarn install

> yarn install
yarn install v1.22.10
info No lockfile found.
[1/4] 🔍  Resolving packages...
[2/4] 🚚  Fetching packages...
[3/4] 🔗  Linking dependencies...
[4/4] 🔨  Building fresh packages...
success Saved lockfile.
✨  Done in 31.84s.

3. การ generate code

ให้รัน yarn codegen เพื่อสร้าง typescript จาก GraphQL schema

::: code-tabs @tab:active yarn shell yarn codegen @tab npm bash npm run-script codegen :::

ตัวอย่างของ yarn codegen

> yarn codegen
yarn run v1.22.10
$ ./node_modules/.bin/subql codegen
===============================
---------Subql Codegen---------
===============================
* Schema StarterEntity generated !
* Models index generated !
* Types index generated !
✨  Done in 1.02s.

คำเตือน เมื่อมีการเปลี่ยนแปลงไฟล์ schema โปรดอย่าลืมรัน yarn codegen อีกครั้งเพื่อสร้าง types directory ของคุณใหม่

4. การ build code

ขั้นตอนต่อไปคือการ build โค้ดด้วย yarn build

::: code-tabs @tab:active yarn shell yarn build @tab npm bash npm run-script build :::

ตัวอย่างของ yarn build

> yarn build
yarn run v1.22.10
$ tsc -b
✨  Done in 5.68s.

5. รัน Docker

การใช้ Docker ช่วยให้คุณเรียกใช้ตัวอย่างนี้ได้อย่างรวดเร็ว เนื่องจากโครงสร้างพื้นฐานที่จำเป็นทั้งหมดมีการจัดเตรียมไว้ใน Docker image แล้ว รัน docker-compose pull && docker-compose up

สิ่งนี้จะนำพาทุกอย่างให้ทำงาน ซึ่งในที่สุดคุณจะได้รับบล็อก

> #SNIPPET
subquery-node_1   | 2021-06-05T22:20:31.450Z <subql-node> INFO node started
subquery-node_1   | 2021-06-05T22:20:35.134Z <fetch> INFO fetch block [1, 100]
subqlhelloworld_graphql-engine_1 exited with code 0
subquery-node_1   | 2021-06-05T22:20:38.412Z <fetch> INFO fetch block [101, 200]
graphql-engine_1  | 2021-06-05T22:20:39.353Z <nestjs> INFO Starting Nest application...
graphql-engine_1  | 2021-06-05T22:20:39.382Z <nestjs> INFO AppModule dependencies initialized
graphql-engine_1  | 2021-06-05T22:20:39.382Z <nestjs> INFO ConfigureModule dependencies initialized
graphql-engine_1  | 2021-06-05T22:20:39.383Z <nestjs> INFO GraphqlModule dependencies initialized
graphql-engine_1  | 2021-06-05T22:20:39.809Z <nestjs> INFO Nest application successfully started
subquery-node_1   | 2021-06-05T22:20:41.122Z <fetch> INFO fetch block [201, 300]
graphql-engine_1  | 2021-06-05T22:20:43.244Z <express> INFO request completed

6. การเรียกใช้ playground

ไปที่ http://localhost:3000/ และคัดลอก query ด้านล่างไปใส่ที่ด้านซ้ายของหน้าจอ จากนั้นกดปุ่ม play

{
 query{
   starterEntities(last:10, orderBy:FIELD1_ASC ){
     nodes{
       field1
     }
   }
 }
}

SubQuery Playground บน localhost

playground localhost

ค่า block count ใน playground ควรตรงกับจำนวนบล็อก (ในทางเทคนิคแล้วคือ ค่า block height) ในเทอร์มินัลด้วย

สรุป

ในการ quick start นี้ เราได้สาธิตขั้นตอนพื้นฐานในการทำให้ starter project ใช้งานได้ในสภาพแวดล้อม Docker จากนั้นไปที่ localhost:3000 และเรียกใช้ query เพื่อส่งคืนหมายเลขบล็อกของเครือข่าย mainnet Polkadot