Menyebarkan aplikasi Swoole sebagai binary statis: memahami swoole-cli (PHP runtime statis), membangun PHP+ekstensi jadi satu binary dengan build-static-php, hingga TypePHP AOT compiler dan image Docker minimal.

Setelah di episode 22 kita menaikkan skala ke multi-node — pada episode kali ini kita menjawab pertanyaan yang selalu muncul saat deployment: "target server belum punya PHP, bagaimana?". Model klasik berarti install PHP, install ekstensi, compile Swoole — di setiap server. Ada cara yang jauh lebih elegan: binary statis.
Mengapa episode ini penting? Karena deployment yang reproducible adalah pilar production-grade. Binary statis menghilangkan seluruh kelas masalah "berjalan di mesin saya" — satu binary yang bisa dijalankan di Linux apa pun, tanpa PHP di sistem.
Deployment klasik aplikasi Swoole:
pecl install swoole + compile (butuh toolchain, header).composer install.php server.php.Empat langkah pertama adalah sumber inkonsistensi: versi PHP beda, build option beda, ekstensi kurang. Di skala banyak server (episode 22), ini jadi mimpi buruk otomasi.
swoole-cli adalah build PHP yang dikompilasi sebagai satu binary statis — PHP, Swoole, dan ekstensi penting semuanya menyatu. Tidak perlu menginstall PHP di target.
curl -sSL https://github.com/swoole/swoole-cli/releases/download/.../swoole-cli -o swoole-cli
chmod +x swoole-cli
./swoole-cli -vImage Docker resmi juga tersedia:
docker run --rm -it phpswoole/swoole-cli:latest php -v./swoole-cli server.phpTanpa mengubah kode sama sekali — server.php adalah file yang sama dari episode 4. Cek ekstensi bawaan:
./swoole-cli -mswoole-cli sudah memuat Swoole, OpenSSL, mbstring, dan sekumpulan ekstensi umum — cukup untuk mayoritas aplikasi.
Bila butuh ekstensi spesifik (pgsql, redis, imagick), bangun sendiri dengan build-static-php (crazywhalecc/static-php-cli):
composer create-project crazywhalecc/static-php-cli spc
cd spc
php bin/spc download --with-php=8.5 # unduh source PHP & ekstensiLalu build binary dengan daftar ekstensi yang diinginkan:
php bin/spc build swoole,openssl,pcntl,pdo_pgsql,redis \
--build-cli \
--enable-coroutine-pgsqlHasilnya binary PHP statis di buildroot/bin/php. Verifikasi:
./buildroot/bin/php -v
./buildroot/bin/php --ri swooleTip
Setiap ekstensi yang kalian tambahkan memperbesar binary dan memperlama build. Aturan praktis: hanya sertakan yang benar-benar dipakai aplikasi. Binary Swoole dasar biasanya 40-60 MB — ukuran yang wajar untuk menghilangkan seluruh masalah dependency di target.
Arah terbaru ekosistem PHP adalah AOT (Ahead-Of-Time) compilation. TypePHP (penerus proyek Swoole AOT) adalah compiler yang mengubah PHP menjadi static types lalu mengkompilasinya ke binary native — melampaui sekadar "PHP statis" menjadi "PHP native".
| Proyek | Fokus |
|---|---|
| swoole-cli | PHP + ekstensi dalam satu binary |
| build-static-php | Alat untuk membangun binary statis custom |
| TypePHP | AOT compiler — PHP diubah ke native code (beta H2 2026) |
TypePHP masih beta pada 2026, tetapi arahannya jelas: binary native yang tidak butuh interpreter saat runtime, dengan performa start yang sangat cepat. Ikuti perkembangannya — ini tren yang akan membesar di 2027.
Alur lengkap dari source ke binary produksi:
# 1. Bangun binary statis dengan ekstensi yang dibutuhkan
php bin/spc build swoole,openssl,mbstring --build-cli
# 2. Salin binary + aplikasi ke server target
scp buildroot/bin/php server.php deploy:/opt/app/
# 3. Jalankan di server — TANPA install PHP
/opt/app/php /opt/app/server.phpServer target sekarang tidak butuh PHP, tidak butuh pecl, tidak butuh compiler. Semua sudah ada di dalam binary.
FROM debian:bookworm-slim
COPY swoole-cli /usr/local/bin/php
COPY server.php /app/server.php
EXPOSE 9501
CMD ["php", "/app/server.php"]Image base hanya debian-slim (tanpa PHP, tanpa toolchain) — hasil image bisa lebih kecil dari image PHP+Swoole tradisional, dan jauh lebih sedikit permukaan serangan.
| Masalah | Penyebab | Solusi |
|---|---|---|
| Binary tidak jalan "missing dependency" | Build tidak benar-benar statis | Cek ldd binary — harus "not a dynamic executable" |
| Ekstensi tidak ada di binary | Lupa sertakan saat build | Tambahkan di perintah spc build |
| Binary besar | Terlalu banyak ekstensi | Minimalis: hanya yang dipakai |
Aplikasi memanggil exec()/shell_exec | Di binary statis tidak tersedia | Hindari system call di aplikasi, atau desain ulang |
Pada episode 23 ini, kalian telah belajar menyebarkan Swoole tanpa PHP terinstall.
Inti yang harus dibawa pulang:
ldd bahwa binary benar-benar statis.Di episode 24 selanjutnya, kita memetakan lanskap besar: Ekosistem & Tren Modern 2026 — Swoole 6.x vs OpenSwoole 26.2, perbandingan RoadRunner/FrankenPHP, dan arah Fiber, io_uring, serta AOT. Sampai jumpa di episode 24!