cara instal node.js featured image

Cara Instal Node.js dan Deploy App di CentOS 8

Jika kamu memilih Node.js untuk kebutuhan aplikasi kamu, maka setidaknya kamu harus menguasai dasar bahasa pemrograman Python dan Javascript, karena Node.js dibangun menggunakan JavaScript. Di artikel ini kamu akan mempelajari bagaimana cara instal Node.js dan deploy app di CentOS 8.

Node.js

cara instal node.js logo

Node.js adalah suatu aplikasi website yang berjalan dengan menggunakan bahasa JavaScript, alias javascript runtime. Node.js bisa digunakan untuk membangun berbagai tipe aplikasi seperti aplikasi command line, aplikasi web, aplikasi perpesanan real-time, server API REST, dan sebagainya. Namun, developer seringkali menggunakan Node.js untuk membangun jaringan program server website seperti PHP atau Java.

Persiapan

Ada beberapa persiapan yang perlu kamu siapkan untuk melakukan instalasi Node.js di Ubuntu 18.04

  1. Pastikan kamu sudah memiliki VPS (cloud server) dan domain yang aktif. Jika belum kamu bisa order cloud VPS murah Indonesia and domain murah terlebih dulu.
  2. Memiliki akses root ke VPS (cloud server).

Cara Instal Node.js dan Deploy App di CentOS 8

Ada enam langkah yang perlu kamu lakukan untuk menginstal Node.js dan deploy app di CentOS 8, yaitu:

  • Update Server
  • Install Firewall
  • Install Node.js
  • Allow Port Node.js
  • Install PM2
  • Setup Nginx Reverse Proxy Server
  • Testing

Berikut ini adalah penjelasan lengkap cara instal Node.js di atas dan deploy app di CentOS 8.

  • Update Server

Login sebagai root ke server, kemudian update server dan reboot.

 

$ dnf update -y

$ reboot

 

Instal beberapa package yang dibutuhkan.

 

$ dnf install perl nano git -y

 

  • Install Firewall

Untuk firewall di artikel ini, kami menggunakan firewalld dalam perintah berikut.

 

$ dnf install firewalld -y

$ systemctl unmask firewalld

$ systemctl enable firewalld

$ systemctl start firewalld

 

Kemudian cek status firewalld.

 

$ systemctl status firewalld
  • firewalld.service – firewalld – dynamic firewall daemon

   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)

   Active: active (running) since since Wed 2020-09-23 17:34:28 UTC; 8s ag

     Docs: man:firewalld(1)

 Main PID: 335668 (firewalld)

    Tasks: 2 (limit: 6035)

   Memory: 23.6M

   CGroup: /system.slice/firewalld.service

           └─335668 /usr/libexec/platform-python -s /usr/sbin/firewalld –nofork –nopid

  • Install Node.js

Instalasi Node.js pada CentOS 8 akan sedikit berbeda karena bisa melalui AppStream dari Amazon. Node.js sudah tersedia secara default pada AppStream Software Repository, ada beberapa versi yang tersedia yang bisa kamu pilih.

$ dnf module list nodejs

Name      Stream    Profiles                                Summary

nodejs    10 [d]    common [d], development, minimal, s2i   Javascript runtime

nodejs    12        common [d], development, minimal, s2i   Javascript runtime

 

Ada 2 streams yang tersedia, yaitu 10 dan 12. [d] pada 10 mengindikasikan bahwa versi 10 adalah default stream, jika kamu ingin memilih versi 12 untuk diinstal, maka kamu perlu switch module stream.

$ dnf module enable nodejs:12

 

Kemudian instal package-nya dengan dnf:

$ dnf install nodejs -y

 

Gunakan perintah untuk mengecek apakah Node.js berhasil diinstal atau tidak. Perintah ini juga bisa digunakan untuk melakukan verifikasi ulang versi Node.js yang diinstal.

$ node --version

v12.18.3

  • Allow Port Node.js

Agar dapat menjalankan Node.js, kamu memerlukan port spesifik, yaitu Port 3000. Pembukaan port dapat dilakukan pada firewall yang kamu gunakan, di artikel ini contoh yang digunakan adalah Firewalld, maka perintahnya akan seperti:

 

$ firewall-cmd --zone=public --permanent --add-port=3000/tcp

$ firewall-cmd --reload

  • Create Node.js Application

Setelah selesai melakukan cara instal Node.js, sekarang kita men-deploy app-nya di CentOS 8. Contoh aplikasi yang akan dibuat berikut ini akan dinamai “Test”. Nantinya, “Test” akan merespon permintaan dari semua HTTP requests. Ini adalah contoh aplikasi, jadi kamu bisa menggantinya dengan project app Node.js yang milikmu atau yang akan kamu buat nantinya. 

 

Buat directory apps/:

$ cd/ home/

$ mkdir apps


Buat file test.js 

$ cd apps/

$ nano test.js

 

Kemudian masukkan script di bawah ini.

 

var http = require('http');

http.createServer(function (req, res) {

  res.writeHead(200, {'Content-Type': 'text/plain'});

  res.end('Test\n');

}).listen(3000, 'IP-Server');

console.log('Server running at http://IP-Server:3000/');

 

Ubah teks warna merah menjadi dengan IP-Server kamu.

Jika sudah, save lalu exit.

 

Aplikasi di atas hanya akan melakukan listen dari alamat yang spesifik, yaitu IP-Server dan Port 3000. Ketika diakses, nantinya akan muncul output ‘Test!” dengan response 200 HTTP code, karena listening-nya hanya di IP-Server.

 

Gunakan cara berikut untuk mengetes aplikasi:

$ node test.js

 

