th: CLI ของ ThailandHosting

Deploy Container และเว็บไซต์ Static Web คัดลอกไฟล์ขึ้น Object Storage เชื่อมต่อ Database และ Cache รวมถึงส่งและรับข้อความใน Queue จาก terminal หรือ CI ของคุณ

th คืออะไร

th คือ command line ของ ThailandHosting ทำงานผ่าน API เดียวกับ Console โดยทำงานในนามบัญชีของคุณ (หลัง th auth login) หรือในนาม API Key (ใน CI) คำสั่งแบ่งกลุ่มตามบริการ: th <group> <command> [arguments] [parameters]

Shell
th auth login
th container deploy api --source .
th static-site deploy docs ./dist
th object-storage cp -r ./backups th://my-bucket/backups
th database connect app-db
th queue tail jobs

th help แสดงทุกคำสั่ง ใส่ --help ต่อท้ายคำสั่งใดก็ได้ (หรือรัน th help container deploy) เพื่อดูพารามิเตอร์ของคำสั่งนั้น ถ้าพิมพ์แค่ชื่อกลุ่ม เช่น th container จะแสดงคำสั่งทั้งหมดในกลุ่ม

ใส่พารามิเตอร์และอาร์กิวเมนต์สลับลำดับได้: th container deploy api --port 3000 กับ th container deploy --port 3000 api ให้ผลเหมือนกัน แฟล็กที่เปิดอยู่โดยค่าเริ่มต้นปิดได้ด้วย --no- เช่น --no-ack

ติดตั้ง

สคริปต์ติดตั้งจะดาวน์โหลด Release ล่าสุดจาก GitHub และตรวจกับไฟล์ SHA256SUMS ของ Release นั้นก่อนติดตั้งทุกครั้ง

Shell
# Linux, macOS
curl -fsSL https://raw.githubusercontent.com/mrzack99s/thailandhosting-cli/main/install.sh | sh

# Windows (PowerShell)
irm https://raw.githubusercontent.com/mrzack99s/thailandhosting-cli/main/install.ps1 | iex
ระบบตำแหน่งที่ติดตั้ง thตัวเลือก
Linux, macOS/usr/local/bin หรือ ~/.local/bin ถ้าเขียนโฟลเดอร์แรกไม่ได้TH_VERSION=0.1.0 เลือกเวอร์ชัน TH_INSTALL_DIR เลือกโฟลเดอร์
Windows%LOCALAPPDATA%\Programs\th และเพิ่มลงใน PATH ของผู้ใช้ (เปิด terminal ใหม่หลังติดตั้ง)$env:TH_VERSION เลือกเวอร์ชัน

หรือดาวน์โหลดไฟล์บีบอัดสำหรับระบบของคุณจาก GitHub Releases หรือ build เองด้วย Go 1.23 ขึ้นไป:

Shell
go install github.com/mrzack99s/thailandhosting-cli/cmd/th@latest

ตรวจเวอร์ชันที่ติดตั้งด้วย th version

เข้าสู่ระบบ

  1. รัน th auth login CLI จะแสดงลิงก์และรหัส แล้วเปิด Console ในเบราว์เซอร์ (ถ้าใส่ --no-browser จะแสดงแค่ลิงก์ เหมาะกับเซิร์ฟเวอร์ที่ไม่มีหน้าจอ)
  2. ใน Console ตรวจว่ารหัสตรงกับใน terminal แล้วกด อนุญาต
  3. terminal จะแสดงว่าคุณเข้าสู่ระบบเป็นใคร ถ้ายังไม่ได้ตั้ง Project ไว้ Project แรกของคุณจะถูกใช้เป็น Project ปัจจุบัน

การเข้าสู่ระบบใช้ได้ 90 วัน และบันทึกไว้ในไฟล์ config ของ th (th/config.json ในโฟลเดอร์ config ของผู้ใช้ อ่านได้เฉพาะคุณ) และแสดงใน Console ที่ บัญชี → อุปกรณ์ที่เข้าสู่ระบบ ซึ่งคุณสั่งออกจากระบบได้จากทุกที่

Shell
th auth status        # ดูว่า CLI ทำงานในนามใคร (หรือ th whoami)
th auth logout        # ออกจากระบบ token นี้และลบออกจากไฟล์ config

ใน CI ไม่ต้องเข้าสู่ระบบ ให้ตั้ง API Key ใน TH_API_KEY แทน (ดู ใช้ใน CI) เมื่อตั้ง TH_API_KEY ไว้ ค่านี้จะมาก่อนการเข้าสู่ระบบที่บันทึกไว้

เลือก Project และ Region

คำสั่งส่วนใหญ่ทำงานกับ Project เดียว บริการที่สร้างใหม่ต้องมี Region ด้วย ตั้งครั้งเดียวด้วย th config หรือระบุในแต่ละคำสั่งก็ได้:

Shell
th projects list
th config set project acme      # ID หรือ slug
th regions list
th config set region bkk
th config list

