Node.js adalah platform JavaScript sumber terbuka dan gratis yang dapat digunakan untuk menyajikan konten sisi server yang dinamis dan responsif. Itu dibangun di atas mesin JavaScript V8 Chrome dan mampu mengeksekusi kode JavaScript di luar browser web. Ini dapat dijalankan di beberapa sistem operasi termasuk, Linux, FreeBSD, Windows, dan macOS. Node.js juga berfungsi di server web lain seperti Apache dan Nginx.
Dalam tutorial ini, kita akan mempelajari cara menginstal dan mengonfigurasi Node.js untuk menangani permintaan backend dan mengonfigurasi Nginx untuk menangani permintaan front-end di Debian 10.
Prasyarat
- Server yang menjalankan Debian 10.
- Kata sandi root dikonfigurasi di server Anda.
Memulai
Pertama, disarankan untuk memperbarui sistem Anda ke versi terbaru. Anda dapat melakukannya dengan perintah berikut:
apt-get update -y
apt-get upgrade -y
Setelah server Anda diperbarui, mulai ulang untuk menerapkan perubahan.
Instal Node.js
Secara default, versi terbaru Node.js tidak tersedia di repositori default Debian 10. Jadi, Anda perlu menginstalnya dari skrip.
Pertama, instal curl dengan perintah berikut:
apt-get install curl -y
Selanjutnya, unduh dan instal skrip instalasi Node.js dengan perintah berikut:
curl -sL https://deb.nodesource.com/setup_12.x | bash -
Setelah instalasi selesai, Anda dapat menginstal Node.js dengan perintah berikut:
apt-get install nodejs -y
Setelah instalasi berhasil diselesaikan, Anda dapat memverifikasi versi Node.js dengan perintah berikut:
nodejs --version
Anda akan melihat versi Node.js di output berikut:
v12.16.1
Anda juga dapat memeriksa versi NPM dengan menjalankan perintah berikut:
npm --version
Anda akan melihat versi NPM di keluaran berikut:
6.13.4
Buat Aplikasi Node.js
Pertama, Anda perlu membuat direktori untuk aplikasi Anda. Anda dapat membuatnya dengan menjalankan perintah berikut:
mkdir nodeapp
Selanjutnya, ubah direktori menjadi nodeapp dan instal express dengan perintah berikut:
cd nodeapp
npm install express
Selanjutnya, buat contoh aplikasi Node.js dengan express menggunakan editor nano:
nano app.js
Tambahkan konten berikut:
var express = require('express'); var app = express(); app.get('/', function(req, res){ res.send("Nginx as Frontend Server for Node.js!"); }); app.listen(8000, '127.0.0.1');
Simpan dan tutup file setelah Anda selesai.
Selanjutnya, jalankan aplikasi Anda dengan perintah berikut:
node app.js
Selanjutnya, buka terminal lain dan verifikasi aplikasi dengan perintah berikut:
netstat -antup | grep 8000
Anda akan melihat bahwa aplikasi Node.js Anda mendengarkan pada port 8000:
tcp 0 0 127.0.0.1:8000 0.0.0.0:* LISTEN 26193/node
Anda juga dapat memverifikasi aplikasi menggunakan perintah curl seperti yang ditunjukkan di bawah ini:
curl http://127.0.0.1:8000
Jika semuanya baik-baik saja, Anda akan mendapatkan output berikut:
Nginx as Frontend Server for Node.js!
Instal dan Konfigurasi PM2
PM2 adalah manajer proses untuk mengelola aplikasi Node.js. ANDA dapat dengan mudah memulai, menghentikan, dan mengaktifkan aplikasi Node.js untuk memulai saat boot menggunakan PM2.
Pertama, instal PM2 versi terbaru menggunakan NPM seperti gambar di bawah ini:
npm install pm2 -g
Setelah terinstal, ubah direktori menjadi nodeapp dan aplikasi Anda dengan perintah berikut:
cd nodeapp
pm2 start app.js
Setelah aplikasi dimulai, Anda akan mendapatkan output berikut:
------------- __/\\\\\\\\\\\\\____/\\\\____________/\\\\____/\\\\\\\\\_____ _\/\\\/////////\\\_\/\\\\\\________/\\\\\\__/\\\///////\\\___ _\/\\\_______\/\\\_\/\\\//\\\____/\\\//\\\_\///______\//\\\__ _\/\\\\\\\\\\\\\/__\/\\\\///\\\/\\\/_\/\\\___________/\\\/___ _\/\\\/////////____\/\\\__\///\\\/___\/\\\________/\\\//_____ _\/\\\_____________\/\\\____\///_____\/\\\_____/\\\//________ _\/\\\_____________\/\\\_____________\/\\\___/\\\/___________ _\/\\\_____________\/\\\_____________\/\\\__/\\\\\\\\\\\\\\\_ _\///______________\///______________\///__\///////////////__ Runtime Edition PM2 is a Production Process Manager for Node.js applications with a built-in Load Balancer. Start and Daemonize any application: $ pm2 start app.js Load Balance 4 instances of api.js: $ pm2 start api.js -i 4 Monitor in production: $ pm2 monitor Make pm2 auto-boot at server restart: $ pm2 startup To go further checkout: http://pm2.io/ ------------- [PM2] Spawning PM2 daemon with pm2_home=/root/.pm2 [PM2] PM2 Successfully daemonized [PM2] Starting /root/nodeapp/app.js in fork_mode (1 instance) [PM2] Done. ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ? id ? name ? namespace ? version ? mode ? pid ? uptime ? ? ? status ? cpu ? mem ? user ? watching ? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ? 0 ? app ? default ? N/A ? fork ? 13202 ? 0s ? 0 ? online ? 0% ? 27.2mb ? root ? disabled ? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
Pada output di atas, Anda dapat melihat informasi yang sangat berguna seperti, PID aplikasi, waktu aktif, status, penggunaan CPU dan Memori.
Selanjutnya, jalankan perintah berikut untuk membuat dan mengonfigurasi skrip startup untuk aplikasi Node.js sehingga aplikasi Node.js Anda akan mulai otomatis saat boot.
pm2 startup
Anda akan mendapatkan output berikut:
[PM2] Init System found: systemd Platform systemd Template [Unit] Description=PM2 process manager Documentation=https://pm2.keymetrics.io/ After=network.target [Service] Type=forking User=root LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin Environment=PM2_HOME=/root/.pm2 PIDFile=/root/.pm2/pm2.pid Restart=on-failure ExecStart=/usr/lib/node_modules/pm2/bin/pm2 resurrect ExecReload=/usr/lib/node_modules/pm2/bin/pm2 reload all ExecStop=/usr/lib/node_modules/pm2/bin/pm2 kill [Install] WantedBy=multi-user.target Target path /etc/systemd/system/pm2-root.service Command list [ 'systemctl enable pm2-root' ] [PM2] Writing init configuration in /etc/systemd/system/pm2-root.service [PM2] Making script booting at startup... [PM2] [-] Executing: systemctl enable pm2-root... Created symlink /etc/systemd/system/multi-user.target.wants/pm2-root.service → /etc/systemd/system/pm2-root.service. [PM2] [v] Command successfully executed. +---------------------------------------+ [PM2] Freeze a process list on reboot via: $ pm2 save [PM2] Remove init script via: $ pm2 unstartup systemd
Selanjutnya, mulai layanan PM2 dengan perintah berikut:
systemctl start pm2-root
Selanjutnya, verifikasi status layanan PM2 dengan perintah berikut:
systemctl status pm2-root
Anda akan mendapatkan output berikut:
? pm2-root.service - PM2 process manager Loaded: loaded (/etc/systemd/system/pm2-root.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2020-03-26 06:04:28 UTC; 2s ago Docs: https://pm2.keymetrics.io/ Process: 13387 ExecStart=/usr/lib/node_modules/pm2/bin/pm2 resurrect (code=exited, status=0/SUCCESS) Main PID: 13191 (PM2 v4.2.3: God) Tasks: 0 (limit: 4915) CGroup: /system.slice/pm2-root.service ? 13191 PM2 v4.2.3: God Daemon (/root/.pm2) Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: [PM2] Restoring processes located in /root/.pm2/dump.pm2.bak Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: [PM2][ERROR] Failed to read dump file in /root/.pm2/dump.pm2.bak Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: [PM2][ERROR] No processes saved; DUMP file doesn't exist Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ? PM2+ activated | Instance Name: node.myserver.tld-109e | Dash: https://app.pm2.io/#/r/7p66twg Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ???????????????????????????????????????????????????????????????????????????????????????????????? Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ? id ? name ? namespace ? version ? mode ? pid ? uptime ? ? ? status ? cpu Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ???????????????????????????????????????????????????????????????????????????????????????????????? Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ? 0 ? app ? default ? N/A ? fork ? 13202 ? 8m ? 0 ? online ? 0% Mar 26 06:04:28 kolab.linuxbuz.com pm2[13387]: ???????????????????????????????????????????????????????????????????????????????????????????????? Mar 26 06:04:28 kolab.linuxbuz.com systemd[1]: Started PM2 process manager.
Konfigurasikan Nginx sebagai Proxy Terbalik untuk Node.js
Pada titik ini, aplikasi Node.js Anda sedang berjalan dan mendengarkan di localhost. Selanjutnya, Anda perlu mengonfigurasi Nginx sebagai server proxy front-end untuk aplikasi Node.js sehingga setiap pengguna dapat mengakses aplikasi Anda melalui internet.
Pertama, instal server web Nginx dengan perintah berikut:
apt-get install nginx -y
Setelah terinstal, buat file konfigurasi virtual host Nginx untuk aplikasi Node.js:
nano /etc/nginx/sites-enabled/myapp.conf
Tambahkan konten berikut:
server { listen 80; server_name node.myserver.tld; location / { proxy_pass http://127.0.0.1:8000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }
Simpan dan tutup file setelah Anda selesai. Kemudian, restart server Nginx untuk menerapkan perubahan:
systemctl restart nginx
Anda dapat memverifikasi status layanan Nginx dengan perintah berikut:
systemctl status nginx
Anda akan melihat output berikut:
? nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2020-03-25 12:42:49 UTC; 5min ago Docs: man:nginx(8) Process: 26180 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Process: 26182 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Main PID: 26183 (nginx) Tasks: 3 (limit: 2359) Memory: 5.5M CGroup: /system.slice/nginx.service ??26183 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; ??26184 nginx: worker process ??26185 nginx: worker process Mar 25 12:42:49 debian10 systemd[1]: Starting A high performance web server and a reverse proxy server... Mar 25 12:42:49 debian10 systemd[1]: Started A high performance web server and a reverse proxy server.
Setelah selesai, Anda dapat melanjutkan ke langkah berikutnya.
Mengakses Aplikasi Node.js Anda
Pada titik ini, Nginx dikonfigurasi untuk melayani aplikasi Node.js Anda.
Sekarang, buka browser web Anda dan ketik URL http://node.myserver.tld. Anda akan melihat aplikasi Node.js Anda di layar berikut:
Kesimpulan
Pada artikel di atas, Anda mempelajari cara mengatur aplikasi Node.js di Debian 10. Anda juga mempelajari cara menjalankan aplikasi Node.js sebagai daemon dan mengkonfigurasi Nginx sebagai proxy terbalik untuk melayani aplikasi. Saya harap Anda sekarang dapat dengan mudah meng-host aplikasi Node.js Anda di lingkungan produksi.