Share
March 10, 2026

Setup WordPress di Docker (Plus Drama Reverse Proxy)

Akhirnya, blog ini resmi mengudara! Sebagai pembuka, saya ingin mendokumentasikan proses “berdarah-darah” di balik layar saat menyeting WordPress ini. Niatnya simpel: pakai Docker supaya rapi. Tapi ternyata, dunia self-hosting penuh dengan kejutan, terutama kalau kita mainan Reverse Proxy.

Catatan ini saya buat untuk diri saya di masa depan kalau lupa, dan semoga bermanfaat juga buat teman-teman yang mungkin punya kendala serupa.

Skema “Over-Engineering” Saya

Topologinya agak sedikit muter karena faktor keamanan dan infrastruktur rumah: InternetPangolin Instance (VPS)Tunnel ke Home ServerDockerWordPress.

1. Database yang Mandiri

Biasanya, orang bikin WordPress di Docker itu jadi satu paket (one stack) dengan databasenya. Tapi karena saya punya rencana buat pakai database ini untuk aplikasi lain ke depannya, saya pisahkan dia.

Databasenya berdiri sendiri di container MariaDB yang independen. Jadi, saat WordPress mau konek, saya tinggal panggil nama container-nya (dalam satu network Docker) atau IP lokal server saya.

2. WordPress di Docker

Untuk WordPress-nya sendiri, saya pakai image resmi. Setupnya cepat, tinggal copy-paste dikit di docker-compose.yml, beres! Eh, tapi itu kalau kita akses lewat IP lokal… masalah muncul pas diakses lewat domain.

Drama “Infinite Redirect Loop” (Pangolin & Cloudflare Tunnel)

Nah, di sinilah serunya. Saya pakai Pangolin sebagai Reverse Proxy di VPS. Pangolin ini yang bertugas pegang sertifikat SSL (HTTPS).

Masalahnya:

  • Pangolin menerima koneksi HTTPS dari internet.
  • Pangolin meneruskan koneksi ke WordPress saya via HTTP (karena di dalam internal server, kita nggak butuh SSL berlapis-lapis).
  • WordPress “bingung”. Dia merasa diakses via HTTP, lalu dia otomatis menyuruh browser untuk redirect ke HTTPS.
  • Browser balik lagi ke Pangolin, Pangolin lempar lagi via HTTP… dan terjadilah Infinite Redirect Loop. Halaman nggak mau kebuka, cuma muter-muter doang sampai browser menyerah.

Kondisi ini bakal tetap sama kalau kalian pakai Cloudflare Tunnel atau Nginx Proxy Manager.

Cara Mengatasinya (Resolusi)

Kuncinya ada di dua tempat: Header Proxy dan Konfigurasi WordPress.

Langkah A: Di Sisi Pangolin

Kita harus “bisikin” ke WordPress kalau koneksi di luar sana itu sebenarnya aman (HTTPS). Di menu Custom Headers Pangolin, saya tambahkan:

Plaintext

X-Forwarded-Proto: https

Langkah B: Menjinakkan wp-config.php

Supaya WordPress mau dengerin bisikan tadi, saya harus modifikasi file wp-config.php. Karena saya pakai Docker, saya manfaatkan variabel WORDPRESS_CONFIG_EXTRA di Docker Compose:

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) {
    $_SERVER['HTTPS'] = 'on';
}

Kode ini intinya bilang: “Kalau kamu dapat laporan header HTTPS dari proxy, anggap saja koneksi ini aman. Nggak usah redirect-redirect lagi!”

Mission Accomplished!

Setelah dua langkah itu diterapkan, boom! Blog ini langsung bisa diakses dengan lancar tanpa error. Gembok hijau menyala, SSL aman, dan database tetap rapi di container-nya sendiri.

Artikel yang sedang Anda baca ini adalah post pertama saya, yang ditulis langsung dari dashboard WordPress yang baru saja “sembuh” dari penyakit redirect loop tadi.

Sampai jumpa di catatan-catatan teknis berikutnya!