Bagaimana cara meng-host aplikasi Node.js?
Pada artikel ini, kita akan membahas tentang Node.js dan opsi-opsi penerapannya, khususnya IaaS, PaaS, dan CaaS. Kami akan menganalisis setiap opsi dan melihat beberapa vendor paling populer yang menawarkan layanan cloud ini.
Di bagian kedua artikel ini, kita akan mempelajari cara membuat, mendokumentasi, dan men-deploy aplikasi Node.js sederhana ke Back4app Container.
Contents
- 1 Apa itu Node.js?
- 2 Di mana meng-host aplikasi Node.js?
- 3 Bagaimana cara meng-host aplikasi Node.js?
- 4 Kesimpulan
- 5 PERTANYAAN YANG SERING DIAJUKAN
- 6 Apa itu Node.js?
- 7 Apa saja opsi penerapan Node.js?
- 8 Bagaimana cara menghosting aplikasi Node.js?
Apa itu Node.js?
Node.js adalah lingkungan server sumber terbuka lintas platform yang memungkinkan Anda menjalankan JavaScript di luar peramban web. Node.js memiliki arsitektur berbasis peristiwa asinkron dan berjalan pada Mesin JavaScript V8 Google. Kedua karakteristik ini membuatnya sangat berkinerja dan dapat diskalakan.
Sebelum Node.js, pengembang JavaScript hanya dapat bekerja pada kode frontend. Hal ini cukup merepotkan karena backend harus ditulis dalam bahasa pemrograman lain.
Selain itu, perusahaan-perusahaan perlu mempekerjakan insinyur frontend dan backend. Namun dengan dirilisnya Node.js pada tahun 2009, para pengembang JavaScript menjadi pengembang full-stack.
Node memiliki banyak sekali kasus penggunaan. Server runtime dapat digunakan untuk skrip sisi server, game web, membangun RESTful API, aplikasi waktu nyata, dan banyak lagi. Node digunakan oleh banyak perusahaan teknologi seperti PayPal, Uber, Netflix, dan LinkedIn.
Node banyak digunakan karena kecepatan, skalabilitas, ekosistem modul dan pustaka yang luas, kematangan, dan komunitas yang hebat.
Namun demikian, ia hadir dengan beberapa keterbatasan seperti penurunan kinerja untuk tugas-tugas yang kompleks, API yang tidak stabil, dan kurangnya sistem pendukung perpustakaan yang kuat.
Untuk mempelajari lebih lanjut tentang kelebihan dan kekurangan Node.js, lihatlah Bagaimana Cara Menerapkan Aplikasi Node.js? (Pendekatan BaaS)
Di mana meng-host aplikasi Node.js?
Aplikasi Node dapat di-host di berbagai layanan komputasi awan. Opsi yang paling populer untuk menerapkan aplikasi Node.js adalah:
- Infrastruktur sebagai Layanan
- Platform sebagai Layanan
- Kontainer sebagai Layanan
Perlu diingat bahwa tidak ada opsi penerapan terbaik untuk aplikasi Node. Pada akhirnya, pilihannya tergantung pada kebutuhan proyek Anda, anggaran, dan tingkat abstraksi yang diinginkan.
Mari kita lihat masing-masing model komputasi awan yang disebutkan.
IaaS (Infrastruktur sebagai Layanan)
Infrastructure as a Service (IaaS) adalah model komputasi awan di mana penyedia awan menawarkan sumber daya komputasi melalui internet.
Dengan menggunakan IaaS, pelanggan tidak perlu khawatir dengan server, virtualisasi, penyimpanan, dan jaringan. Vendor IaaS biasanya mengikuti model harga pay-as-you-go dan merupakan salah satu model layanan cloud yang lebih murah.
IaaS adalah opsi yang paling tidak abstrak, oleh karena itu sangat fleksibel dan dapat disesuaikan. Kekurangannya adalah pelanggan bertanggung jawab atas OS, aplikasi, dan data mereka. Opsi ini tidak cocok untuk pemula untuk meng-host aplikasi Node.js, karena membutuhkan pengetahuan administrasi sistem yang cukup.
Amazon Web Services (AWS)
Amazon Web Services (AWS) adalah platform komputasi awan sesuai permintaan yang disediakan oleh Amazon. AWS menawarkan berbagai macam layanan cloud, termasuk komputer virtual, penyimpanan objek, basis data, alat bantu ML/AI, jaringan, visi, dan banyak lagi.
Pada saat artikel ini ditulis, AWS merupakan platform komputasi awan yang paling populer dengan pangsa pasar sekitar 32%. Solusi IaaS mereka yang sedang tren adalah:
- Amazon EC2 (Elastic Compute Cloud) digunakan untuk menjalankan komputer virtual yang sangat mudah dikonfigurasi.
- Amazon S3 (Cloud Object Storage) menyediakan penyimpanan objek yang mudah digunakan dan dapat diskalakan.
- Amazon VPC (Virtual Private Cloud) memungkinkan pelanggan untuk membuat jaringan virtual yang terisolasi.
Untuk menerapkan aplikasi Node siap produksi ke AWS, kemungkinan besar Anda perlu menggabungkan solusi IaaS dan PaaS yang berbeda.
Google Cloud Platform
Google Cloud Platform (GCP) adalah platform komputasi awan populer lainnya yang cocok untuk menghosting Node.js. GCP merupakan platform yang matang dan stabil yang dirilis lebih dari sepuluh tahun yang lalu.
GCP menawarkan berbagai macam solusi IaaS, PaaS, CaaS, dan BaaS. Sebagian besar produk pengguna akhir Google seperti Gmail, Slides, dan Docs berjalan pada GCP.
Produk IaaS mereka yang paling populer adalah:
- Google GKE (Compute Engine) memungkinkan pelanggan untuk membuat, mengelola, dan menjalankan mesin virtual.
- Google GCS (Cloud Storage) adalah layanan terkelola untuk menyimpan data yang tidak terstruktur.
- Google Persistent Disk adalah penyimpanan blok berkinerja tinggi yang andal untuk instance VM.
Sama halnya dengan AWS, Anda perlu menggabungkan beberapa produk GCP untuk menerapkan aplikasi.
Microsoft Azure
Microsoft Azure atau hanya Azure adalah platform komputasi awan yang ditawarkan oleh Microsoft yang merupakan pilihan yang bagus untuk meng-host Node.js. Platform ini memiliki lebih dari 200 produk untuk komputasi, penyimpanan, AI, pembelajaran mesin, visi, Internet of Things, dan sebagainya. Menurut penelitian Appinventiv, platform ini memiliki pangsa pasar sebesar 22%.
Penawaran IaaS mereka yang populer adalah Azure Virtual Machines, Azure Storage, dan Azure Backup.
PaaS (Platform sebagai Layanan)
Platform as a Service (PaaS) adalah model komputasi aw an yang memungkinkan pengguna untuk mengembangkan, mengelola, dan mengirimkan aplikasi dalam lingkungan awan. Selain itu, vendor PaaS biasanya menawarkan berbagai macam alat bantu siap pakai untuk pengembangan, penyesuaian, dan pengujian aplikasi.
PaaS lebih mudah digunakan daripada IaaS dan tidak memerlukan banyak pengetahuan administrasi sistem. Dengan menggunakan PaaS, Anda juga dapat memanfaatkan database terkelola, pencadangan otomatis, dan penyeimbang beban, dan masih banyak lagi. Kelemahan PaaS termasuk risiko penguncian vendor, dan tingkat fleksibilitas dan kontrol yang lebih rendah dibandingkan dengan IaaS.
Heroku
Heroku merupakan PaaS paling populer di pasaran. Didirikan pada tahun 2007 dan merupakan salah satu solusi PaaS pertama. Mendukung berbagai bahasa pemrograman termasuk Java, Node.js, PHP, Go, Scala, dan Python. Platform ini sangat mudah digunakan, menyediakan kemampuan penskalaan yang hebat, dan memiliki sistem pengaya yang besar.
Hingga akhir tahun 2022, platform ini digunakan untuk menyediakan paket gratis untuk aplikasi web, bersama dengan PostgreSQL gratis, dan instance Redis. Sayangnya, mereka membatalkan paket gratis untuk melawan penipuan dan bot.
Kekurangan dari Heroku adalah harganya yang mahal dibandingkan dengan solusi lain di pasaran, ada risiko penguncian vendor, dan platform ini tidak memiliki dukungan regional yang baik (kecuali jika Anda adalah pengguna perusahaan).
Render
Render adalah cloud terpadu untuk membangun dan menjalankan semua aplikasi dan situs web Anda. Memiliki UI yang apik dan sangat mudah digunakan. Hal terbaik dari Render adalah mereka menyediakan hosting gratis untuk situs web statis, aplikasi web, dan bahkan instance PostgreSQL dan Render.
Kelemahan dari Render adalah platform ini relatif baru, aplikasi pada tingkat gratis membutuhkan waktu lama untuk berputar, dan dukungan regional yang buruk (hanya 4 wilayah).
CaaS (Kontainer sebagai Layanan)
Containers as a Service (CaaS) adalah model komputasi awan yang memungkinkan Anda membangun, menjalankan, menyebarkan, dan mengelola perangkat lunak dalam kontainer dengan mudah. Perangkat lunak biasanya dikontainerisasi menggunakan teknologi Docker. Pendekatan ini membutuhkan pengaturan awal, tetapi sangat mudah digunakan setelah itu.
Back4app Containers
Back4app Containers merupakan platform Containers as a Service (CaaS) yang memungkinkan Anda untuk dengan mudah menggunakan aplikasi yang terdokumentasi. Platform ini memiliki sistem CI/CD bawaan, integrasi GitHub yang hebat, dan merupakan pilihan yang bagus untuk hosting server Node.js.
Menerapkan aplikasi ke Back4app Containers semudah mengimpor repositori Anda dan mengklik sebuah tombol. Platform ini menawarkan tingkat gratis dan tingkat berbayar yang meningkat sesuai kebutuhan Anda.
Amazon Elastic Container Service (ECS)
Amazon Elastic Container Service (ECS) adalah layanan komprehensif untuk mengatur kontainer. Layanan ini menyederhanakan penerapan, pengelolaan, pengamatan, dan penskalaan aplikasi dalam kontainer Anda. Platform ini relatif murah dan cukup mudah digunakan jika Anda sudah terbiasa dengan produk AWS lainnya.
Google Kubernetes Engine (GKE)
Google Kubernetes Engine (GKE) adalah layanan Kubernetes yang canggih dan otomatis. Platform ini sangat skalabel dan memungkinkan Anda untuk mengakomodasi kebutuhan lalu lintas situs apa pun. Dua kelemahan terbesar dari GKE adalah tidak mudah digunakan dan relatif mahal.
Bagaimana cara meng-host aplikasi Node.js?
Pada bagian ini, kita akan membangun, mendokumentasi, dan men-deploy aplikasi Node.js ke Back4app Containers.
Pengenalan Proyek
Kita akan membuat API RESTful Node.js sederhana untuk mengambil statistik pengguna GitHub. API akan mengembalikan informasi GitHub pengguna bersama dengan jumlah pengikut, pengikut, dan bintang yang diterima.
API akan diimplementasikan menggunakan Express – sebuah kerangka kerja aplikasi web Node.js. Setelah kami mengujinya, kami akan mendokumentasikannya dan menerapkannya ke Back4app Containers.
Jika Anda hanya tertarik pada proses penerapan, silakan lewati dua bagian pertama.
Proyek Init
Untuk mengikuti tutorial ini, Anda harus menginstal Node.js. Jika Anda belum memilikinya, silakan unduh dari situs web Node.js.
Pertama, buat direktori baru dan arahkan ke sana:
$ mkdir express-github-stats && cd express-github-stats
Jika Anda sedang mengerjakan aplikasi Express yang kompleks, kemungkinan besar Anda ingin membuatnya melalui pembuat aplikasi Express. Alat ini menyiapkan semua yang diperlukan untuk membuat aplikasi Express tingkat lanjut, seperti templat, perutean, dan banyak lagi.
Selanjutnya, jalankan npm init
untuk membuat package.json untuk aplikasi:
$ npm init
Perintah ini akan meminta Anda untuk mengisi sejumlah pertanyaan tentang versi paket, deskripsi, dan sebagainya. Anda dapat mengisinya atau cukup tekan ENTER beberapa kali.
Karena kita ingin menggunakan Express, mari kita instal:
$ npm install express
Buat berkas baru bernama index.js di root proyek seperti ini:
// index.js
const express = require("express");
const app = express();
app.get("/", (req, res) => {
res.send("Back4app rocks!");
});
app.listen(3000, () => {
console.log("App listening on port 3000")
});
Skrip sederhana ini menginisialisasi aplikasi Express baru yang mendengarkan pada port 3000
. Selain itu, skrip ini juga mendefinisikan rute indeks(/)
yang mengembalikan pesan Back4app rocks!
Jika rute tidak ada, kesalahan 404
akan dikembalikan.
Untuk mengujinya, jalankan server:
$ node index.js
Kemudian buka browser web favorit Anda dan buka http://localhost:3000.
Cara yang lebih baik untuk menjalankan aplikasi Node.js saat pengembangan adalah dengan menggunakan Nodemon. Nodemon adalah sebuah alat yang secara otomatis memulai ulang aplikasi Node.js Anda ketika ada perubahan file yang terdeteksi.
Aplikasi Kode
Aplikasi web kita akan memiliki dua URL:
/
mengembalikan informasi API/
/ mengembalikan informasi dan statistik GitHub pengguna tertentu
Pertama, ubahlah titik akhir indeks seperti ini:
// index.js
// ...
app.get("/", (req, res) => {
return res.json({
name: "express-github-stats",
description: "simple github user stats fetcher",
version: "1.0.0",
});
});
Selanjutnya, tentukan titik akhir pengguna di bagian bawah index.js:
// index.js
// ...
app.get("/:username", async (req, res) => {
const username = req.params["username"];
return res.json({
username: username,
});
});
Titik akhir ini mengambil nama pengguna dari URL dan mengembalikannya dalam format JSON.
API GitHub
Untuk mengambil statistik pengguna GitHub, pertama-tama kita perlu melihat cara kerja API mereka. Jika Anda membuka halaman dan menggulir navigasi, Anda akan segera menemukan bagian Pengguna.
Mengambil detail pengguna semudah mengirim permintaan berikut:
$ curl -L https://api.github.com/users/<username>
# For example:
# curl -L https://api.github.com/users/duplxey
Untuk mengimplementasikan ini dalam kode kita, kita akan menggunakan Axios – klien HTTP berbasis janji untuk peramban dan Node.js.
Instal dengan menggunakan NPM:
$ npm install axios
Selanjutnya, tambahkan sebagai dependensi di bagian atas index.js:
const axios = require("axios");
Terakhir, modifikasi titik akhir pengguna seperti ini:
// index.js
// ...
app.get("/:username", async (req, res) => {
const username = req.params["username"];
try {
const user = await axios({
method: "get",
url: `https://api.github.com/users/${username}`,
});
const { login, name, location, followers, following } = user.data;
return res.json({
username: login,
name: name,
location: location,
followers: followers,
following: following,
});
} catch (e) {
console.error(e);
return res.status(400).json({
detail: "Oops, something went wrong. Check the console for more information.",
});
}
});
Kode ini menggunakan Axios untuk mengirim permintaan GET
ke API GitHub. Kemudian merestrukturisasi data yang diambil dan mengembalikannya dalam format JSON.
Pengujian
Untuk menguji apakah aplikasi berfungsi, pertama-tama restart server dan kemudian jalankan perintah berikut:
$ curl -L http://localhost:3000/duplxey/
Atau Anda dapat mengunjungi URL di browser web Anda.
Perintah di atas seharusnya memberikan respons yang serupa:
{
"username": "duplxey",
"name": "Nik Tomazic",
"location": "Slovenia, Europe",
"followers": 108,
"following": 11,
}
Aplikasi Dockerize
Pada bagian artikel ini, kita akan melakukan dockerisasi pada aplikasi Node.js.
.dockerignore
Proyek kita berisi beberapa berkas dan direktori yang tidak boleh disertakan dalam citra. Untuk mengecualikannya, kita dapat membuat berkas .dockerignore di dalam root proyek seperti ini:
.git/
.idea/
node_modules/
File .dockerignore ini mengecualikan direktori .git, .idea, dan node_modules. File .dockerignore bekerja mirip dengan file .gitignore.
Jika ada file dan direktori tambahan yang ingin Anda abaikan, ubahlah file tersebut.
Dockerfile
Dockerfile adalah berkas teks biasa yang memungkinkan kita mendefinisikan instruksi yang memberi tahu Docker bagaimana sebuah kontainer harus dibangun. File ini memungkinkan kita menentukan citra dasar, variabel lingkungan, perintah, dan lainnya.
Buat berkas Docker dengan konten berikut:
FROM node:18-alpine
# set the working directory
WORKDIR /app
# copy over the dependency files
COPY package.json ./
COPY package-lock.json ./
RUN npm install --production
ENV NODE_ENV="production"
# copy over the project
COPY . .
EXPOSE 3000
CMD ["node", "index.js"]
Dockerfile ini menggunakan node:18-alpine
sebagai citra dasar, mengatur direktori kerja, menyalin package.json, menginstal dependensi, dan membangun proyek. Terakhir, memulai server Node.js dan membuka porta 3000
.
Untuk informasi lebih lanjut tentang mendokumentasikan aplikasi Node.js, lihat dokumen resmi Back4app.
Pengujian
Langkah selanjutnya akan mengharuskan Anda untuk menginstal Docker.
Pertama, buat dan tandai gambar:
$ docker build --tag express-github-stats:1.0 .
Buat daftar gambar dan periksa apakah Anda dapat melihat gambar baru bernama express-github-stats
:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
express-github-stats 1.0 5fcb7e4a87a1 2 minutes ago 182MB
Selanjutnya, gunakan gambar untuk memulai wadah baru:
$ docker run -it -p 3000:3000 -d express-github-stats:1.0
Ikhtisar argumen:
- -menjalankan kontainer dalam mode interaktif
-p 3000:3000
memetakan port3000
pada host ke port3000
di kontainer-d
menjalankan kontainer dalam mode terpisah (sehingga tidak menempati terminal)
Terakhir, periksa wadah yang sedang berjalan:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED PORTS
60cfegdfe84d express-github-stats:1.0 "entrypoint.sā¦" 4s ago 3000->3000/tcp
Jika Anda membuka http://localhost:3000/ di browser, Anda akan melihat aplikasi web.
Dorong ke GitHub
Untuk melakukan langkah-langkah berikut, Anda memerlukan akun GitHub dan Git yang sudah terinstal.
Silakan masuk ke akun GitHub Anda. Setelah Anda masuk, gunakan “tombol lainnya” untuk memulai proses pembuatan repositori.
Pilih nama yang sesuai, biarkan yang lainnya sebagai default, dan klik “Buat repositori”.
Selanjutnya, catat URL jarak jauh yang dihasilkan:
Mari kita kembali ke proyek kita dan mendorong kode.
Pertama, buka terminal dan inisialisasi repositori Git lokal:
$ git init
Selanjutnya, tambahkan remote, VCS semua file, dan buat komit baru:
$ git remote add origin <your_remote_url>
$ git add . && git commit -m "init"
Pastikan untuk mengganti dengan URL jarak jauh GitHub Anda.
Terakhir, dorong kode ke cloud:
$ git push origin master
Jika Anda membuka repositori GitHub di browser lagi, Anda seharusnya dapat melihat kode sumbernya.
Menyebarkan Aplikasi
Untuk menerapkan aplikasi ke Back4app Containers, Anda memerlukan akun Back4app.
Saat Anda masuk ke akun Back4app, Anda akan diarahkan ke dasbor aplikasi Anda. Klik pada tombol “Buat aplikasi baru” untuk menginisialisasi proses pembuatan aplikasi.
Back4app menyediakan solusi BaaS dan CaaS. Karena kami menggunakan kontainer, pilih “CaaS”:
Selanjutnya, lanjutkan dan tautkan akun GitHub Anda dengan Back4app (jika Anda belum melakukannya). Kemudian impor repositori yang telah kita buat sebelumnya.
Back4app Containers memungkinkan konfigurasi tingkat lanjut. Kami sedang membangun aplikasi sederhana sehingga kami hanya perlu memberikan nama aplikasi. Untuk menerapkan aplikasi, klik “Deploy”.
Tunggu sekitar 5 menit hingga aplikasi Anda diterapkan dan voila! Setelah aplikasi Anda siap, statusnya akan berubah menjadi “Siap”. Dengan mengklik tautan di sisi kiri layar, aplikasi akan membuka peramban Anda.
Kesimpulan
Di sepanjang artikel ini, kita telah belajar tentang Node.js dan melihat berbagai opsi penerapan Node.js. Sekarang Anda seharusnya sudah dapat menjelaskan perbedaan antara IaaS, PaaS, dan CaaS. Selain itu, Anda juga telah mempelajari cara men-deploy aplikasi Node.js sederhana ke Back4app Containers.
Kode sumber dapat diakses di repositori GitHub.
PERTANYAAN YANG SERING DIAJUKAN
Apa itu Node.js?
Node.js adalah lingkungan server open-source lintas platform yang memungkinkan Anda menjalankan JavaScript di luar browser web. Ini memiliki arsitektur berbasis peristiwa yang asinkron dan berjalan di atas Mesin JavaScript V8 milik Google.
Apa saja opsi penerapan Node.js?
Aplikasi Node dapat diterapkan ke beberapa platform. Umumnya, kita dapat membaginya menjadi solusi IaaS (AWS, GCP, Azure), PaaS (Heroku, DigitalOcean App Platform, Render), dan CaaS (Back4app Containers, ECS).
Bagaimana cara menghosting aplikasi Node.js?
1. Kodekan aplikasinya.
2. Dockerize aplikasinya.
3. Bangun dan uji image secara lokal.
4. Dorong kode ke repositori GitHub.
5. Daftar ke Back4app Containers dan impor repositorinya.
6. Konfigurasikan lingkungan dan lakukan penyebaran.