Cara install aplikasi NodeJS di cPanel dengan PM2

Tutorial cara install aplikasi NodeJS di cPanel dengan PM2 (running in the background) solusi untuk lisensi cPanel tanpa CloudLinux OS.

Alasannya adalah karena jika cPanel dengan CloudLinux mahal, dan jika menggunakan Mod Ruby Passenger tidak akan sefleksibel PM2.

Jadi intinya dari tutorial ini adalah:

  • Menginstall aplikasi NodeJS menggunakan port 3000 (http://127.0.0.1:3000)
  • Kemudian untuk aksesnya menggunakan domain/subdomain (https://sub.domain.com).

Contoh port aplikasi NodeJS pada tutorial ini adalah 3000.

Install Module Proxy Apache

WHM > EasyApache > Apache Module > mod_proxy

Install NodeJS

WHM > EasyApache > Additional Package > nodejs16 (NodeJS versi sesuai aplikasi atau versi terbaru jika ada)

Install PM2

Buat symbolik link npm agar lebih sederhana saat menjalankan perintah npm tanpa menghafal path aslinya, kemudian dilanjut dengan perintah install pm2

ln -s /opt/cpanel/ea-nodejs16/bin/npm /usr/bin/npm
npm install pm2 -g

Buat juga symbolik link nodejs, npx dan corepack

ln -s /opt/cpanel/ea-nodejs16/bin/node /usr/bin/node
ln -s /opt/cpanel/ea-nodejs16/bin/npm /usr/bin/corepack
ln -s /opt/cpanel/ea-nodejs16/bin/npm /usr/bin/npm
ln -s /opt/cpanel/ea-nodejs16/bin/npm /usr/bin/npx
ln -s /opt/cpanel/ea-nodejs16/bin/pm2 /usr/bin/pm2
ln -s /opt/cpanel/ea-nodejs16/bin/pm2-dev /usr/bin/pm2-dev
ln -s /opt/cpanel/ea-nodejs16/bin/pm2-docker /usr/bin/pm2-docker
ln -s /opt/cpanel/ea-nodejs16/bin/pm2-runtime /usr/bin/pm2-runtime

Add Domain/Subdomain

Tambahkan akun/domain/subdomain, setelah aktif/bisa diakses, lakukan upload file aplikasi nodeJS

Upload aplikasi NodeJS ke server melalui File Manager

Contoh upload file aplikasi NodeJS ke direktori subdomain: SUB.NAMADOMAIN.com lokasinya tentu kita sudah hafal di /home/USERNAME/public_html/SUB.NAMADOMAIN.COM

Catatan:

  • Ganti USERNAME dan SUB.NAMADOMAIN.COM dengan nama username dan DOMAIN/SUBDOMAIN aktual kalian ya, berlaku untuk langkah selanjutnya.

Start aplikasi NodeJS

Start aplikasi NodeJS, contoh:

pm2 start /home/USERNAME/public_html/SUB.NAMADOMAIN.COM/app.js --name API

Test

Cek lewat browser dengan URL http://ip-server:3000

Membuat konfigurasi Apache reverse proxy

Buat direktori sesuai nama user dan domain

mkdir /usr/local/apache/conf/userdata/std/2_4/USERNAME/NAMADOMAIN.COM
mkdir /usr/local/apache/conf/userdata/ssl/2_4/USERNAME/NAMADOMAIN.COM

Keterangan:

  • std: folder vhost untuk protokol standar HTTP
  • ssl: folder vhost untuk protokol HTTPS

Buat file konfigurasi VirtualHost untuk reverse proxy

Ini untuk yang HTTP

nano /usr/local/apache/conf/userdata/std/2_4/USERNAME/NAMADOMAIN.COM/proxy.conf

Isinya

# Reverse Proxy ke NodeJS port 3000
ProxyPass / http://127.0.0.1:3000/
ProxyPassReverse / http://127.0.0.1:3000/

Ini untuk yang HTTPS

nano /usr/local/apache/conf/userdata/ssl/2_4/USERNAME/NAMADOMAIN.COM/proxy.conf

Isinya

# Reverse Proxy ke NodeJS port 3000
SSLProxyEngine on
ProxyPass / http://127.0.0.1:3000/
ProxyPassReverse / http://127.0.0.1:3000/

Enable Virtual Host user

/scripts/ensure_vhost_includes --user=USERNAME

Rebuild Apache config

/usr/local/cpanel/scripts/rebuildhttpdconf

Restart Apache

/usr/local/cpanel/scripts/restartsrv_httpd

Selesai, coba cek via browser lagi, kali ini dengan nama domain/subdomain.

Semoga bermanfaat.

Add a comment