Bagaimana Cara Menerapkan Aplikasi Nest.js?

How to Deploy a Nest.js Application_
How to Deploy a Nest.js Application_

Memilih strategi penerapan yang tepat penting untuk memastikan aplikasi Anda beroperasi dengan lancar dan dapat ditingkatkan sesuai kebutuhan. Artikel ini membahas berbagai opsi penerapan yang tersedia untuk aplikasi Nest.js. Secara khusus, artikel ini berfokus pada cara men-deploy aplikasi Nest.js ke kontainer Back4app.

Hal-hal Penting yang Dapat Dipetik

  • Memilih strategi penerapan yang tepat untuk aplikasi Nest.js sangat penting untuk skalabilitas dan kelancaran operasi.
  • Opsi penerapan meliputi Infrastructure as a Service (IaaS) dan Container as a Service (CaaS).
  • Back4app Containers adalah penyedia CaaS yang populer untuk menerapkan aplikasi Nest.js, menawarkan abstraksi yang lebih tinggi dan manajemen yang disederhanakan.

Apa itu Nest.js?

Nest.js adalah kerangka kerja Node.js untuk membangun aplikasi sisi server yang dapat diskalakan. Framework ini memecahkan masalah arsitektur yang tidak dapat diatasi oleh sebagian besar kerangka kerja dan pustaka modern dengan menggunakan kerangka kerja arsitektur modular. Arsitektur ini memungkinkan pengembang untuk membuat basis kode yang terorganisir dengan baik, dapat diskalakan, dan dapat dipelihara.

Keuntungan Menggunakan Nest.js

Di bawah ini adalah beberapa keuntungan menggunakan Nest.js:

  • Next.js memiliki pendapat yang kuat tentang bagaimana kode harus disusun. Oleh karena itu, hal ini menghilangkan beban untuk memikirkan bagaimana mengatur kode Anda sendiri.
  • Ia mendukung TypeScript secara default, tetapi juga memungkinkan Anda untuk menulis kode JavaScript murni.
  • Menggunakan kerangka kerja Express secara default di bawah tenda tetapi dapat dikonfigurasi untuk menggunakan Fastify, yang lebih cepat.
  • Nest.js terintegrasi dengan lancar dengan pustaka frontend seperti React dan Angular.
  • Ini memiliki alat utilitas baris perintah yang disebut NestCLI. Alat ini secara otomatis menghasilkan kode yang sudah ditulis sebelumnya untuk bagian-bagian penting dari aplikasi Anda, seperti pengontrol, modul, dan middleware yang berkontribusi pada pengalaman pengembang yang lebih baik.
  • Nest.js memiliki dukungan bawaan untuk layanan mikro. Nest.js menawarkan berbagai pengangkut untuk bertukar pesan di antara berbagai layanan mikro.
  • Nest.js mendukung integrasi dengan basis data SQL atau NoSQL apa pun.
  • Ini menyediakan integrasi dengan pustaka pengujian populer seperti Supertest dan Jest. Hal ini membuat penulisan unit test, integration test, dan end-to-end test menjadi lebih mudah.
  • Nest.js menawarkan dokumentasi yang komprehensif dan terorganisir, lengkap dengan contoh-contoh kode.

Kekurangan Menggunakan Nest.js

Di bawah ini adalah beberapa kekurangan menggunakan Nest.js:

  • Pola desain aplikasi Nest.js mungkin tidak sesuai dengan preferensi atau persyaratan proyek setiap orang.
  • Nest.js mengabstraksikan kompleksitas berbagai proses dan cara kerja internalnya. Abstraksi ini memungkinkan pengembang untuk berkonsentrasi pada logika aplikasi inti tanpa mengkhawatirkan detail yang rumit. Namun, tingkat abstraksi ini dapat menimbulkan rasa ketergantungan, karena pengembang memiliki visibilitas yang terbatas ke dalam detail implementasi tertentu.
  • Nest.js hadir dengan banyak fitur dan kemampuan. Ada potensi risiko bagi pengembang untuk merekayasa solusi secara berlebihan dan berdampak pada jadwal proyek.
  • Nest.js memiliki kurva pembelajaran yang lebih curam karena arsitekturnya yang kompleks dan penggunaan TypeScript di luar kotak,

