Belajar FrankenPHP - Integrasi Ecosystem: WordPress, Drupal & API Platform
Episode 22 of 25

Belajar FrankenPHP - Integrasi Ecosystem: WordPress, Drupal & API Platform

Mengintegrasikan FrankenPHP dengan ekosistem web populer: menjalankan WordPress dengan mode worker dan konfigurasi produksi, deployment Drupal, serta API Platform (Symfony) yang memakai FrankenPHP sebagai runtime utama dengan dukungan worker native.

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

Setelah 21 episode membangun dari nol, episode ini menghubungkan FrankenPHP dengan ekosistem yang sudah ada — aplikasi yang tidak kalian tulis sendiri tapi harus berjalan di atas FrankenPHP. Tiga nama terbesar di dunia PHP: WordPress, Drupal, dan API Platform (Symfony). Masing-masing punya jalur integrasi yang sudah dipikirkan serius oleh tim FrankenPHP.

Mengapa penting? Jujur saja: mayoritas traffic PHP di dunia tetap WordPress dan Drupal. Jika kalian bisa menjalankan keduanya dengan mode worker FrankenPHP — plus memiliki alur produksi resmi — maka FrankenPHP bukan sekadar teknologi baru, tapi pengganti nyata untuk tumpukan LAMP/LNMP yang menguasai produksi.

WordPress: Dukungan Resmi Mode Worker

WordPress adalah target integrasi utama FrankenPHP — Kévin Dunglas sendiri memakai FrankenPHP untuk blog-nya. WordPress mendukung mode worker resmi sejak FrankenPHP v1 (dan bahkan lebih awal, via FrankenPHP Worker dan preload).

Persyaratan untuk mode worker di WordPress:

  • Jalankan via php_server (classic) untuk pemasangan sederhana, atau worker untuk performa ekstrem.
  • WordPress membutuhkan session & file upload yang bekerja — keduanya didukung (perhatikan batasan enable_post_data_reading dari episode 13).
  • Extensions: pastikan zlib (kompresi) terpasang.

Konfigurasi Caddyfile produksi yang direkomendasikan:

Caddyfile - WordPress produksi
{
    frankenphp {
        worker /app/wp/public/index.php 2
    }
}
 
kaliansite.com {
    root * /app/wp/public
 
    encode zstd br gzip
 
    php_server {
        try_files {path} {path}/ /index.php?{query}
    }
 
    header {
        -X-Powered-By
    }
}

Poin penting:

  • try_files untuk permalink WordPress (pretty URLs) — pattern ini sama dengan Nginx config WordPress standar.
  • encode zstd br gzip — kompresi aset; precompressed opsional bila file .gz/.zst sudah disiapkan.
  • Worker count (2 di contoh) sesuaikan memory (episode 17).

Warning

Beberapa plugin WordPress memakai fungsi yang mengasumsikan PHP-FPM (misal session, pcntl, atau mekanisme shutdown). Saat menguji di worker mode, perhatikan error log plugin — masalah hampir selalu pada plugin, bukan FrankenPHP. Uji plugin kritis di staging dulu.

WordPress + Octane: Kombinasi Komplit

Laravel juga bisa menjadi backend WordPress — pola headless: WordPress sebagai CMS, Laravel+Octane+FrankenPHP sebagai frontend/API. Alur ini memakai kekuatan masing-masing: editor WordPress yang matang, runtime Laravel yang cepat. Konfigurasi tetap mengikuti episode 6 (Octane).

Drupal: Integration Starter Kit

Drupal adalah CMS enterprise yang solid. FrankenPHP menawarkan dunglas/frankenphp-drupal — kit integrasi yang menyiapkan Docker, image, dan workflow yang disesuaikan dengan Drupal.

Konsep dasar:

  • Image Docker yang sudah berisi Drupal + FrankenPHP.
  • FRANKENPHP_DOCKER variable untuk mengontrol mode (classic/worker).
  • Skrip docker-compose lengkap dengan database, Redis, dan tooling Drupal.
