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: Internet → Pangolin Instance (VPS) → Tunnel ke Home Server → Docker → WordPress.
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!
