• Docker
  • Cara Install WordPress Menggunakan Docker Compose dengan FrankenPHP dan Caddy

    Jika kamu ingin menginstal WordPress dengan cara modern dan efisien menggunakan Docker, kombinasi FrankenPHP dan Caddy adalah pilihan yang sangat powerful. Kombinasi ini menawarkan kecepatan tinggi serta kemudahan konfigurasi SSL otomatis. Artikel ini akan memandu kamu langkah demi langkah.

    ๐Ÿ“ Struktur Folder WordPress Docker

    Sebelum mulai, pastikan struktur folder kamu seperti berikut:

    mablx-project/
    โ”œโ”€โ”€ docker-compose.yml          # Konfigurasi utama FrankenPHP + Caddy
    โ”œโ”€โ”€ Dockerfile                  # Build image WordPress + FrankenPHP
    โ”œโ”€โ”€ Caddyfile                   # Konfigurasi web server Caddy
    โ””โ”€โ”€ wordpress/                  # File WordPress dari image resmi

    ๐Ÿ“ฅ Langkah 1: Download File WordPress ke Volume Host

    Langkah pertama adalah mengunduh file WordPress dari image resmi dan menyimpannya di direktori ./wordpress.

    ๐Ÿ“„ File docker-compose.download.yml

    services:
      wordpress:
        image: wordpress:latest
        container_name: wordpress-downloader
        volumes:
          - ./wordpress:/var/www/html

    ๐Ÿš€ Jalankan Perintah

    docker compose -f docker-compose.download.yml up

    Tunggu hingga file WordPress muncul di folder ./wordpress.


    ๐Ÿงน Langkah 2: Bersihkan Image dan Container

    Setelah file berhasil diunduh, jalankan perintah berikut:

    docker compose -f docker-compose.download.yml down -v
    docker rmi wordpress:latest

    Ini akan menghapus container sementara dan image wordpress:latest agar tidak konflik dengan build FrankenPHP selanjutnya.


    โš™๏ธ Langkah 3: Konfigurasi Docker Compose WordPress dengan FrankenPHP + Caddy

    ๐Ÿ“„ File docker-compose.yml
    services:
      php:
        container_name: wordpress-frankenphp-php
        build: .
        image: example.com:latest
        restart: always
        ports:
          - "80:80"
          - "443:443/udp"
        volumes:
          - caddy_data:/data
          - caddy_config:/config
        environment:
          SERVER_NAME: example.com www.example.com
        depends_on:
          - db
    
      db:
        container_name: wordpress-frankenphp-db
        image: mysql:latest
        restart: always
        environment:
          MYSQL_DATABASE: wordpress_db
          MYSQL_USER: dummyuser
          MYSQL_PASSWORD: dummypass123
          MYSQL_ROOT_PASSWORD: dummypass123
        volumes:
          - db_data:/var/lib/mysql
    
    volumes:
      caddy_data:
      caddy_config:
      db_data:

    ๐Ÿ“„ File Dockerfile

    FROM dunglas/frankenphp
    ENV SERVER_NAME="example.com www.example.com"
    
    RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli
    
    RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
    
    RUN echo "upload_max_filesize = 512M" >> "$PHP_INI_DIR/php.ini" && \
        echo "post_max_size = 512M" >> "$PHP_INI_DIR/php.ini" && \
        echo "memory_limit = 512M" >> "$PHP_INI_DIR/php.ini" && \
        echo "max_execution_time = 320" >> "$PHP_INI_DIR/php.ini" && \
        echo "max_input_time = 300" >> "$PHP_INI_DIR/php.ini"
    
    COPY ./wordpress /app/public
    COPY ./Caddyfile /etc/caddy/Caddyfile

    ๐Ÿ“„ File Caddyfile

    example.com {
        redir https://www.example.com{uri} permanent
    }
    
    www.example.com {
        root * /app/public
        php_fastcgi localhost:9000
        encode gzip
        file_server
    }

    Untuk deploy via localhost, kamu bisa isi Caddyfile seperti ini:

    http://192.168.1.10 {
        root * /app/public
        php_fastcgi localhost:9000
        encode gzip
        file_server
    }

    ๐Ÿ› ๏ธ Langkah 4: Sesuaikan File wp-config.php

    Masuk ke direktori ./wordpress dan salin file konfigurasi:

    cp wp-config-sample.php wp-config.php

    Lalu ubah baris-baris berikut di wp-config.php:

    define( 'DB_NAME', 'wordpress_db' );
    define( 'DB_USER', 'dummyuser' );
    define( 'DB_PASSWORD', 'dummypass123' );
    // Penting: Host diarahkan ke nama service container database
    define( 'DB_HOST', 'wordpress-frankenphp-db' );

    Pastikan DB_HOST sesuai dengan nama service db di docker-compose.yml, yaitu wordpress-frankenphp-db.


    ๐Ÿš€ Langkah 5: Jalankan WordPress dengan Docker Compose

    Setelah semua file siap, jalankan perintah berikut:

    docker compose up --build -d

    WordPress sekarang berjalan di http://example.com dan secara otomatis akan menggunakan HTTPS jika domain kamu telah mengarah ke IP server.


    ๐Ÿ—‘๏ธ Opsional: Hapus Container & Image

    Untuk menghentikan dan membersihkan:

    docker compose down -v
    docker rmi example.com:latest

    โœ… Keunggulan Menggunakan FrankenPHP + Caddy

    • โœ… SSL otomatis dengan Let’s Encrypt
    • โœ… Konfigurasi sederhana tanpa file .htaccess
    • โœ… Kinerja tinggi dengan PHP built-in server
    • โœ… Pengelolaan modern menggunakan Docker Compose terbaru

    ๐ŸŽ‰ Kesimpulan

    Dengan mengikuti panduan ini, kamu telah berhasil:

    • ๐Ÿ“ฅ Mengunduh file WordPress tanpa database
    • ๐Ÿงน Menghapus image default wordpress:latest
    • โšก Membuat environment WordPress yang lebih modern dan cepat menggunakan FrankenPHP dan Caddy

    Setup ini cocok untuk pengembangan, staging, maupun deployment produksi (dengan tambahan keamanan & backup).


    Leave a Reply

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

    3 mins