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
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
- 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.
- 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
- 1. 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 pm2@latest -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.
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!