Deploy Aplikasi Go dengan PM2: Panduan Lengkap

Pelajari cara mudah deploy aplikasi Go menggunakan PM2. Ikuti panduan lengkap dengan contoh kode, konfigurasi log rotasi, clustering, dan zero‑downtime reload

Deploy Aplikasi Go dengan PM2: Panduan Lengkap

Daftar Isi

Pendahuluan

Go dikenal karena performa tinggi dan sintaks yang sederhana untuk membangun aplikasi server. Namun, meskipun Go sudah stabil, mengelola proses di lingkungan produksi tetap memerlukan process manager yang dapat melakukan restart otomatis, mengelola log, clustering, dan reload tanpa downtime. Di sinilah PM2 berperan. Meskipun awalnya dibuat untuk aplikasi Node.js, PM2 dapat mengelola executable apa pun, termasuk binary hasil kompilasi Go.

Apa Itu PM2?

  • Daemon & Monitoring – Menjaga aplikasi tetap berjalan, otomatis restart saat crash, serta menampilkan metrik runtime.
  • Rotasi Log – Mengatur log stdout/stderr dengan batas ukuran dan timestamp.
  • Zero‑Downtime Reload – Memuat ulang aplikasi tanpa memutuskan koneksi yang sedang aktif.
  • Clustering – Menjalankan beberapa instance untuk memanfaatkan semua core CPU.

Jika dibandingkan dengan alternatif seperti systemdsupervisord, atau Docker, PM2 menawarkan solusi ringan, lintas‑platform, dan mudah di‑setup pada satu host.

Prasyarat

Prasyarat Keterangan
Go (≥ 1.20) Kompilasi binary dengan go build -o myapp.
Node.js & npm Instal PM2 lewat npm install -g pm2.
Linux/macOS Telah diuji pada macOS Sequoia dan Ubuntu 22.04.
Pengetahuan dasar shell script Untuk membuat script start dan file konfigurasi.

Instalasi PM2

npm install -g pm2

Menyiapkan Aplikasi Go

  1. Buat server HTTP sederhana, misalnya main.go.

Pastikan file binary dapat dieksekusi:

chmod +x myapp

Kompilasi menjadi binary:

go build -o myapp

File Ecosystem untuk PM2

File ecosystem pada PM2 adalah file konfigurasi JavaScript (atau JSON) yang mendefinisikan satu atau beberapa aplikasi yang akan dikelola oleh PM2. Di dalamnya Anda dapat mengatur nama proses, skrip yang dijalankan, mode eksekusi, jumlah instance (clustering), variabel lingkungan, serta pengaturan log. Dengan menggunakan file ini, Anda dapat memulai, menghentikan, atau mereload semua aplikasi secara bersamaan hanya dengan satu perintah pm2 start ecosystem.config.js.

module.exports = {
  apps: [
    {
      name: "my-go-service",
      script: "./myapp",
      exec_mode: "fork", // fork cocok untuk binary compiled
      instances: "1",   // satu instance per core CPU
      env: {
        PORT: 8080,
        LOG_LEVEL: "info"
      },
      max_memory_restart: "200M",
      // Pengaturan log PM2
      out_file: "~/.pm2/logs/my-go-service-out.log",
      error_file: "~/.pm2/logs/my-go-service-error.log",
      log_date_format: "YYYY-MM-DD HH:mm Z"
    }
  ]
};

Yang perlu diperhatikan di sini adalah, pada bagian exec_mode , pastikan Anda menggunakan fork, dikarenakan aplikasi yang kita buat bukanlah aplikasi node.js, melainkan binary, sehingga tidak bisa menggunakan mode cluster .

Ingat, file ecosystem.config.js ini 1 folder dengan file binary Anda. Dikarenakan script menggunakan ./myapp .

Jalankan dengan perintah:

pm2 start ecosystem.config.js

Setelah perintah dijalankan, gunakan pm2 ls untuk melihat status proses. Contoh output:

