> ## Content Index
> Fetch the complete content index at: https://debug.my.id/llms.txt
> Use this file to discover other available public pages before exploring further.

# Deploy Aplikasi Go dengan PM2: Panduan Lengkap
- URL: https://debug.my.id/deploy-aplikasi-go-dengan-pm2-panduan-lengkap/
- Published: 2026-02-28T01:51:36.000Z
- Updated: 2026-02-28T07:03:40.000Z
- Description: Pelajari cara mudah deploy aplikasi Go menggunakan PM2. Ikuti panduan lengkap dengan contoh kode, konfigurasi log rotasi, clustering, dan zero‑downtime reload
- Author: Tukang Debug
- Tags: Golang, Tip/trik, Tutorial

## Daftar Isi

- [Daftar Isi](#)
- [Pendahuluan](#pendahuluan)
- [Apa Itu PM2?](#apa-itu-pm2)
- [Prasyarat](#prasyarat)
- [Instalasi PM2](#instalasi-pm2)
- [Menyiapkan Aplikasi Go](#menyiapkan-aplikasi-go)
- [File Ecosystem untuk PM2](#file-ecosystem-untuk-pm2)
- [Zero‑Downtime Reload (Hot Reload)](#zero%E2%80%91downtime-reload-hot-reload)
- [Integrasi dengan Systemd (Rekomendasi)](#integrasi-dengan-systemd-rekomendasi)
- [FAQ](#faq)
- [Kesimpulan & CTA](#kesimpulan-cta)
- [Sumber](#sumber)

## 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 `systemd`, `supervisord`, 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

```bash
npm install -g pm2

```

## Menyiapkan Aplikasi Go

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

Pastikan file binary dapat dieksekusi:

```bash
chmod +x myapp

```

Kompilasi menjadi binary:

```bash
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`.

```javascript
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:

```bash
pm2 start ecosystem.config.js

```

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

![](https://debug.my.id/content/images/2026/02/image.png)

## 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

```bash
pm2 install pm2-logrotate

```

![](https://debug.my.id/content/images/2026/02/image-1.png)

contoh output pm2 install pm2-logrotate

![](https://debug.my.id/content/images/2026/02/image-2.png)

module pm2-logrotate berhasil diinstall

### 2\. Konfigurasi rotasi log

Lakukan perubahan setting log config jika perlu.

```bash
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

```bash
pm2 show pm2-logrotate

```

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

![](https://debug.my.id/content/images/2026/02/image-3.png)

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.

```bash
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`

![](https://debug.my.id/content/images/2026/02/image-4.png)

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](https://pm2.keymetrics.io/?ref=debug.my.id)  
[pm2‑logrotate](https://github.com/keymetrics/pm2-logrotate?ref=debug.my.id)   
[Go Official Site](https://golang.org/?ref=debug.my.id)