Mengatasi Error 502 pada Ghost CMS

Saat artikel ini ditulis, jam menunjukkan 01:49 wib, yang berarti saya begadang berjam-jam untuk memperbaiki galat (error) pada CMS Ghost (untuk selanjutnya ditulis Ghost saja). Buat yang belum tahu apa itu Ghost: Ghost berfungsi mirip WordPress. Bedanya, Ghost tidak memakai PHP, melainkan memakai Node.js.

Permasalahannya begini: Bila IPv6 dimatikan, Ghost berfungsi normal. Tapi bila IPv6 diaktifkan, maka peramban (web browser) memunculkan pesan kesalahan: Error 502 (Bad Gateway).

Sistem yang sedang berjalan:

  • Ubuntu 20.04.6 LTS;
  • RAM 2.7G;
  • MariaDB 10.3.38;
  • Nginx 1.22.1;
  • Node.js 18.16.0;
  • Ghost 5.44.0.

Karena saya memakai Nginx, maka saya menduga ada setting yang salah pada konfigurasi “blok server Nginx” sehingga Nginx tidak bisa berkomunikasi dengan Ghost. Dugaan saya, mungkin pada baris: proxy_pass http://127.0.0.1:2368; (Penyebab galat Bad Gateway paling sering ada di proxy_pass).

Singkat cerita, setelah diselidiki beberapa waktu ternyata bukan itu penyebabnya.

Saya tengok Ghost’s error log di folder content/logs. Kurang lebih seperti ini:
connect ECONNREFUSED ::1:3306

Ternyata Ghost terhenti karena gagal melakukan koneksi ke database! Log tersebut menjelaskan bahwa Ghost gagal melakukan koneksi ke database menggunakan username ‘username’@’::1′ pada port 3306. Angka ‘::1″ menunjukkan Ghost mencoba melakukan koneksi ke database memakai IPv6 yang tentu saja gagal karena saya menyiapkan akun ‘username’@’127.0.0.1’ (IPv4).

Oke. Saya membuat akun ‘username’@’::1′. Tapi Ghost hanya berjalan sebentar kemudian terhenti lagi dengan alasan yang sama: Gagal melakukan koneksi ke database.

Pindah dari TCP/IP ke Unix Socket

Akhirnya saya punya ide. Bagaimana bila Ghost melakukan koneksi memakai Unix Socket. Maka langkah-langkah yang saya lakukan adalah sebagai berikut.

Pastikan bahwa Unix socket ke database telah tersedia dan siap dipakai. Saya cek di folder /run/mysqld atau /var/run/mysqld. Ada file bernama /run/mysqld/mysqld.sock. Berarti bisa terhubung melalui Unix Socket.

Langkah berikutnya adalah mengedit file config.production.json
Ubah menjadi seperti ini:

"database": {
  "client": "mysql",
  "connection": {
    "socketPath": "/run/mysqld/mysqld.sock",
    "host": "",
    "user": "ghost",
    "password": "r4h4s14",
    "database": "ghost"
  },
  "debug": false
},

Setelah itu Ghost direstart dengan perintah: ghost restart. Atau kalau mau lebih meyakinkan lagi, servernya di-reboot.

Saya coba ketik: https://www.mawan.id (ini adalah blog saya yang memakai Ghost).
Alhamdulillah. Bisa. Malah dapat bonus tambahan yaitu koneksi ke database yang lebih cepat dan lebih stabil.

Alternatif lain? Gunakan SQLite3. Dari pengamatan saya, kinerja Ghost menjadi lebih cepat dan tidak mudah error akibat MySQL atau MariaDB yang macet.

Untuk menginstall Ghost CMS dengan database SQLite3, ketik:
ghost install –db sqlite3

Kesimpulan:
Ghost macet (berjalan sebentar kemudian berhenti) karena gagal melakukan koneksi ke database memakai IPv6. Untuk memperbaikinya, paksa Ghost agar memakai Unix Socket, bukan TCP/IP. Solusi lain: Non-aktif-kan IPv6.

Semoga artikel ini berguna.

Web Hosting

Leave a Reply