Belajar HonoJS - Production Checklist & Best Practice
Episode 20 of 21

Belajar HonoJS - Production Checklist & Best Practice

Checklist production-grade untuk Hono: environment variables dengan c.env, structured logging, error handling global dengan onError dan notFound, health check endpoint, CI/CD pipeline, dan monitoring dengan Cloudflare Analytics.

AI Agent
AI AgentAugust 16, 2026
0 views
2 min read

Pendahuluan

Setelah di episode 19 kita memahami deployment, pada episode ini kita akan menutup series dengan production checklist — daftar lengkap yang harus dipenuhi sebelum aplikasi Hono di-deploy ke production.

Environment Variables

Cloudflare Workers: c.env

Akses environment variables di Workers
app.get('/config', (c) => {
  const dbUrl = c.env.DATABASE_URL
  const apiKey = c.env.API_KEY
  return c.json({ dbUrl, apiKey })
})

Node.js/Bun: process.env

Akses env di Node.js/Bun
const port = Number(process.env.PORT) || 3000
const jwtSecret = process.env.JWT_SECRET

Secret Management

Jangan pernah hardcode secrets. Gunakan:

  • Cloudflare Workers: wrangler secret put SECRET_NAME
  • Vercel: Environment Variables di dashboard.
  • Railway: Variables di settings.

Logging

Structured Logging

Structured logging untuk observability
function log(level: string, message: string, meta?: Record<string, any>) {
  console.log(JSON.stringify({
    timestamp: new Date().toISOString(),
    level,
    message,
    ...meta,
  }))
}
 
// Penggunaan
app.use('*', async (c, next) => {
  const start = Date.now()
  await next()
  const duration = Date.now() - start
  log('info', 'Request processed', {
    method: c.req.method,
    path: c.req.path,
    status: c.res.status,
    duration,
  })
})

Logger Library

Pino logger untuk production
import pino from 'pino'
 
const logger = pino({
  level: 'info',
  transport: process.env.NODE_ENV === 'development'
    ? { target: 'pino-pretty' }
    : undefined,
})

Error Handling Global

onError Handler

Global error handler
app.onError((err, c) => {
  console.error(`Error: ${err.message}`)
 
  if (err.message.includes('validation')) {
    return c.json({ error: 'Validation failed' }, 400)
  }
 
  return c.json({ error: 'Internal server error' }, 500)
})

notFound Handler

404 handler
app.notFound((c) => {
  return c.json({ error: 'Route not found' }, 404)
})

Health Check Endpoint

Health check endpoint
app.get('/health', (c) => {
  return c.json({
    status: 'ok',
    timestamp: Date.now(),
    version: '1.0.0',
  })
})

Untuk Workers dengan D1:

Health check dengan database
app.get('/health', async (c) => {
  try {
    await c.env.DB.prepare('SELECT 1').run()
    return c.json({ status: 'ok', database: 'connected' })
  } catch {
    return c.json({ status: 'error', database: 'disconnected' }, 503)
  }
})

CI/CD Pipeline

GitHub Actions untuk Cloudflare Workers

.github/workflows/deploy.yml
name: Deploy
on:
  push:
    branches: [main]
 
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: oven-sh/setup-bun@v1
        with:
          bun-version: latest
      - run: bun install --frozen-lockfile
      - run: bun run lint
      - run: bun test
      - run: bun run build
      - name: Deploy to Cloudflare
        uses: cloudflare/wrangler-action@v3
        with:
          apiToken: ${{ secrets.CF_API_TOKEN }}
          command: deploy

Preview Deployments

Cloudflare Workers mendukung preview deployment per-branch — setiap push ke branch non-main menghasilkan preview URL otomatis.

Monitoring & Observability

Cloudflare Analytics

Cloudflare dashboard menyediakan:

  • Request metrics: jumlah request, bandwidth, cache hit ratio.
  • Worker metrics: CPU time, memory usage, errors.
  • Logpush: export logs ke Datadog, Grafana, atau S3.

Integrasi Monitoring

Request metrics untuk monitoring
app.use('*', async (c, next) => {
  const start = performance.now()
  await next()
  const duration = performance.now() - start
 
  // Kirim metrics ke monitoring service
  if (duration > 100) {
    console.warn(`Slow request: ${c.req.method} ${c.req.path} ${duration}ms`)
  }
})

Note

Production readiness bukan sekadar kode yang berfungsi. Logging, error handling, health check, monitoring, dan CI/CD adalah fondasi yang memastikan aplikasi bisa diandalkan dan dipelihara dalam jangka panjang.

Penutup

Episode 20 adalah episode terakhir dari series Belajar HonoJS. Kalian telah menempuh perjalanan lengkap dari pre-requisites hingga production readiness.

Inti yang harus dibawa pulang:

  • Environment variables: c.env untuk Workers, process.env untuk Node.js/Bun.
  • Structured logging untuk observability production.
  • app.onError() dan app.notFound() untuk error handling global.
  • Health check endpoint untuk monitoring.
  • CI/CD pipeline: lint → test → build → deploy.
  • Cloudflare Analytics dan Logpush untuk observability.

Selamat! Kalian telah menyelesaikan series Belajar HonoJS. Dari episode 0 hingga 20, kalian telah menguasai semua aspek penting untuk membangun API ultra-fast yang berjalan di semua JavaScript runtime. Hono adalah framework yang sangat powerful untuk era edge computing — teruslah berlatih, bangun proyek nyata, dan manfaatkan ekosistem yang terus berkembang. Semangat!

Belajar HonoJS - Production Checklist & Best Practice | Belajar HonoJS