Ketika kita mengembangkan aplikasi berbasis Node.js, seringkali kita menghadapi tantangan dalam menjaga aplikasi tetap berjalan stabil, terutama saat aplikasi tersebut dijalankan dalam container Docker. Salah satu masalah utama yang sering dihadapi adalah bagaimana kita dapat memastikan aplikasi tetap aktif meskipun terjadi crash atau restart pada sistem. Selain itu, ada juga tantangan lain seperti pengelolaan port antara container dan host, bagaimana cara agar aplikasi di dalam container dapat diakses dari luar. Kita juga sering kebingungan bagaimana menyinkronkan direktori di host dengan container, sehingga perubahan file di host langsung tercermin di container. Tak lupa, kita juga harus memikirkan bagaimana cara mengelola proses Node.js agar aplikasi kita berjalan dengan stabil dan efisien, tanpa harus terus memantau statusnya.
Solusi: Untuk mengatasi tantangan-tantangan ini, kita bisa menggunakan perintah Docker yang tepat serta memanfaatkan PM2 untuk manajemen proses aplikasi. Pertama, untuk memastikan aplikasi kita bisa diakses dari luar container, kita perlu melakukan port mapping, misalnya dengan menghubungkan port 2010 di host ke port 3000 di dalam container. Ini memungkinkan aplikasi diakses dengan alamat http://localhost:2010. Selain itu, kita juga dapat menggunakan volume binding untuk menyinkronkan direktori di host dengan container. Dengan begitu, setiap perubahan yang kita lakukan pada file di host akan langsung terlihat di dalam container tanpa perlu membangun ulang container tersebut.
Untuk menjaga agar container tetap berjalan meskipun terjadi crash atau error, kita bisa menambahkan opsi –restart unless-stopped dalam perintah Docker. Opsi ini memastikan container akan otomatis restart jika ada kesalahan, kecuali jika kita menghentikannya secara manual. Agar manajemen aplikasi lebih efisien, kita bisa menggunakan PM2. PM2 memungkinkan kita untuk menjalankan beberapa instance aplikasi, memanfaatkan multi-core CPU, dan secara otomatis mengelola restart jika aplikasi mengalami masalah. Semua pengaturan ini bisa kita atur dalam file konfigurasi ecosystem.config.js.
File ecosystem.config.js ini sangat berguna untuk mengelola aplikasi Node.js kita dengan lebih mudah. Dalam file ini, kita bisa mengatur nama aplikasi, script yang akan dijalankan, jumlah instance yang ingin kita jalankan, mode eksekusi, serta pengaturan untuk lingkungan development dan production. Misalnya, kita bisa mengatur agar aplikasi otomatis restart jika penggunaan memory melebihi 1GB, atau menentukan variabel lingkungan seperti NODE_ENV dan PORT untuk mode production.
Berikut adalah contoh file ecosystem.config.js yang bisa kita gunakan:
module.exports = [{
script: 'npm start',
stop_exit_codes: [0]
}]
Dengan file konfigurasi ini, kita dapat mengelola instance aplikasi, mengatur environment yang berbeda, dan memastikan performa aplikasi tetap optimal.
Setelah membuat file ecosystem.config.js, kita bisa menjalankan aplikasi dengan perintah Docker berikut:
sudo docker run -itd --restart unless-stopped -p 2010:3000 -v /home/toto/container/mobile/api-notification:/home/node --name api-notification totorajo/pm2:node20.10.0-ecosystem
Perintah ini menjalankan container Docker dengan image yang sudah terkonfigurasi untuk menjalankan aplikasi kita menggunakan PM2.
Rangkuman: Menjalankan aplikasi Node.js di dalam container Docker bisa menjadi lebih mudah dan efisien dengan pengaturan yang tepat. Dengan menggunakan port mapping, volume binding, serta memanfaatkan PM2 dan file konfigurasi ecosystem.config.js, kita dapat menjalankan aplikasi dengan stabil dan memastikan bahwa aplikasi tetap berjalan meskipun terjadi kesalahan atau crash. File ecosystem.config.js ini sangat membantu kita dalam mengelola aplikasi dengan lebih baik, baik itu untuk pengaturan instance, environment, atau pengelolaan memori.