Membawa Elysia.js + Bun ke Produksi: Yang Tidak Tertulis di Docs
Catatan praktis dari menjalankan Elysia.js di Bun untuk service produksi: PM2, observability, dan pola error yang harus diwaspadai.
Wafik Ulinnuha
Backend Developer
Bun memberikan startup time yang cepat dan throughput yang impresif. Elysia.js menambahkan ergonomi tipe yang setara Hono atau Fastify. Kombinasi ini sangat menggoda. Tapi seperti runtime baru lainnya, banyak detail produksi yang harus diisi sendiri.
Process supervisor
Bun belum punya equivalent dari cluster di Node yang matang. Saya memakai dua pendekatan, tergantung beban:
- PM2 dengan mode
forkdan beberapa instance. Cocok untuk service yang stateless. - systemd unit dengan
Restart=alwaysuntuk service kritikal. Lebih sederhana, satu binarybun, dan log langsung ke journald.
[Service]
Type=simple
User=app
ExecStart=/usr/local/bin/bun run /var/www/app/src/index.ts
Restart=always
RestartSec=2
LimitNOFILE=65536
Environment=NODE_ENV=production
Reverse proxy yang benar
Selalu letakkan Nginx di depan. Bukan karena Bun lemah meng-handle TLS, tapi agar konfigurasi rate-limit, header keamanan, dan koneksi keep-alive bisa diatur di satu tempat.
location /api/ {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_read_timeout 60s;
}
Observability minimal
Tanpa instrumentasi, performa Bun sulit ditelusuri. Saya selalu memasang:
- Endpoint
/healthzdan/readyzsederhana. - Logger berbasis
pinodengan output JSON, di-pipe ke Loki via Vector. - Histogram durasi handler menggunakan
prom-client; Elysia menyediakanonAfterHandleyang ideal untuk ini.
Pola error yang harus diwaspadai
Beberapa hal yang bikin saya kena di awal:
- Top-level await yang tertahan saat boot — service ikut pending hingga timeout.
- Body parsing untuk multipart di Bun pernah inkompatibel dengan beberapa client; selalu test dengan klien Android sebenarnya.
- Date timezone di build Linux Alpine: pastikan
tzdatater-install jika kamu menggunakan Date dengan timezone lokal.
Apakah saya menyesal pindah ke Bun?
Tidak. Latency p95 untuk Gatsu turun ~32% dibanding versi Node sebelumnya, dan startup container jadi sub-detik. Tapi saya berhati-hati: untuk service mission-critical yang tidak butuh innovation cycle baru, Node.js LTS masih pilihan yang sangat bisa dipertanggungjawabkan.
Bacaan lanjutan
Bacaan lanjutan
Tuning PgBouncer di VPS Sederhana untuk Beban Bursty
Connection pool yang salah konfigurasi adalah cara termurah untuk membuat database produksi tampak lambat. Inilah angka yang akhirnya saya pakai.
Mendesain SaaS Multi-Tenant di PostgreSQL Tanpa Menyesal
Pemilihan strategi multi-tenant menentukan biaya operasional, keamanan, dan kemudahan migrasi sekian tahun ke depan. Inilah panduan jujur dari pengalaman membangun Gatsu.