Migrasi WordPress ke Docker Container

Pada tutorial sebelumnya kita telah belajar bagaimana cara install WordPress di atas Docker container. Kali ini, kita akan belajar bagaimana cara migrasi website WordPress yang sudah berjalan baik itu di shared hosting maupun di VPS ke Docker container. Pada dasarnya tool yang digunakan tetap sama yaitu Docker Compose, yang perlu ditambahkan adalah mengimpor WordPress dan database hasil backup.

Tutorial Environment

WordPress yang ingin dipindahkan:

  • WordPress v5.9
  • Theme Blocksy dan pluginnya
  • Domain musaamin.my.id
  • DNS dan SSL Cloudflare

Docker host:

  • VPS Ubuntu 20.04
  • Docker 20.10
  • Docker Compose 2.5
  • Nginx reverse proxy

WordPress Backup

Diasumsikan WordPress telah dibackup dan ditransfer ke VPS. Filenya disimpan di folder /home/user.

  • Folder WordPress: /home/musa/musaamin.my.id
  • File backup database: /home/musa/wp.sql

Install Requirements

Login SSH ke server lalu install Docker.

Install Docker Compose.

Install Nginx.

Logout dari koneksi SSH, lalu login kembali.

Setup Folder Website

Membuat folder untuk menyimpan file WordPress dan database.

Copy file WordPress ke folder src.

Copy file .sql ke folder initdb.d.

Docker Compose

Membuat file docker-compose.

Isi dari file docker-compose.yml.

Yang akan dijalankan oleh docker-compose.yml yaitu:

  • Membuat container dengan nama musaamin_db dari image mariadb/sever:10.5. Terdapat 2 volume, mount dari folder yang telah dibuat untuk database. Database disimpan di folder data dan folder initdb.d yang berisi file .sql yang akan diimport ketika containter dibuat. MYSQL_USERNAME, PASSWORD, dan DATABASE disesuaikan dengan yang ada di file wp-config.php, sementara untuk MYSQL_ROOT_PASSWORD bisa ditentukan sendiri.
  • Membuat container dengan nama musaamin_site dari image wordpress dengan php7.4. Container ini berjalan di port 8080. Folder src yang berisi file WordPress dimount ke /var/www/html

Menjalankan docker-compose.

Menampilkan Docker container yang sedang berjalan.

Hasil yang ditampilkan.

Konfigurasi Nginx

Selanjutnya melakukan konfigurasi Nginx untuk reverse proxy ke Docker containter.

Generate dhparam.pem.

Membuat file server block.

Isi dari file konfigurasi server block.

Konfigurasinya sama seperti dengan Nginx server block yang berjalan di port 443 (HTTPS). Pastikan sertifikat dan private key SSL sudah tersedia di server, bisa didapatkan di Cloudflare (SSL/TLS -> Origin Server -> Create Certificate). Ketika website diakses, permintaan tersebut akan diteruskan ke container yang berjalan di port 8080.

Uji konfigurasi Nginx lalu restart.

Konfigurasi WordPress

Membuka file wp-config.php dengan nano.

Mengubah DB_HOST dari localhost menjadi nama containter, musaamin_db.

Masukkan konfigurasi HTTPS berikut di atas /* That’s all, stop editing! Happy publishing. */.

Membuat file .htaccess jika belum ada.

Isi file .htaccess.

Update DNS Record

Update DNS record, ubah ke IP server Docker host.

Pengujian

Lakukan pengujian untuk memastikan semuanya sudah berfungsi dengan baik.

  • Akses halaman depan
  • Akses post detail
  • Akses halaman dashboard
  • Install theme atau plugin
  • Posting artikel

Membackup Database

Membackup database yang berjalan di container.

Menghapus Container

Menghapus container dengan docker-compose.

Meskipun container sudah terhapus, tetapi datanya masih tetap ada.

Selamat mencoba 🙂

5 Comments

  1. Halo mas mau tanya kalau semisal wp-content nya aja yang mau saya gunain buat migrate bisa engga ya ? atau harus wajib semua website di pack zip ?thanks

    • kalau tanpa docker, biasanya wp-content yang dicopy karena itu data usernya, sementara yang lain adalah core wordpress. silakan dicoba aja untuk mengetahui hasilnya seperti apa

      • Hasilnya ga muncul apa” mas, hmm mungkin akan saya coba kalau full zip semua wordpressnya , terimakasih responnya 🙂

      • Saya udah lakuin semua step dan berhasil tapi kenapa ya hanya bisa akses dari ip internal + dengan port saja, tapi ketika pakai URL yang saya taruh di nginx conf gabisa , padahal udah saya buatin ip public dan saya arahkan ke domain DNS management saya , itu kenapa ya mas, siapa tau ada pencerahan thanks 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *