Bỏ qua

Wrangler CLI — Công Cụ Deploy Cloudflare

Wrangler là gì?

Wrangler là CLI chính thức của Cloudflare để tương tác với toàn bộ Cloudflare Developer Platform: Workers, Pages, D1, KV, R2.

npm install -g wrangler
# hoặc dùng npx (không cài global)
npx wrangler <command>

Authentication

# Login vào Cloudflare account
wrangler login
# → Mở browser → Authorize → Token được lưu local

# Kiểm tra đang login với account nào
wrangler whoami

Workers Commands

# Chạy Worker local (hot reload)
wrangler dev
# → http://localhost:8787
# → Tự restart khi thay đổi code

# Deploy lên production
wrangler deploy
# → Đọc wrangler.toml để biết tên worker, entry point
# → Bundle TypeScript → Upload lên Cloudflare

# Xem logs realtime (production)
wrangler tail

D1 Database Commands

# Tạo database mới
wrangler d1 create my-database
# Output: database_id = "426266db-..." → copy vào wrangler.toml

# Apply pending migrations
wrangler d1 migrations apply group-accounting-db
# → Apply trên production

wrangler d1 migrations apply group-accounting-db --local
# → Apply trên local SQLite (trong .wrangler/state/)

# Xem migrations đã apply
wrangler d1 migrations list group-accounting-db

# Query trực tiếp (debug)
wrangler d1 execute group-accounting-db \
  --command "SELECT * FROM users LIMIT 5"

wrangler d1 execute group-accounting-db --local \
  --command "SELECT COUNT(*) FROM transactions"

# Chạy SQL file
wrangler d1 execute group-accounting-db \
  --file ./migrations/0001_initial_schema.sql

Secrets Management

# Set secret (input ẩn, không log)
wrangler secret put JWT_SECRET
# → Nhập giá trị: [hidden]

wrangler secret put TURNSTILE_SECRET_KEY
wrangler secret put GOOGLE_CLIENT_SECRET

# List secrets đã set (chỉ hiện tên, không hiện giá trị)
wrangler secret list

# Xóa secret
wrangler secret delete JWT_SECRET

# Set secret cho local dev (lưu vào .dev.vars)
# Tạo file .dev.vars (KHÔNG commit file này):
# JWT_SECRET=your-local-secret-here
# TURNSTILE_SECRET_KEY=1x0000000000000000000000000000000AA

Pages Commands

# Deploy Pages project
wrangler pages deploy dist --project-name quythuchi
# dist: thư mục output sau khi build

# List projects
wrangler pages project list

# Xem deployment history
wrangler pages deployment list --project-name quythuchi

wrangler.toml — Config File

# api/wrangler.toml
name = "group-accounting-api"       # tên Worker (dùng làm subdomain)
main = "src/index.ts"               # entry point
compatibility_date = "2024-07-25"   # pin Workers runtime version
compatibility_flags = ["nodejs_compat"]  # bật Node.js compat APIs

# Static environment variables (public, OK để commit)
[vars]
FRONTEND_URL = "https://quythuchi.pages.dev"

# D1 Database binding
[[d1_databases]]
binding = "DB"                              # tên biến trong code: env.DB
database_name = "group-accounting-db"      # tên database trên Cloudflare
database_id = "426266db-0e17-4cb8-a9c9-6511f16ee301"

# KV Namespace (nếu cần)
# [[kv_namespaces]]
# binding = "CACHE"
# id = "..."

# R2 Bucket (nếu cần)
# [[r2_buckets]]
# binding = "STORAGE"
# bucket_name = "my-bucket"

Local Development — .dev.vars

File chứa secrets cho local development. Không commit file này:

# api/.dev.vars
JWT_SECRET=local-dev-secret-change-in-production
TURNSTILE_SECRET_KEY=1x0000000000000000000000000000000AA
GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret
FRONTEND_URL=http://localhost:5173

Wrangler tự đọc .dev.vars khi chạy wrangler dev.

# .gitignore
.dev.vars
.wrangler/

Local D1 State

Khi chạy wrangler dev, D1 data được lưu local tại:

api/.wrangler/state/v3/d1/

Reset local database:

rm -rf api/.wrangler/state
wrangler d1 migrations apply group-accounting-db --local


Makefile Integration

Dự án dùng Makefile để tổng hợp các commands hay dùng:

# Makefile
.PHONY: dev deploy migrate

dev:
    cd api && wrangler dev &
    cd web && npm run dev

deploy-api:
    cd api && wrangler deploy

deploy-web:
    cd web && npm run deploy

migrate:
    cd api && wrangler d1 migrations apply group-accounting-db

migrate-local:
    cd api && wrangler d1 migrations apply group-accounting-db --local
make dev           # chạy cả api và web
make migrate       # apply migrations production
make migrate-local # apply migrations local

Upgrade Wrangler

npm install -g wrangler@latest
# hoặc trong project:
npm install -D wrangler@latest

Pin Wrangler version trong package.json

Để team dùng cùng version, pin trong devDependencies:

"wrangler": "^4.83.0"
Run via npx wrangler hoặc npm script thay vì global install.