Apakah akan menggunakan Nest.js untuk proyek Anda pada akhirnya bergantung pada persyaratan proyek, keahlian tim, dan preferensi pribadi.

Pertimbangkan manfaat Nest.js, fitur-fiturnya, kekurangannya, dan skala proyek Anda sebelum mengambil keputusan.

Opsi Penerapan Nest.js

Ketika menerapkan aplikasi Nest.js, Anda memiliki berbagai pilihan, termasuk Infrastructure as a Service (IaaS) dan Container as a Service (CaaS). Mari kita bahas kedua pendekatan ini.

Infrastruktur sebagai Layanan

Infrastruktur sebagai layanan (IaaS) adalah bentuk komputasi awan yang menyediakan infrastruktur server melalui Internet. Infrastruktur ini mencakup penyimpanan, jaringan, dan sumber daya komputasi yang tersedia sesuai permintaan, sehingga Anda dapat meningkatkan skala infrastruktur sesuai kebutuhan.

Salah satu manfaat utama IaaS adalah tingkat kontrol yang ditawarkannya. Ketika menerapkan aplikasi Anda, Anda memiliki kebebasan untuk mengonfigurasi mesin virtual (komputasi), mengelola jaringan, dan memastikan skala dan ketersediaan aplikasi Anda. Fleksibilitas ini memungkinkan Anda untuk menyesuaikan infrastruktur agar sesuai dengan kebutuhan aplikasi Anda.

Kelemahan dari memiliki banyak kontrol ini adalah tim Anda harus mengelola semuanya. Hal ini bisa jadi mahal.

Beberapa penyedia IaaS yang populer termasuk:

  • Microsoft Azure
  • Amazon Web Services (AWS)
  • Google Cloud Platform (GCP)

Kontainer sebagai Layanan

Container as a Service (CaaS ) adalah layanan cloud untuk mengelola kontainer. Layanan ini menyediakan tingkat abstraksi yang lebih tinggi atas sumber daya komputasi, jaringan, dan penyimpanan dibandingkan dengan IaaS.

Dengan CaaS, Anda mengemas kode aplikasi Nest.js Anda, ketergantungan, runtime, dan konfigurasi yang diperlukan untuk menjalankan aplikasi dalam sebuah kontainer.

Kontainer ini dibuat menggunakan alat bantu kontainerisasi seperti Docker. Setelah kontainer siap, Anda dapat men-deploy-nya ke penyedia CaaS. Penyedia CaaS akan mengelola dan memantau aplikasi yang diterapkan atas nama Anda.

Karena kontainer terisolasi, kontainer ini dapat digunakan di berbagai lingkungan tanpa masalah kompatibilitas. Selain itu, karena lingkungan eksekusi untuk Nest.js Anda distandarisasi, aplikasi Anda berperilaku secara konsisten di berbagai lingkungan, apa pun infrastruktur yang mendasarinya.

Tingkat abstraksi yang tinggi menghilangkan kebutuhan pengembang untuk menangani detail infrastruktur tingkat rendah, sehingga mereka dapat fokus pada logika aplikasi. Hal ini meningkatkan produktivitas dan memungkinkan iterasi yang lebih cepat.

Beberapa penyedia CaaS yang populer termasuk:

  • Back4app Containers
  • Amazon Elastic Container Service (ECS)
  • Google Kubernetes Engine (GKE)

Cara Menerapkan Aplikasi Nest.js ke Kontainer Back4app

Prasyarat

Untuk mengikuti tutorial ini, pastikan Anda memiliki yang berikut ini:

  • Node.js (versi >= 16) terinstal pada sistem operasi Anda.
  • Akun GitHub dengan Git yang telah dikonfigurasi pada sistem operasi Anda.
  • Docker telah terinstal pada mesin Anda. Anda dapat menginstal desktop Docker dari situs resmi Docker.
  • Pengetahuan tentang Nest.js.

Gambaran Umum Wadah Back4app

