Belajar Swoole - Swoole CLI & Static Runtime
Episode 23 of 26

Belajar Swoole - Swoole CLI & Static Runtime

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.

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

Pendahuluan

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.

Masalah Model Instalasi Klasik

Deployment klasik aplikasi Swoole:

  1. Install PHP di server.
  2. pecl install swoole + compile (butuh toolchain, header).
  3. Samakan versi dengan environment lain.
  4. composer install.
  5. Jalankan 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: PHP Runtime Statis

swoole-cli adalah build PHP yang dikompilasi sebagai satu binary statis — PHP, Swoole, dan ekstensi penting semuanya menyatu. Tidak perlu menginstall PHP di target.

Ambil swoole-cli binary
curl -sSL https://github.com/swoole/swoole-cli/releases/download/.../swoole-cli -o swoole-cli
chmod +x swoole-cli
./swoole-cli -v

Image Docker resmi juga tersedia:

swoole-cli via Docker
docker run --rm -it phpswoole/swoole-cli:latest php -v

Menjalankan Aplikasi dengan swoole-cli

Jalankan server dengan swoole-cli
./swoole-cli server.php

Tanpa mengubah kode sama sekali — server.php adalah file yang sama dari episode 4. Cek ekstensi bawaan:

Cek ekstensi di swoole-cli
./swoole-cli -m

swoole-cli sudah memuat Swoole, OpenSSL, mbstring, dan sekumpulan ekstensi umum — cukup untuk mayoritas aplikasi.

build-static-php: Bangun Binary Sendiri

Bila butuh ekstensi spesifik (pgsql, redis, imagick), bangun sendiri dengan build-static-php (crazywhalecc/static-php-cli):

Setup build-static-php
composer create-project crazywhalecc/static-php-cli spc
cd spc
php bin/spc download --with-php=8.5  # unduh source PHP & ekstensi

Lalu build binary dengan daftar ekstensi yang diinginkan:

Build binary statis
php bin/spc build swoole,openssl,pcntl,pdo_pgsql,redis \
  --build-cli \
  --enable-coroutine-pgsql

Hasilnya binary PHP statis di buildroot/bin/php. Verifikasi:

Verifikasi binary hasil build
./buildroot/bin/php -v
./buildroot/bin/php --ri swoole

Tip

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.

TypePHP: AOT Compiler

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".

ProyekFokus
swoole-cliPHP + ekstensi dalam satu binary
build-static-phpAlat untuk membangun binary statis custom
TypePHPAOT 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.

Praktik: Build & Run Static Binary App

Alur lengkap dari source ke binary produksi:

Build dan jalankan aplikasi statis
# 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.php

Server target sekarang tidak butuh PHP, tidak butuh pecl, tidak butuh compiler. Semua sudah ada di dalam binary.

Image Docker Minimal

Dockerfile dengan binary statis
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.

Common Pitfalls

MasalahPenyebabSolusi
Binary tidak jalan "missing dependency"Build tidak benar-benar statisCek ldd binary — harus "not a dynamic executable"
Ekstensi tidak ada di binaryLupa sertakan saat buildTambahkan di perintah spc build
Binary besarTerlalu banyak ekstensiMinimalis: hanya yang dipakai
Aplikasi memanggil exec()/shell_execDi binary statis tidak tersediaHindari system call di aplikasi, atau desain ulang

Penutup

Pada episode 23 ini, kalian telah belajar menyebarkan Swoole tanpa PHP terinstall.

Inti yang harus dibawa pulang:

  • swoole-cli: binary statis PHP+Swoole siap pakai.
  • build-static-php: bangun binary custom dengan ekstensi spesifik.
  • TypePHP: AOT compiler PHP — arah tren 2026/2027.
  • Binary statis = reproducible, portable, image minimal, permukaan serangan kecil.
  • Verifikasi dengan 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!

Belajar Swoole - Swoole CLI & Static Runtime | Belajar Swoole