ทดลอง backstage
Tags: tutorial, tooling, devops
Published: 2021-10-01 09:32:36

วันนี้จะพามาลองติดตั้ง backstage.io ตามคู่มือที่เขาให้ไว้ดูว่ามีติดขัดตรงในเมื่อลองทำจริงบ้าง

เริ่มตั้งแต่หน้านี้เลย https://backstage.io/docs/getting-started/
ที่นี่เขาให้รันคำสั่งเดียวครับ npx @backstage/create-app ซึ่งมีคำแนะนำว่า ก่อนอื่นเราควรมี node version manager สักตัว โดยผมใช้ n ติดตั้งง่ายๆดังนี้

```sh
npm install -g n
```

ผมเลือกใช้ node เวอร์ชันล่าสุด ก็สั่งว่า

```sh
sudo n latest
```

จากนั้นผมก็ up คำสั่ง yarn ด้วย

```sh
npm install -g yarn
```

จากนั้นผมจึงค่อยมาเริ่มตามคู่มือ

```sh
npx @backstage/create-app
```

ตอนที่รันคำสั่งนี้ก็นั่งทำสมาธินิดนึง จนกว่ามันจะให้เราตั้งชื่อ project เราก็ตั้งอะไรไปก็ได้ มันจะสร้าง directory ให้เราตามชื่อนั้น เช่น mybackstage

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6b9wcnzdd503pkgbubpg.png)

และให้เลือก database ที่ต้องการใช้ ซึ่ง default มีแค่ sqlite กับ prostgres
เมื่อเสร็จแล้วมันจะขึ้นข้อความแบบนี้

  All set! Now you might want to:
  Run the app: cd mybackstage && yarn dev
  Set up the software catalog: https://backstage.io/docs/features/software-catalog/configuration
  Add authentication: https://backstage.io/docs/auth/

เราลองรันดูก็ได้ครับ คำสั่งนี้

```sh
cd mybackstage && yarn dev
```

มันจะเริ่มต้นรัน backstage ในโหมด dev ซึ่งถ้าเราเลือก sqlite มา มันจะลบทิ้งแล้วสร้างใหม่ให้เสมอ ข้อมูลจะถูก reset เป็น default ทุกครั้งที่รันใหม่

ถ้าต้องการหยุดมันก็ ctrl+c หรือ command+c ธรรมดาได้เลย

ตอนนี้เราจะอยู่ใน directory ของโปรเจคเรานะครับคือใน mybackstage

ทีนี้ เวลาที่เราจะ deploy เจ้า backstage มันอาจจะต้องมีพวกค่า config ต่างๆ  ผมเลยใช้วิธีสร้างไฟล์ .env ไว้ในเครื่อง แล้วเอา .env ไปใส่ใน .gitignore อีกที เพื่อที่มันจะได้ไม่เข้าไปอยู่ใน repo

โดยเนื้อไฟล์จะมีหน้าตาประมาณนี้

```makefile
POSTGRES_NAME=some-postgres
GITHUB_TOKEN=xxx
AUTH_GITHUB_CLIENT_SECRET=xxx
POSTGRES_HOST=db
POSTGRES_PORT=5432
POSTGRES_USER=postgres
POSTGRES_PASSWORD=mysecretpassword
```

ค่า GITHUB_TOKEN คือ personal access token ไปสร้างที่เมนูตามรูป เอาไว้เวลาที่เราสร้าง project ใน backstage มันจะไปสร้าง repo ไว้ใน account นี้

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2tlbv14to0s2ez8zaroi.png)

ค่า AUTH_GITHUB_CLIENT_SECRET คือค่า Oauth ใน github เช่นกัน เอาไว้ให้มันเข้ามาส่องดู Github Actions ของเราได้ในหน้า CI/CD

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dbtj71143jn0uqt79jyf.png)

เมื่อเรารันมันได้แล้ว เราก็จะมาลอง deploy ด้วย Docker กันตามคู่มือหน้านี้

https://backstage.io/docs/deployment/docker

คู่มือบอกให้รัน 3 คำสั่งเพื่อ build

```sh
yarn install --frozen-lockfile
yarn tsc
yarn build
```

และเราไม่ต้องสร้าง Dockerfile เอง เพราะมันสร้างให้เราไว้แล้ว เราแค่รับคำสั่ง

docker image build . -f packages/backend/Dockerfile --tag backstage

เพื่อสร้าง image แล้วตั้งชื่อว่า backstage ไว้

ตอนที่รัน ผมใช้ postgres จาก docker ง่ายด้วยคำสั่งนี้เลย

```sh
docker run --name some-postgres -p 5432:5432 -e POSTGRES_PASSWORD=mysecretpassword -d postgres
```

เพราะฉะนั้นตอนที่รัน docker ของ backstage จึงต้องมี link ไปเชื่อม network กันด้วย ตามนี้

```sh
docker run -it -p 7000:7000 --env-file ./.env --link some-postgres:db --name backstage backstage
```

สั่งเกตุว่าชื่อ some-postgres มันจะสร้าง alias ชื่อ db ให้ใน network ซึ่งจะเชื่อมโยงกับค่า env ค่า POSTGRES_HOST=db เพื่อให้มันเห็นกันได้ด้วยชื่อ db

เพียงแค่นี้ ก็สามารถ deploy backstage ง่ายๆได้แล้วครับ