Lewati ke konten

Production Deploy

Deno berjalan tanpa permission secara bawaan, jadi server produksi hanya mendapat akses yang diserahkan lewat command line. Server Deserve butuh sekumpulan kecil flag yang bisa diprediksi, dan Deno CLI yang sama yang menjalankannya secara lokal juga mengompilasinya menjadi satu binary mandiri untuk deploy.

Daftar Periksa Permission

Server Deserve menyentuh jaringan untuk mengikat port dan disk untuk membaca rute, view, dan berkas statis. Itu memetakan ke tiga flag, sisanya tetap mati kecuali sebuah app membutuhkannya:

FlagKenapa Deserve membutuhkannyaWajib
--allow-netMengikat port lewat Deno.serve dan menggerakkan fetchYa
--allow-readMeresolusi folder rute, view, dan berkas statis di diskYa
--allow-envMembaca variabel PORT saat port datang dari hostHanya dengan env
--allow-writeTidak dipakai framework, hanya oleh app yang menyimpan berkasHanya saat menulis

Permission write tetap mati untuk server biasa. Route yang menyimpan unggahan ke disk adalah alasan umum menambahkannya, dibatasi ke satu folder seperti pada Upload File.

Mengunci Permission

Permission * berguna saat membangun, namun produksi lebih terbaca saat tiap flag menyebut persis apa yang boleh disentuhnya. Membatasi --allow-read ke folder aset dan --allow-env ke satu variabel menjaga permukaan tetap kecil:

bash
# Batasi tiap permission ke kebutuhannya
deno run \
  --allow-net \
  --allow-read=./routes,./views,./public \
  --allow-env=PORT \
  main.ts

Sebuah deno task di deno.json menyimpan perintah panjang itu dan memberi deploy satu nama untuk dipanggil:

json
{
  "tasks": {
    "start": "deno run --allow-net --allow-read=./routes,./views,./public --allow-env=PORT main.ts"
  }
}

Menjalankan deno task start lalu meluncurkan server dengan flag terkunci tiap kali.

Membaca Port Dari Environment

Host biasanya menetapkan port lewat variabel PORT. Memanggil serve() tanpa port membaca PORT lebih dulu dan kembali ke 8000 sebagai default, jadi binary yang sama cocok untuk run lokal dan host terkelola:

typescript
// Baca env PORT, fallback ke 8000
await 
router
.
serve
()

Membaca variabel itulah yang dicakup --allow-env=PORT. Memberi angka eksplisit seperti serve(8000) melewati pencarian, jadi flag env jadi tidak relevan saat port di-hardcode. Argumen host dan sinyal lengkap ada di Graceful Shutdown.

Mengompilasi Binary Mandiri

deno compile menyatukan server dan permission-nya menjadi satu executable yang berjalan tanpa Deno terpasang, yang cocok untuk kontainer ramping atau host polos. Flag permission berada pada perintah compile agar binary membawanya:

bash
# Satukan server dan flag-nya jadi binary
deno compile \
  --allow-net \
  --allow-read=./routes,./views,./public \
  --allow-env=PORT \
  --output server \
  main.ts

Hasilnya berjalan langsung dari ./server dengan flag sudah di dalam. Satu catatan cocok untuk Deserve, karena hot reload memantau berkas di disk dan binary terkompilasi menyajikan snapshot tetap, jadi suntingan setelah build perlu compile baru alih-alih pertukaran langsung.

Mengawasinya Berjalan

Produksi butuh mata pada server tanpa membanjiri konsol dengan cetakan, yang merupakan tujuan bus event observability. Satu listener router.on() meneruskan event lifecycle, request, dan kesalahan ke apa pun yang mengumpulkan log, dan pelaporan error merutekan kegagalan ke tempat yang sama. Berhenti bersih saat deploy dicakup oleh Graceful Shutdown, dan memindahkan kerja berat tanpa memblokir server dicakup oleh worker pool.

Dirilis di bawah Lisensi MIT.