Jalankan Drupal + FrankenPHP
git clone https://github.com/dunglas/frankenphp-drupal.git
cd frankenphp-drupal
docker compose up -d

Drupal di worker mode mendapat benefit yang sama: bootstrap sekali, request berikutnya langsung. Kebutuhan session/cache yang kompleks di Drupal ditangani oleh Redis (episode 13) — Drupal mendukung redis module secara native.

API Platform: Runtime First-Class

API Platform (framework API berbasis Symfony) adalah proyek yang paling erat dengan FrankenPHP — dikembangkan oleh tim yang sama. Dukungan worker-nya native: mulai API Platform 3.2, bila dijalankan di FrankenPHP dengan mode worker, semua API controller berjalan di worker mode tanpa konfigurasi tambahan.

Cara mengaktifkan:

  1. Install dependencies (Symfony 7.4+ — dukungan native; versi lebih tua pakai composer require runtime/frankenphp-symfony).
  2. Set env var di .env:
    .env - aktifkan runtime worker
    APP_RUNTIME=Runtime\FrankenPhpSymfony\Runtime
  3. Jalankan dengan worker config:
    Caddyfile - API Platform worker
    {
        frankenphp {
            worker /app/public/index.php 4
        }
    }

Karena API Platform = Symfony + Mercure + OpenAPI, ia langsung terintegrasi dengan semua yang episode 7 dan 18 ajarkan:

  • Mercure bawaan API Platform untuk real-time (SSE/updates push ke klien).
  • Early Hints (episode 18) bisa diaktifkan di controller untuk mempercepat page load.
  • Serializer + worker: resource data API Platform otomatis didukung oleh worker mode.

Contoh controller dengan Early Hints:

Controller dengan Early Hints
use Symfony\Component\HttpFoundation\Response;
 
public function __invoke(): Response
{
    if (function_exists('frankenphp_early_hints')) {
        frankenphp_early_hints([
            'Link: </assets/app.css>; rel=preload; as=style',
        ]);
    }
 
    return $this->render('page/index.html.twig');
}

Perbandingan Cepat Jalur Integrasi

PlatformJalur utamaMode workerDukungan resmi
WordPressphp_server + try_filesYa (worker resmi)Ya
Drupaldunglas/frankenphp-drupalYa (via Docker)Ya (starter kit)
API PlatformRuntime bawaan (3.2+)Ya (native)Ya (tim yang sama)
LaravelOctane (episode 6)YaYa
SymfonyRuntime (episode 7)YaYa

Kelima stack populer PHP punya jalur pertama yang didukung secara resmi — ini berbeda dari app server lain yang mengharuskan kalian meretas sendiri.

Common Pitfalls

  • Plugin WP dengan asumsi PHP-FPM: beberapa plugin membaca $_SERVER['SERVER_SOFTWARE'] atau memakai fungsi worker-hostile. Periksa log.
  • Permalink rusak: tanpa try_files yang benar, URL cantik WordPress 404. Pola di atas adalah minimum yang wajib.
  • Drupal tanpa Redis: Drupal memakai banyak session/cache; tanpa storage eksternal, worker mode kehilangan setengah manfaatnya.
  • API Platform versi lama tanpa runtime: pastikan APP_RUNTIME diset atau naikkan ke Symfony 7.4+ yang native.

Penutup

Pada episode 22 ini, kalian telah mengintegrasikan FrankenPHP dengan ekosistem besar PHP.

Inti yang harus dibawa pulang:

  • WordPress: php_server + try_files + encode; mode worker resmi.
  • Drupal: mulai dari dunglas/frankenphp-drupal.
  • API Platform: worker native (3.2+/Symfony 7.4+); Early Hints via frankenphp_early_hints().
  • Laravel/Symfony: jalur yang sudah dipelajari di episode 6 dan 7.
  • Uji plugin/module di staging sebelum worker produksi.

Di episode 23 selanjutnya kita melihat peta besar: ekosistem & tren 2026 — posisi FrankenPHP vs RoadRunner, Swoole, OpenSwoole; dukungan framework; dan arah Caddy 2.11.x sebagai fondasi. Sampai jumpa di episode 23!