Maka output-nya:

Server running at http://IP-Server:3000/

 

Kamu bisa akses dengan menggunakan perintah cURL:

$ curl http://IP-Server:3000/

 

Maka output-nya:

Test!

  • Install PM2

PM2 adalah Process Manager untuk aplikasi Node.js. PM2 membuatnya menjadi mungkin untuk daemonize applications agar bisa tetap berjalan di background.

 

$ npm install [email protected] -g

 

Option -g akan memberitahukan npm untuk menginstal modul secara global. Jika sudah selesai instalasi, gunakan pm2 start untuk menjalankan aplikasimu di background.

 

$ pm2 start test.js

 

[PM2] Spawning PM2 daemon with pm2_home=/root/.pm2

[PM2] PM2 Successfully daemonized

[PM2] Starting //dwblog-ecdf.kxcdn.com/home/apps/test.js in fork_mode (1 instance)

[PM2] Done.

┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐

│ id │ name               │ mode     │ ↺    │ status    │ cpu      │ memory   │

├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤

│ 0  │ test               │ fork     │ 0    │ online    │ 0%       │ 28.1mb   │

└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘

Seperti yang bisa kamu lihat, PM2 secara otomatis melakukan assign app name (sesuai dengan nama file, namun tanpa ekstensi .js).

Aplikasi yang berjalan pada PM2 akan di-restart secara otomatis jika aplikasinya crash atau killed. Namun kamu bisa mengambil langkah tambahan untuk menjalankan aplikasi pada system startup menggunakan subcommand. Subcommand ini menghasilkan dan mengonfigurasi startup script untuk menjalankan PM2 dan prosesnya dikelola oleh boot server.

 

$ pm2 startup systemd




[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

 

Sekarang, kamu sudah membuat systemd unit file yang menjalankan pm2 untuk user on boot.

 

Start service dengan systemctl:

$ systemctl start pm2-root

 

Kamu juga bisa melihat statusnya dengan perintah systemctl:

$ systemctl status pm2-root

 

Mengingat kita menggunakan user root, maka kamu bisa mengubah atau membuat file aplikasi kamu dengan menaruh di directory sesuai kebutuhan.

Perintah untuk menghentikan aplikasi yang berjalan:

$ pm2 stop namafile

 

Perintah untuk restart aplikasi yang berjalan:

$ pm2 restart namafile

 

Perintah untuk melihat daftar aplikasi yang saat ini di manage oleh PM2:

$ pm2 list

 

Perintah untuk melihat proses monitor yang berjalan pada aplikasi:

$ pm2 monit

 

  • Setup Nginx Reverse Proxy Server

Aplikasi yang saat ini berjalan hanya bisa di-listen pada localhost saja. Kamu bisa mengubahnya menjadi bisa diakses dengan IP Server, namun sangat berbahaya. Solusinya, kamu perlu Nginx Web Server as a Reverse Proxy, agar dapat diakses oleh public atau user lain.

Install Nginx

$ dnf install nginx -y

Mulai dan enable on-boot pada Nginx:

$ systemctl enable nginx
$ systemctl start nginx

 

Ubah ownership pada directory apps kamu:

$ cd /home/

$ chown -R nginx:nginx apps/

 

Ubah Nginx configuration pada ‘/etc/nginx/nginx.conf’

Ubah nama domain sesuai dengan nama domain yang kamu gunakan.

 

$ nano /etc/nginx/nginx.conf

 

Lalu cari kata “server_name _;” dan ubah dengan:

server_name nodejscentos8.dewiweb.net;

 

Cari kata “root” lalu ubah dengan:

root/home/apps;

 

Cari kata “location / {“ tambahkan script di bawah ini, sehingga menjadi:

    location / {

        proxy_pass http://IP-Server:3000;

        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;

    }


Konfigurasi di atas adalah untuk menanggapi requests, dengan asumsi server tersedia pada domain nodejscentos8.dewiweb.net, lalu saat mengakses domain tersebut akan mengirimkan permintaan pada aplikasi test.js dan dapat di-listen pada Port 3000 tanpa harus memasukkan manual port tersebut pada browser.

Mengingat konfigurasi hanya relay traffic, kita perlu memberitahukan ke SELinux bahwa httpd server dalam Nginx ini dapat menggunakan jaringan untuk melakukan relay traffic dalam konfigurasi reverse proxy, di sini kami menggunakan -P flag untuk memastikan bahwa perubahan bersifat permanen.

Jika dilakukan tanpa menggunakan -P flag, maka akan mengakibatkan httpd_can_network_relay dan httpd_can_network_connect kembali ke status default dan non aktif, saat dilakukan reboot pada server.

 

$ sudo setsebool -P httpd_can_network_relay on

$ sudo setsebool -P httpd_can_network_connect on

 

  • Testing

Langkah terakhir adalah melakukan akses pada domain yang kamu setting.

cara instal node.js testing success

Jika cara instal Node.js hingga deploy app di CentOS 8 dilakukan dengan tepat, seharusnya saat ini tampilan di browser-mu sama seperti di atas yang menandakan bahwa setting Nginx sebagai Reverse Proxy telah berhasil.

Baca Juga: Cara Install Moodle di VPS CentOS 7

Simpulan

Node.js dapat diinstal pada VPS maupun hosting, untungnya kamu sudah bisa menginstalnya juga di hosting Dewaweb karena sudah mendukung Node.js. Demikian artikel cara instal Node.js dan deploy app di CentOS 8.

Demikian artikel ini, jangan sungkan untuk meninggalkan ide-ide topik yang ingin kamu baca di blog Dewaweb. Semoga artikel ini membantu!