Deploy node.js Sebagai systemd service di RHEL

Hai semuanya, apa kabar? Kali ini kita akan coba untuk menjalankan aplikasi sebagai service di Linux menggunakan systemd.

Apa bedanya dengan menjalankan aplikasi biasa?

Apabila kita menjalankan aplikasi seperti biasa (misalnya dengan menggunakan npm start), artinya aplikasi akan berhenti ketika terminal berhenti atau sistem Linux dimatikan/restart.

Dengan menggunakan systemd, kita bisa menjalankan aplikasi seperti service yang ada pada Linux. Jadi kita bisa mengatur aplikasi tersebut agar bisa langsung berjalan setelah sistem booting, bisa restart otomatis saat crash, dan juga log-nya tercatat pada journalctl.

Persiapan

Pada pengujian kali ini menggunakan RHEL. Pertama, kita akan instal node.js terlebih dahulu. Kita akan mencoba untuk membuat aplikasi node.js sederhana.

sudo dnf install -y nodejs git

Lalu, kita siapkan juga direktorinya.

mkdir -p ~/myapp && cd ~/myapp

Pembuatan Aplikasi Node.js Sederhana

Kita tidak membuat aplikasinya dari nol. Kita akan clone repositori Pak Ricardo (instruktur Red Hat) dari GitLab. Aplikasi ini akan menampilkan gambar stock dari Red Hat. Pastikan juga saat clone menggunakan user biasa/non-root karena systemd nantinya akan dijalankan dengan hak akses user ini.

git clone https://gitlab.com/rgdacosta/nodejs_rhel10
cd nodejs_rhel10

Selanjutnya kita perlu jalankan perintah npm install untuk mengunduh dan memasang semua dependencies yang dibutuhkan oleh project node.js-nya. Hal ini memastikan aplikasi akan memiliki semua komponen yang dibutuhkan.

Konfigurasi SystemD

Kita akan membuat unit file systemd yang akan memberi tahu sistem RHEL untuk menjalankan, monitor, dan mengelola aplikasi.

Buat Unit File

Buat file konfigurasi baru pada direktori /etc/systemd/system.

sudo nano /etc/systemd/system/my-app.service

Kita masukkan konfigurasi berikut. Pastikan untuk menyesuaikan username & direktori yang digunakan.
image host

Aktivasi Service

Selanjutnya, kita perlu memuat ulang systemd dan mengaktifkan aplikasi tersebut.

sudo systemctl daemon-reload
$ sudo systemctl enable --now my-app
Created symlink '/etc/systemd/system/multi-user.target.wants/my-app.service' → '/etc/systemd/system/my-app.service'.

Kita bisa gunakan perintah systemctl status --now my-app untuk melihat status dari aplikasi (yang kini menjadi seperti service).
image host

Konfigurasi Firewall

Konfigurasi firewall perlu dilakukan agar lalu lintas data dapat melewati port yang digunakan (dalam hal ini 8080).

Untuk menambahkan port 8080 secara permanen, gunakan perintah:

sudo firewall-cmd --add-port=8080/tcp --permanent

Terapkan perubahan:

sudo firewall-cmd --reload

Catatan: untuk penggunaan di lingkungan production, selalu pertimbangkan untuk membatasi akses pada port yang digunakan.

Pengujian di Web Browser

Kita coba buka web browser dan kunjungi http://localhost:8080. Apabila berhasil. kita akan dapat melihat stock image dari Red Hat.
image host

Pengujian berhasil. Menampilkan gambar stock dari Red Hat.

Untuk tulisan kali ini sampai di sini dulu ya. Sampai jumpa. Bye.

By Zaidan

Leave a Reply

Your email address will not be published. Required fields are marked *