Back4app Containers adalah penyedia CaaS yang menangani proses penerapan untuk Anda. Ini mengelola infrastruktur server, menghilangkan kebutuhan untuk konfigurasi manual.

Back4app terintegrasi dengan GitHub dan memungkinkan Anda untuk menambahkan repositori dockerized ke aplikasi Anda. Integrasi ini membuat pembaruan aplikasi Anda menjadi lebih mudah.

Dengan fitur penyebaran otomatis, Back4app mendengarkan secara real-time ke repositori Anda dan menyebarkan ulang aplikasi setiap kali Anda menggabungkan komitmen ke cabang yang digunakan.

Anda juga bisa memantau penerapan Anda dari dasbor dan mengatasi masalah apa pun yang mungkin timbul.

Pengenalan Proyek

Dalam panduan ini, kita akan memandu proses men-deploy aplikasi Nest.js ke Back4app. Untuk memulai, kita akan membuat aplikasi Nest.js dasar yang akan kita dockerize dan kemudian kita dorong ke GitHub. Terakhir, kita akan men-deploy aplikasi ke kontainer Back4app.

Membuat Aplikasi Nest.js

Ikuti langkah-langkah di bawah ini untuk membuat aplikasi Nest.js:

  • Jalankan perintah di bawah ini di terminal Anda untuk menginstal CLI Nest.js secara global.
npm install -g @nestjs/cli
  • Jalankan perintah berikut untuk menghasilkan aplikasi Nest.js baru.
nest new project-name

Jangan ragu untuk mengganti “project-name” dengan nama aplikasi Anda. Tutorial ini menggunakan nestjs-deploy-back4app.

nest new  nestjs-deploy-back4app

Perintah ini akan membuat semua file dan folder yang diperlukan untuk memulai.

  • Arahkan ke direktori proyek yang telah dibuat dan jalankan perintah berikut untuk meluncurkan server pengembangan.
npm run start:dev

Ini akan mengawasi setiap perubahan pada kode Anda dan secara otomatis memulai ulang server ketika Anda menyimpan file.

Mendokumentasi Aplikasi Nest.js

Untuk men-deploy aplikasi Nest.js ke kontainer Back4app, Anda perlu melakukan dockerisasi aplikasi menggunakan Docker.

Mendokumentasi aplikasi berarti membuat citra kontainer untuk sebuah aplikasi. Citra kontainer ini merupakan paket perangkat lunak yang terisolasi dan dapat dieksekusi yang mencakup semua yang diperlukan untuk menjalankan aplikasi.

Untuk membuat citra kontainer, Anda perlu menambahkan Dockerfile ke proyek Anda.

Dockerfile adalah berkas teks yang menyediakan instruksi tentang cara membangun citra Docker. File ini menentukan citra dasar tempat Anda akan membangun citra.

Ini juga berisi instruksi untuk mengatur direktori kerja, menginstal dependensi, dan mendefinisikan perintah untuk menjalankan aplikasi.

Ikuti petunjuk di bawah ini untuk mendokumentasikan proyek Nest.js:

  • Pastikan Anda telah menginstal Docker pada mesin Anda. Ikuti panduan instalasi Docker resmi untuk menginstal Docker jika Anda belum melakukannya.
  • Navigasikan ke root direktori proyek Nest.js Anda dan buat berkas bernama Dockerfile.
touch Dockerfile
  • Dengan editor kode pilihan Anda, buka Dockerfile dan tentukan citra dasar. Ini adalah citra yang akan Anda gunakan untuk membangun citra produksi. Tutorial ini menggunakan citra Node 20. Citra ini sudah terinstal Node dan npm.
FROM node:18-alpine
  • Selanjutnya, buat direktori kerja di dalam gambar. Di sinilah kode aplikasi Anda akan disimpan.
 WORKDIR /usr/src/app
  • Salin berkas package.json dan package-lock.json ke dalam kontainer. Kemudian jalankan perintah npm install untuk menginstal dependensi proyek.
# A wildcard ensures package.json AND package-lock.json are copied
COPY package*.json ./

# Install project dependencies
RUN npm install
  • Salin sisa kode aplikasi Anda ke dalam kontainer.
