Migrasi WordPress ke Docker Container Menggunakan Docker Compose

Migrasi WordPress ke Docker Container Menggunakan Docker Compose

Migrasi WordPress ke Docker container merupakan langkah strategis untuk meningkatkan skalabilitas, keamanan, dan efisiensi pengelolaan website. Dengan pendekatan containerization, WordPress dapat dijalankan secara konsisten di berbagai lingkungan, baik development maupun production.

Pada panduan ini dibahas secara lengkap bagaimana melakukan migrasi WordPress dari shared hosting atau VPS konvensional ke Docker container, menggunakan Docker Compose dan Nginx sebagai reverse proxy. Fokus utama adalah memastikan website tetap stabil, data aman, serta siap digunakan pada infrastruktur cloud modern.

Gambaran Lingkungan Migrasi

WordPress yang Akan Dimigrasikan

  • WordPress versi 5.9

  • Theme Blocksy beserta plugin aktif

  • Domain betariko.my.id

  • DNS dan SSL dikelola melalui Cloudflare

Docker Host

  • VPS Ubuntu Server 20.04

  • Docker Engine versi 20.10

  • Docker Compose versi 2.5

  • Nginx sebagai reverse proxy

Persiapan Backup WordPress

Sebelum migrasi, pastikan WordPress sudah dibackup secara lengkap dan ditransfer ke server Docker host.

Struktur file backup:

  • Folder WordPress:
    /home/musa/betariko.my.id

  • File database backup:
    /home/musa/wp.sql

Backup ini akan digunakan untuk proses restore WordPress ke dalam container.

Instalasi Komponen Pendukung

Instalasi Docker Engine

Login ke server menggunakan SSH, kemudian jalankan perintah berikut:

sudo apt update sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io sudo usermod -aG docker $USER

Logout dan login kembali agar perubahan grup user aktif.

Instalasi Docker Compose

sudo wget https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-x86_64 -O /usr/bin/docker-compose sudo chmod +x /usr/bin/docker-compose

Instalasi Nginx

sudo apt install nginx

Menyiapkan Struktur Folder Website

Buat direktori untuk menyimpan file WordPress dan database:

mkdir -pv ~/public_html/betariko.my.id/src mkdir -pv ~/public_html/betariko.my.id/database/data mkdir -pv ~/public_html/betariko.my.id/database/initdb.d

Salin file WordPress ke folder src:

cp -Rv ~/betariko.my.id/* ~/public_html/betariko.my.id/src sudo chown -R www-data:www-data ~/public_html/betariko.my.id/src

Salin file database SQL ke folder init database:

cp ~/wp.sql ~/public_html/betariko.my.id/database/initdb.d

Konfigurasi Docker Compose untuk WordPress

Masuk ke direktori project:

cd ~/public_html/betariko.my.id nano docker-compose.yml

Isi file docker-compose.yml sebagai berikut:

version: '3' services: betariko_db: image: mariadb/server:10.5 container_name: betariko_db volumes: - ./database/data:/var/lib/mysql - ./database/initdb.d:/docker-entrypoint-initdb.d restart: always environment: MYSQL_ROOT_PASSWORD: rahasia MYSQL_DATABASE: wp MYSQL_USER: wp MYSQL_PASSWORD: rahasia betariko_site: depends_on: - betariko_db image: wordpress:php7.4 container_name: betariko_site ports: - "8080:80" restart: always volumes: - ./src:/var/www/html

Penjelasan Arsitektur

  • Container database menggunakan MariaDB dengan data persisten

  • File SQL otomatis diimport saat container pertama kali dibuat

  • Container WordPress berjalan di port 8080

  • File WordPress dimount langsung dari host untuk kemudahan maintenance

Menjalankan WordPress di Docker Container

Jalankan Docker Compose:

docker-compose up -d

Verifikasi container yang berjalan:

docker ps

Konfigurasi Nginx sebagai Reverse Proxy

Generate Diffie-Hellman Parameter

sudo openssl dhparam -out /etc/ssl/dhparam.pem 2048

Membuat Server Block Nginx

sudo nano /etc/nginx/conf.d/betariko.my.id.conf

Isi konfigurasi Nginx:

server { listen 443 ssl; server_name www.betariko.my.id betariko.my.id; ssl_certificate /etc/ssl/betariko.my.id/betariko.my.id-cert.pem; ssl_certificate_key /etc/ssl/betariko.my.id/betariko.my.id-key.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_dhparam /etc/ssl/dhparam.pem; location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } server { listen 80; server_name www.betariko.my.id betariko.my.id; return 301 https://www.betariko.my.id$request_uri; }

Uji dan restart Nginx:

sudo nginx -t sudo systemctl restart nginx

Penyesuaian Konfigurasi WordPress

Update wp-config.php

sudo nano ~/public_html/betariko.my.id/src/wp-config.php

Ubah konfigurasi database host:

define( 'DB_HOST', 'betariko_db' );

Tambahkan konfigurasi HTTPS:

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

Konfigurasi .htaccess

Buat file jika belum tersedia:

sudo nano ~/public_html/betariko.my.id/src/.htaccess

Isi file:

<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>

Update DNS dan Pengujian

Arahkan DNS domain ke IP VPS Docker host. Setelah itu lakukan pengujian berikut:

  • Akses halaman utama website

  • Akses artikel dan halaman statis

  • Login ke dashboard WordPress

  • Install atau update plugin dan theme

  • Posting artikel baru

Backup Database WordPress dari Docker Container

docker exec betariko_db /usr/bin/mysqldump -u root --password=rahasia wp > ~/wp_docker.sql

Menghapus Container Tanpa Menghapus Data

cd ~/public_html/betariko.my.id docker-compose down docker ps

Data WordPress dan database tetap aman karena disimpan di volume host.

Kesimpulan

Migrasi WordPress ke Docker container memberikan manfaat signifikan dalam hal DevOps automation, performa website, keamanan, dan kemudahan scaling. Dengan kombinasi Docker Compose dan Nginx reverse proxy, WordPress dapat dijalankan secara profesional di lingkungan cloud modern tanpa ketergantungan pada shared hosting.

Pendekatan ini sangat relevan bagi developer, system administrator, maupun bisnis digital yang membutuhkan WordPress hosting berperforma tinggi dan siap produksi.