แต่ละค่าจะใช้จากแหล่งแรกที่มีค่านั้น ตามลำดับนี้:

  1. พารามิเตอร์ในคำสั่ง: --project, --region, --endpoint
  2. ตัวแปรสภาพแวดล้อม: TH_PROJECT, TH_REGION, TH_ENDPOINT
  3. ไฟล์ config ที่ตั้งด้วย th config set

ถ้าไม่ได้ตั้ง Region คำสั่งที่สร้างบริการจะใช้ Region เริ่มต้นของแพลตฟอร์มและแจ้งให้ทราบ API Key ผูกกับ Project เดียว ดังนั้นเมื่อใช้ TH_API_KEY Project จะมาจาก Key

พารามิเตอร์ส่วนกลาง

ทุกคำสั่งรับพารามิเตอร์เหล่านี้ นอกเหนือจากพารามิเตอร์ของตัวเอง

ชื่อชนิดคำอธิบาย
--projectข้อความProject ID or slug (default: config / TH_PROJECT)
--regionข้อความRegion ID (default: config / TH_REGION)
--endpointข้อความAPI endpoint (default: config / TH_ENDPOINT, else https://cloud.thailandhosting.com)
--formatข้อความOutput format: text or json
--quietแฟล็กDo not prompt; assume yes

--help (หรือ -h) แสดงวิธีใช้และพารามิเตอร์ของคำสั่งแทนการรันคำสั่ง

รูปแบบผลลัพธ์

โดยค่าเริ่มต้น คำสั่งจะแสดงผลเป็นข้อความสำหรับคนอ่าน: ตารางที่มีแถวหัวตาราง หรือประโยคสั้น ๆ บอกสิ่งที่ทำไป ถ้าใส่ --format json จะแสดง JSON จาก API แทน สำหรับสคริปต์และเครื่องมืออย่าง jq

Shell
th container services list
th container services list --format json | jq -r '.[].name'
  • Standard output มีเฉพาะผลลัพธ์: ตาราง JSON ไฟล์ที่ขอ (th object-storage cat) หรือข้อความใน Queue (th queue receive)
  • Standard error มีความคืบหน้าและคำแนะนำ: “Packing sources…”, log ของ Build, ความคืบหน้าการอัปโหลด คำถามยืนยัน และข้อผิดพลาด การ redirect standard output ลงไฟล์จึงได้ข้อมูลที่สะอาด
  • ข้อผิดพลาดมีรูปแบบ ERROR: (th.container.deploy) … พร้อมชื่อคำสั่งที่ล้มเหลว

คำสั่งที่ลบหรือแทนที่ข้อมูลจะถาม Do you want to continue (Y/n)? ก่อน --quiet จะตอบ yes ให้ ถ้าไม่ใส่และคำสั่งถามไม่ได้ (standard input ไม่ใช่ terminal) คำสั่งจะหยุดพร้อมข้อผิดพลาดแทนการเดาคำตอบ

ตัวแปรสภาพแวดล้อม

ตัวแปรหน้าที่
TH_API_KEYAPI Key จาก Console (Integrations → API keys) ใช้แทนการเข้าสู่ระบบที่บันทึกไว้ สิทธิ์ (scope) ของ Key กำหนดว่า th ทำอะไรได้บ้าง
TH_TOKENtoken ที่ส่งแทนการเข้าสู่ระบบที่บันทึกไว้ (ค่าที่ขึ้นต้นด้วย thk_ จะถือเป็น API Key) th auth print-access-token แสดง token ที่ใช้อยู่
TH_ENDPOINTที่อยู่ API ที่ CLI เรียก ค่าเริ่มต้น: https://cloud.thailandhosting.com
TH_PROJECTProject ระบุด้วย ID หรือ slug
TH_REGIONRegion สำหรับบริการที่สร้างใหม่
TH_OBJECT_STORAGE_KEY_ID, TH_OBJECT_STORAGE_SECRETAccess key ของ Object Storage สำหรับคำสั่งจัดการไฟล์ของ th object-storage ต้องตั้งทั้งคู่หรือไม่ตั้งเลย
TH_QUEUE_KEY_ID, TH_QUEUE_SECRETAccess key ของ Queue Service สำหรับการส่ง รับ และคำสั่งอื่นที่ทำงานกับข้อความ ต้องตั้งทั้งคู่หรือไม่ตั้งเลย

Object Storage และ Queue Service ใช้ Access key ของตัวเอง ไม่ใช่การเข้าสู่ระบบของ CLI เมื่อเข้าสู่ระบบบนเครื่องของคุณเองก็ไม่ต้องสร้าง Key: th จะขอ Key ชั่วคราวของ Project จาก Console (ใช้ได้ 12 ชั่วโมง ตามสิทธิ์ของ role คุณ) และเก็บไว้ข้างไฟล์ config จนใกล้หมดอายุ ถ้าใช้ TH_API_KEY หรือต้องการใช้ Key ที่ระบุเอง ให้ตั้งตัวแปรด้านบน

ใช้ใน CI

สร้าง Key ใน Console เก็บเป็น secret ใน CI แล้วส่งผ่านตัวแปรสภาพแวดล้อม ใส่ --quiet เพื่อไม่ให้มีขั้นตอนไหนรอคำตอบ

งานKeyตัวแปร
Deploy ContainerAPI Key ที่มีสิทธิ์ Containers: deploy (run:write)TH_API_KEY
Deploy Static WebAPI Key ที่มีสิทธิ์ Static Web: deploy (static:write)TH_API_KEY
อ่านข้อมูล Container หรือ Static Web อย่างเดียวAPI Key ที่มีสิทธิ์ run:read หรือ static:readTH_API_KEY
Object StorageAccess key ของ Object StorageTH_OBJECT_STORAGE_KEY_ID, TH_OBJECT_STORAGE_SECRET
Queue ServiceAccess key ของ Queue ServiceTH_QUEUE_KEY_ID, TH_QUEUE_SECRET

API Key ใช้ได้เฉพาะกับ Project ของตัวเอง ตัวอย่างสำหรับ GitHub Actions:

Shell
# .github/workflows/deploy.yml
on:
  push:
    branches: [main]
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: |
          curl -fsSL https://raw.githubusercontent.com/mrzack99s/thailandhosting-cli/main/install.sh | TH_INSTALL_DIR="$HOME/.local/bin" sh
          echo "$HOME/.local/bin" >> "$GITHUB_PATH"
      - run: th container deploy api --source . --quiet
        env:
          TH_API_KEY: ${{ secrets.TH_API_KEY }}

ให้แต่ละ pipeline มี Key ของตัวเองที่มีเฉพาะสิทธิ์ที่จำเป็น ถ้า Key ไหนหลุดก็ยกเลิกแค่ Key นั้น

Exit code

Codeความหมาย
0คำสั่งสำเร็จ (รวมถึง --help และ th queue tail ที่หยุดด้วย Ctrl+C)
1เกิดข้อผิดพลาด หรือคุณตอบ no ในการยืนยัน (“Aborted.”) สาเหตุแสดงใน standard error
130คุณกด Ctrl+C ขณะ th กำลังแสดง log ของ Build (th container deploy --source, th builds log --follow, th static-site builds log --follow) Build ยังทำงานต่อบนเซิร์ฟเวอร์ ติดตามต่อได้ด้วยคำสั่งที่ th แสดง
อื่น ๆth database connect และ th cache connect จบด้วย exit code ของไคลเอนต์ที่เปิด (psql, mysql, redis-cli ฯลฯ)

กลุ่มคำสั่ง

คำสั่งคำอธิบาย
th authเข้าสู่ระบบและออกจากระบบ CLI ดูว่า CLI ทำงานในนามใคร และให้ Docker เข้าสู่ระบบ container registry ของ Project (5)
th configตั้ง Project, Region และ endpoint ของ Console ที่ CLI ใช้ ดูรายการ Project และ Region ของคุณ และแสดงเวอร์ชันของ CLI (7)
th containerDeploy Container จากโฟลเดอร์หรือ image ย้อนกลับไป Revision ก่อนหน้า อ่าน log และดูแล Registry ของ Project ให้เป็นระเบียบ (13)
th registryสร้าง Registry ติด tag คัดลอก และลบ image ให้ docker และ CI เข้าสู่ระบบด้วย Access token และคุมพื้นที่ด้วย Cleanup policy (13)
th functionsDeploy Function ภาษา Python, Node.js (TypeScript) และ Go จากโฟลเดอร์ ดึงโค้ดที่แก้ใน Console ลงเครื่อง และเรียกใช้งาน (10)
th triggersเรียก Container หรือ Function ตามเวลา (Cron) หรือทุกข้อความที่เข้า Queue (7)
th static-siteDeploy โฟลเดอร์ที่ build แล้วเป็นเว็บไซต์ Static Web ย้อนกลับไป Release ก่อนหน้า เชื่อมโดเมนของคุณเอง และติดตาม Build จาก Git (13)
th object-storageสร้าง Bucket คัดลอกและซิงก์ไฟล์ด้วย path แบบ th:// เปิดโฟลเดอร์เป็นสาธารณะ และแชร์ไฟล์เดี่ยวด้วยลิงก์ที่หมดอายุ (12)
th databaseสร้าง Database PostgreSQL, MySQL และ MariaDB เชื่อมต่อจากเครื่องของคุณด้วยคำสั่งเดียว สำรองและกู้คืนข้อมูล และเพิ่ม read replica (20)
th cacheสร้าง Cache แบบ ThailandHosting Cache (ใช้กับ Redis client ได้) และ Valkey เชื่อมต่อด้วย redis-cli หรือ valkey-cli ปรับขนาด และจัดการ Backup (17)
th queueสร้าง Queue ส่งข้อความ รับและยืนยันข้อความ และติดตาม Queue แบบ consumer อย่างง่าย (11)