COPY ..
  • Jalankan perintah build untuk memaketkan aplikasi Anda. Perintah ini mengkompilasi kode TypeScript ke JavaScript dan menyimpannya dalam folder dist.
RUN npm run build
  • Ekspos port 3000. Ini menentukan port mana yang harus digunakan aplikasi lain untuk berkomunikasi dengan aplikasi dalam kontainer ini.
EXPOSE 3000/tcp
  • Jalankan aplikasi Anda. Di sini, kita akan menggunakan node dist/main.js. Folder dist berisi kode yang telah dikompilasi, sedangkan main.js adalah titik masuk aplikasi.
CMD [ "node", "dist/main.js" ]

Secara keseluruhan, Dockerfile Anda akan terlihat seperti ini:

FROM node:20-alpine

WORKDIR /usr/src/app

COPY package*.json  ./

RUN npm ci

COPY . .

RUN npm run build

EXPOSE 3000/tcp

CMD [ "node", "dist/main.js" ]

Tambahkan file .dockerignore

File .dockerignore berfungsi seperti file .gitignore. File ini menentukan berkas mana yang harus diabaikan oleh Docker. Ini mencegah Anda menambahkan berkas yang besar dan tidak perlu atau data sensitif ke citra.

Untuk membuatnya, tambahkan berkas baru bernama .dockerignore di dasar folder proyek Nest.js Anda dan tambahkan yang berikut ini.

.git
.gitignore
.env
README.md
Dockerfile
node_modules/
.github
.vscode
npm-debug.log
npm-debug.log.*

Sekarang, modul simpul, berkas penurunan harga, variabel env, dan log debug Anda tidak akan disalin ke citra Docker.

Membangun Citra Docker Secara Lokal

Jalankan perintah di bawah ini pada terminal Anda untuk memastikan Dockerfile berfungsi.

docker build -t nestjs-back4app .

Bendera -t memungkinkan Anda menandai gambar Anda dengan sebuah nama. Dalam kasus ini, nestjs-back4app.

Jika Anda menjalankan citra docker pada terminal, Anda akan melihat citra yang dibuat.

REPOSITORY        TAG       IMAGE ID       CREATED          SIZE
nestjs-back4app   latest    afcba89613fc   39 seconds ago   333MB

Untuk menjalankan aplikasi secara lokal, gunakan perintah berikut.

docker run -p 49160:3000 -d nestjs-back4app

Ini akan mengalihkan port 49160 ke port 3000 yang telah kita tentukan di dalam Dockerfile. Jika Anda mengunjungi localhost:49160, Anda seharusnya dapat mengakses halaman beranda aplikasi Anda.

Menerapkan Aplikasi Nest.js ke Kontainer Back4app

Setelah Anda memastikan Dockerfile berfungsi, Anda sekarang siap untuk men-deploy aplikasi ke Back4app.

Mendorong Aplikasi ke GitHub

Back4app mengakses aplikasi Anda melalui GitHub. Buat repositori baru yang berisi aplikasi Nest.js dengan mengikuti langkah-langkah di bawah ini:

  • Kunjungi GitHub dan masuk ke akun Anda.
  • Setelah Anda masuk, klik ikon “+” di sudut kanan atas halaman dan pilih “Repositori baru” dari menu tarik-turun.
  • Pada halaman “Buat repositori baru”, beri nama repositori Anda. Kemudian, klik “Buat nama repositori”. Catat URL repositori pada halaman berikutnya.

Kembali ke folder proyek Anda di mesin lokal, jalankan perintah berikut untuk mendorong kode Anda ke repositori yang baru saja Anda buat.

git remote add origin <https://github.com/remigathoni/nestjs-deploy-back4app.git>
git branch -M main
git push -u origin main

Setelah menjalankan perintah-perintah ini, file aplikasi Anda akan ditambahkan ke repositori GitHub.

Menerapkan Aplikasi Nest.js Anda

Anda sekarang dapat menerapkan aplikasi Anda ke Back4app dengan mengikuti langkah-langkah di bawah ini:

Daftar akun di Back4App jika Anda belum masuk ke akun Anda. Anda akan diarahkan ke dasbor.

Di dasbor, klik Bangun aplikasi baru.

