“Cara Install Node.js dan Deploy App di CentOS 7”
Daftar Isi
Pengantar
Pemilihan bahasa pemrograman memang perlu disesuaikan dengan kebutuhan tim, klien hingga perusahaan. Setidaknya ada dua pilihan yang bisa digunakan, yaitu menggunakan framework maupun Content Management System (CMS). Kedua aplikasi tersebut dibangun oleh Node.js. Oleh karena itu, pelajari cara install Node.js dan deploy app di CentOS 7.
Node.js
Node.js adalah suatu aplikasi website yang berjalan dengan menggunakan bahasa pemrograman JavaScript, alias JavaScript runtime. Aplikasi website ini bisa digunakan untuk membangun berbagai tipe aplikasi seperti aplikasi web, command line, real-time chatting, server API REST, dan sebagainya.
Namun, kebanyakan developer menggunakan Node.js untuk membangun jaringan program untuk server website seperti PHP atau Java.
Persiapan
Ada beberapa persiapan yang perlu kamu lakukan untuk melakukan install Node.js di CentOS 7, yaitu:
- Pastikan kamu sudah memiliki VPS (cloud server) dan domain yang aktif.
- Memiliki akses root ke VPS (cloud server).
Cara Install Node.js dan Deploy App di CentOS 7
Update Server
Login sebagai root ke server, kemudian perbarui server lalu reboot menggunakan perintah berikut.
$ yum update -y $ reboot
Instal packages yang dibutuhkan.
$ yum install perl git nano wget -y
Install Firewall (Optional)
Pada instalasi firewall berikut kita akan menggunakan Config Security & Firewall (CSF).
$ cd /usr/src $ wget https://download.configserver.com/csf.tgz $ tar -xzf csf.tgz $ cd csf/ $ install.sh
Edit csf.conf lalu ubah value make TESTING menjadi 0.
$ nano /etc/csf/csf.conf make TESTING=’0’
Simpan perubahan dan keluar. Setelah itu, reload csf dengan perintah di bawah ini.
$ csf -r
Install Node.js
Cara pertama, install package Node.js terlebih dulu, karena sudah tersedia di repository secara default maka kamu hanya perlu mengeksekusi perintah instalasi saja.
$ yum install nodejs -y
Cek versi Node.js untuk memastikan apakah hasil install Node.js sudah berhasil atau belum.
$ node -v V6.17.1
Jika pada Ubuntu kita menggunakan perintah Node.js, lain halnya dengan CentOS yang cukup menggunakan Node saja. Jika output-nya adalah versi Node.js, artinya Node.js sudah ter-install dengan lancar. Selanjutnya, kamu perlu menginstal build tools untuk menggabungkan dan menginstal native add-ons dari npm dari perintah berikut:
$ yum install gcc-c++ make -y
Allow Port Node.js
Kamu memerlukan port spesifik untuk menjalankan Node.js, yaitu port 3000. Pembukaan port dapat dilakukan pada firewall yang kamu gunakan, di artikel ini kita akan menggunakan CSF sehingga konfigurasinya ada pada “/etc/csf/csf.conf”.
$ nano /etc/csf/csf.conf
Pada TCP_IN dan TCP_Out tambahkan port yang kamu gunakan pada Node.js, misalnya port 3000 dan 3001. Jika sudah selesai, simpan perubahan lalu keluar. Setelah itu, reload rules CSF dengan perintah berikut:
$ csf -r
Create Node.js Application
Mengingat ini hanya contoh, kami akan menggunakan nama “Test”. Nantinya, Test akan merespon semua permintaan HTTP. Kamu dapat mengubah nama “Test” sesuai dengan project app Node.js milikmu.
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 berwarna merah dengan IP-Server kamu. Jika sudah, simpan perubahan dan keluar. Aplikasi di atas akan meladeni (listen) alamat spesifik, yaitu IP-Server dan port 3000. Ketika diakses, muncul output ‘Test!” dengan response 200 HTTP code, karena hanya meladeni di IP-Server. Setelah itu, gunakan cara di bawah ini 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 outputnya:
Test!
Install PM2
PM2 atau Process Manager menjadi langkah penting pada cara install Node.js, pengelola aplikasi ini bisa memungkinkan daemonize applications sehingga aplikasi bisa tetap berjalan di background. Mengingat kita menggunakan Node.js versi 6, maka versi PM2 yang akan diinstal adalah versi 3 agar tetap kompatibel. Gunakan npm untuk menginstal versi terbaru PM2 pada server kamu.
$ npm install pm2@^3 -g
Opsi -g akan memberitahukan npm untuk menginstal modul secara global. Usai instalasi, gunakan pm2 start untuk menjalankan aplikasi kamu di background.
$ pm2 start test.js
[PM2] Spawning PM2 daemon with pm2_home=/home/apps/.pm2 [PM2] PM2 Successfully daemonized [PM2] Starting //dwblog-ecdf.kxcdn.com/home/apps/test.js in fork_mode (1 instance) [PM2] Done. ┌──────┬────┬──────┬────────┬───┬─────┬───────────┐ │ Name │ id │ mode │ status │ ↺ │ cpu │ memory │ ├──────┼────┼──────┼────────┼───┼─────┼───────────┤ │ test │ 0 │ fork │ online │ 0 │ 0% │ 11.9 MB │ └──────┴────┴──────┴────────┴───┴─────┴───────────┘ Use `pm2 show <id|name>` to get more details about an app
Informasi di atas menampilkan PM2 yang secara otomatis melakukan assign nama aplikasi sesuai dengan nama file, namun tanpa ekstensi .js.
Aplikasi yang berjalan pada PM2 akan di-restart secara otomatis jika aplikasinya crashed atau killed. Namun, kamu bisa melakukan beberapa cara tambahan untuk menjalankan aplikasi pada sistem startup menggunakan subcommand. Subcommand nantinya akan menghasilkan dan mengonfigurasi startup script untuk menjalankan PM2 dan prosesnya dikelola oleh boot server.
$ pm2 startup systemd
Maka akan keluar output:
[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 from /etc/systemd/system/multi-user.target.wants/pm2-root.service to /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 berhasil membuat systemd unit file yang menjalankan PM2 untuk user on boot.
Mulai service dengan systemctl:
$ systemctl start pm2-root
Kamu juga bisa melihat statusnya dengan perintah systemctl:
$ systemctl status pm2-root
Mengingat kamu menggunakan user root, kamu bisa mengubah atau membuat file aplikasimu dengan menaruhnya di direktori sesuai kebutuhan.
Untuk menghentikan aplikasi yang berjalan dengan perintah:
$ pm2 stop namafile
Untuk memulai ulang aplikasi yang berjalan dengan perintah:
$ pm2 restart namafile
Untuk melihat daftar aplikasi yang dikelola oleh PM2:
$ pm2 list
Untuk melihat proses monitoring yang berjalan pada aplikasi:
$ pm2 monit
Setup Nginx Reverse Proxy Server
Aplikasimu sudah dapat berjalan dan hanya bisa diladeni (listen) pada localhost saja. Kamu bisa membuat aplikasi ini diladeni oleh IP Server, namun akan sangat berisiko. Oleh karena itu, kamu memerlukan Nginx Web Server as a Reverse Proxy agar aplikasimu bisa diakses oleh publik.
Perintah untuk meng-install epel-release:
$ yum install epel-release -y
Perintah untuk install Nginx:
$ yum install Nginx
Perintah untuk mengubah kepemilikan pada direktori aplikasimu:
$ cd /home/ $ chown -R nginx:nginx apps/
Perintah untuk menambahkan layanan koneksi HTTP pada firewall:
$ firewall-cmd --permanent --add-service=http $ firewall-cmd --reload
Selanjutnya adalah perintah untuk mengubah konfigurasi Nginx pada ‘/etc/nginx/nginx.conf’. Tapi perlu diingat, kamu bisa mengubah nama domainnya sesuai dengan nama domain yang kamu gunakan:
$ nano /etc/nginx/nginx.conf
Lalu cari kata “server_name _;” dan ubah dengan:
server_name nodejscentos7.gon.net;
Cari kata “root”, lalu ubah dengan:
root /home/apps;
Cari kata “location / {“, lalu 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 digunakan untuk menanggapi permintaan, dengan asumsi server tersedia pada domain nodejscentos7.gon.net, lalu saat domain tersebut diakses, akan ada permintaan yang dikirimkan ke aplikasi test.js dan permintaan ini dapat diladeni di port 3000 tanpa harus memasukkan manual port tersebut ke browser.
Restart web server Nginx dan enable on-boot:
$ systemctl restart nginx $ systemctl enable nginx
Mengingat konfigurasinya hanya relay traffic, kita perlu memberitahukan ke SELinux bahwa Apache HTTP Server (httpd server) dalam Nginx ini dapat menggunakan jaringan untuk melakukan relay traffic di dalam konfigurasi reverse proxy.
Di sini kami menggunakan -P flag untuk memastikan bahwa perubahan bersifat permanen (jika tidak menggunakan flag ini, maka httpd_can_network_relay dan httpd_can_network_connect akan kembali ke status default, non aktif, saat server di-reboot).
$ sudo setsebool -P httpd_can_network_relay on $ sudo setsebool -P httpd_can_network_connect on
Testing
Jika semua sudah di-setting sesuai instruksi, maka cara install Node.js hampir selesai. Langkah terakhir adalah mengetes hasilnya dengan mengakses domain yang sudah diatur.
http://nodejscentos7.gon.net
Penutup
Sahabat Blog Learning & Doing demikianlah penjelasan mengenai Cara Install Node.js dan Deploy App di CentOS 7. Semoga Bermanfaat . Sampai ketemu lagi di postingan berikut nya.