Site icon Mawan.NET

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:

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.

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.

Exit mobile version