Menyebarkan Nest.js ke Back4app


Back4app menawarkan dua opsi untuk membangun aplikasi. Anda dapat menggunakan Backend sebagai Layanan (BaaS) atau Container sebagai Layanan (CaaS).

BaaS menangani seluruh backend untuk Anda, sedangkan CaaS memungkinkan Anda menggunakan aplikasi dockerized. Kami hanya ingin menggunakan aplikasi Nest.js yang didokumentasi, jadi pilihlah Containers as a Service.

Tangkapan layar yang menunjukkan cara membuat Back4app. Baik Backend sebagai aplikasi layanan atau kontainer sebagai aplikasi layanan

Back4app akan meminta Anda untuk menghubungkan akun Anda ke GitHub dan memberikan izin untuk mengakses repositori Anda.

Tangkapan layar yang menunjukkan cara menginstal dan mengotorisasi kontainer Back4app

Pilih repositori Nest.js.

Tangkapan layar yang menunjukkan cara memilih repositori GitHub untuk diunggah ke Back4app

Pada opsi penyebaran, tambahkan nama untuk aplikasi Anda. Anda juga bisa mengatur cabang default, direktori root, mengaktifkan atau menonaktifkan penerapan otomatis, dan mengatur variabel lingkungan. Di sini, kita hanya perlu mengatur nama.

Tangkapan layar yang menunjukkan cara mengonfigurasi penerapan awal aplikasi Nestjs ke Back4app

Klik tombol Buat Aplikasi untuk menggunakan aplikasi. Proses ini mungkin memerlukan waktu beberapa menit.

Pada dasarnya itu saja! Anda telah berhasil menerapkan aplikasi Nest.js ke Back4app secara gratis.

Mengoptimalkan Penerapan Menggunakan Multi-Tahap Build

Saat ini ukuran citra docker cukup besar yaitu 333 MB.

REPOSITORY        TAG       IMAGE ID       CREATED          SIZE
nestjs-back4app   latest    afcba89613fc   39 seconds ago   333MB

Untuk waktu penerapan yang lebih cepat, sangat penting untuk mengurangi ukuran gambar. Gambar yang lebih kecil juga akan mengurangi biaya penyimpanan cloud dan memungkinkan Anda untuk mengoptimalkan sumber daya. Selain itu, hal ini akan mengurangi kerentanan keamanan dengan mengurangi area permukaan serangan.

Untuk mengurangi ukuran gambar kita, kita bisa memanfaatkan pembuatan multi-tahap.

Build multi-tahap memungkinkan Anda memisahkan lingkungan build dari lingkungan runtime. Hal ini memungkinkan Anda menginstal dependensi dan mengkompilasi aplikasi dalam wadah terpisah. Kemudian, Anda dapat menyalin hanya file yang diperlukan ke gambar produksi akhir.

Untuk memulai, buka Dockerfile di aplikasi Nest.js dengan editor kode Anda dan hapus isinya.

Di dalam Dockerfile, kita akan memiliki dua tahap:

  • Tahap build bertanggung jawab untuk membangun aplikasi. Ini termasuk menginstal dependensi dan mengkompilasi TypeScript ke JavaScript
  • Halaman produksi yang membuat gambar runtime. Halaman ini berisi semua file yang diperlukan untuk menjalankan aplikasi.

Sebuah stage diberi nama dengan menambahkan AS *nama stage* pada instruksi FROM.

Menentukan Tahap Pembuatan

Ikuti petunjuk di bawah ini untuk menggunakan pembuatan multi-tahap:

  • Dalam DockerFile Anda, tentukan sebuah tahap dari citra dasar Node dan beri nama build.
FROM node:20-alpine as build

Perhatikan bahwa gambar dasar pegunungan simpul : -alpine jauh lebih ramping daripada gambar simpul:.

  • Tentukan direktori kerja.
WORKDIR /usr/src/app
  • Salin berkas package.json dan package-lock.json ke dalam kontainer.
# A wildcard ensures package.json AND package-lock.json are copied
COPY package*.json ./
  • Instal dependensi
RUN npm ci