Manajemen Log & Rotasi dengan pm2‑logrotate 

PM2 tidak melakukan rotasi log secara otomatis. Sedangkan jika tidak di auto rotate dan hapus, maka file log pm2 Anda bisa sangat besar seiring berjalannya waktu. Untuk menambahkan rotasi log, gunakan modul pm2-logrotate.

1. Instalasi pm2‑logrotate

pm2 install pm2-logrotate
contoh output pm2 install pm2-logrotate
module pm2-logrotate berhasil diinstall

2. Konfigurasi rotasi log

Lakukan perubahan setting log config jika perlu.

pm2 set pm2-logrotate:max_size "10M"  # Rotasi ketika ukuran mencapai 10 MB
pm2 set pm2-logrotate:retain "5"      # Simpan 5 file log terakhir
pm2 set pm2-logrotate:compress "true" # Kompresi file log lama (gzip)
pm2 set pm2-logrotate:dateFormat "YYYY-MM-DD_HH-mm-ss"  # Format timestamp pada nama file

3. Verifikasi

pm2 show pm2-logrotate

Anda akan melihat konfigurasi yang telah diterapkan. Log akan otomatis diputar sesuai ukuran dan jumlah yang ditentukan.

status module pm2-logrotate

Zero‑Downtime Reload (Hot Reload)

Salah satu manfaat digunakannya pm2 adalah, zero downtime. Artinya dengan konfigurasi yang tepat, Anda bisa mendeploy aplikasi Anda tanpa perlu downtime.

Gunakan pm2 reload my-go-service untuk memuat ulang tanpa memutuskan koneksi. PM2 akan membuat instance baru, menunggu instance lama menyelesaikan request yang sedang diproses, lalu melakukan swap.

Integrasi dengan Systemd (Rekomendasi)

Agar aplikasi Anda selalu dijalankan di setiap restart, maka Anda perlu men-setting mode startup untuk pm2. Jalankan perintah ini.

pm2 startup

Maka akan muncul status dan perintah yang harus Anda jalankan (bisa jadi dengan sudo ) . Pada contoh ini, pm2 mendeteksi managemen service di VM saya menggunakan systemd

Anda cukup mengikuti perintah yang dituliskan di sana.

PENTING !!!
Untuk memastikan aplikasi yang sudah kita setting dengan menggunakan ecosystem.config.js tadi tersinkron startup, maka setiap kali Anda selesai menambahkan, mengurangi atau mengupdate aplikasi, SELALU jalankan perintah pm2 save

FAQ

Q1: Apakah PM2 dapat menjalankan aplikasi Go dalam mode cluster? 
A: Tidak. Mode cluster hanya untuk aplikasi yang dibuat dengan node.js .

Q1: Apakah PM2 dapat mengelola aplikasi Go yang berjalan di port 8080? 
A: Gunakan reverse proxy seperti Nginx untuk meneruskan traffic ke port tersebut.

Q2: Bagaimana cara memantau penggunaan memori aplikasi Go dengan PM2?
A: PM2 menampilkan metrik memori secara real‑time pada perintah pm2 status. Anda juga dapat mengatur max_memory_restart untuk otomatis restart bila penggunaan memori melebihi batas.

Q3: Apakah pm2‑logrotate dapat mengkompresi log secara otomatis?
A: Ya. Dengan perintah pm2 set pm2-logrotate:compress "true", file log lama akan dikompresi menggunakan gzip.

Kesimpulan & CTA

PM2 menyediakan cara ringan namun kaya fitur untuk mengelola binary Go di produksi—mulai dari restart otomatis, rotasi log, scaling, hingga zero‑downtime reload dengan konfigurasi minimal. Coba implementasikan PM2 pada aplikasi Go Anda sekarang dan rasakan peningkatan stabilitas serta kemudahan manajemen proses.

Sumber

PM2 Documentation
pm2‑logrotate
Go Official Site