Sebagai pengganti npm install, kita menggunakan npm ci. Kedua perintah ini sama, tetapi npm ci memastikan instalasi yang bersih dari dependensi setiap kali dijalankan.

  • Salin kode aplikasi ke tahap build.
COPY . .
  • Bangun aplikasi dengan menjalankan perintah npm build.
npm run build

Menentukan Tahap Produksi

Setelah Anda membuat aplikasi, tentukan tahap produksi.

  • Tambahkan gambar dasar Node.js dan beri nama produksi.
FROM node:20-alpine AS build
  • Tentukan direktori kerja seperti yang Anda lakukan pada tahap build.
WORKDIR /usr/src/app
  • Gunakan label from=build untuk menyalin folder dist dan modul simpul dari citra build ke citra produksi saat ini.
COPY  --from=build usr/src/app/dist ./dist
COPY  --from=build usr/src/app/node_modules ./node_modules
  • Ekspos port 3000
EXPOSE 3000/tcp 
  • Mulai aplikasi menggunakan perintah CMD.
CMD ["node", "dist/main.js"]

Secara keseluruhan, Dockerfile Anda akan terlihat seperti ini:

# Build
FROM node:20-alpine AS build
WORKDIR /usr/src/app
COPY package*.json  ./
RUN npm ci
COPY . .
RUN npm run build && npm prune --production

# Production
FROM node:20-alpine AS production
WORKDIR /usr/src/app

COPY  --from=build usr/src/app/dist ./dist
COPY  --from=build usr/src/app/node_modules ./node_modules

EXPOSE 3000/tcp
CMD [ "node", "dist/main.js" ]

Jika Anda membangun citra docker sekarang, Anda akan melihat ukurannya telah berkurang secara signifikan.

REPOSITORY             TAG       IMAGE ID       CREATED          SIZE
nestjs-back4app-opt    latest    d29aedae9bef   5 seconds ago   186MB

Dengan mengurangi ukurannya, Anda akan meningkatkan waktu penerapan dan juga mengurangi jumlah penyimpanan yang Anda butuhkan.

Kesimpulan

Nest.js adalah kerangka kerja Node.js yang memiliki arsitektur modular. Ini memungkinkan pengembang untuk membangun basis kode yang dapat diskalakan dan dipelihara.

Anda memiliki berbagai opsi untuk menerapkan aplikasi Nest.js termasuk platform Infrastructure as a Service (IaaS) dan Container as a Service (CaaS).

Salah satu penyedia CaaS terbaik adalah Back4app Containers. Kontainer Back4app mengelola dan memantau penerapan Anda, membuat transisi dari pengembangan ke produksi tidak merepotkan.

Dalam panduan ini, Anda telah mempelajari cara men-deploy aplikasi Nest.js ke kontainer Back4app menggunakan Docker. Selain itu, Anda juga telah menjelajahi manfaat dari mengoptimalkan penerapan menggunakan build multi-tahap.

Anda sekarang dapat membuat aplikasi Nest.js, melakukan dockerisasi, dan men-deploy-nya ke Back4app. Kode sumber tersedia di repositori GitHub ini dan untuk mempelajari lebih lanjut, kunjungi dokumentasi kontainer Back4app.

PERTANYAAN YANG SERING DIAJUKAN

Apa itu Nest.js?

Nest.js adalah framework Node.js dengan pendapat yang dibangun menggunakan TypeScript. Ini mengikuti pendekatan desain modular, yang memungkinkan pengembang untuk membuat basis kode yang terorganisir dengan baik, skalabel, dan mudah dipelihara.

Apa saja opsi deployment untuk Docker?

– IaaS (AWS, GCP, Azure)
– CaaS (Back4app Containers, AWS ECS, Google Kubernetes Engine (GKE))

Bagaimana cara mendistribusikan aplikasi Nest.js?

– Buat aplikasi Nest.js.
– Dockerize aplikasi Nest.js.
– Push aplikasi docker ke GitHub.
– Buat akun Back4app.
– Buat kontainer Back4app.
– Berikan akses Back4app ke GitHub Anda.
– Pilih repository Nest.js dan deploy aplikasi Anda


Leave a reply

Your email address will not be published.