Belajar Swoole - Instalasi & Konfigurasi
Episode 3 of 26

Belajar Swoole - Instalasi & Konfigurasi

Memandu instalasi Swoole secara lengkap lewat pecl, kompilasi manual dengan build options, dan image Docker, lalu membedah setelan php.ini seperti swoole.use_shortname, ditutup dengan verifikasi runtime lewat php --ri swoole dan pengujian kecil pertama.

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

Pendahuluan

Setelah di episode 2 kita memahami arsitektur — Master, Manager, worker, event loop, dan coroutine — pada episode kali ini kita masuk ke tangan: instalasi lengkap dan konfigurasi Swoole yang benar. Ini adalah gerbang menuju semua episode praktik berikutnya; ekstensi yang terinstall dengan build options salah akan membuat episode 13 (database) dan 18 (TLS) tersendat.

Mengapa episode ini penting? Karena Swoole adalah ekstensi C yang dikompilasi — bukan sekadar di-unzip. Setiap fitur (SSL, coroutine hooks untuk MySQL/Redis, pgsql, WebSocket) bisa diaktifkan atau dinonaktifkan saat build. Kalian wajib tahu cara mengaktifkannya dan cara memverifikasi hasilnya.

Metode Instalasi

Via pecl (Paling Umum)

Cara tercepat dan paling direkomendasikan untuk development:

Install Swoole via pecl
sudo pecl install swoole

pecl akan menanyakan beberapa pilihan interaktif saat build (misal enable sockets supports? [no]). Untuk instalasi non-interaktif di CI atau otomasi, kirim jawaban lewat pipe:

Install non-interaktif dengan opsi build
printf "\n" | sudo pecl install swoole

Via Kompilasi Manual (Control Penuh)

Bila kalian butuh build options spesifik, kompilasi dari source:

Kompilasi Swoole manual
git clone https://github.com/swoole/swoole-src.git
cd swoole-src
phpize
./configure --enable-openssl --enable-sockets --enable-mysqlnd \
  --enable-coroutine-postgresql
make -j$(nproc)
sudo make install

Opsi configure yang sering dipakai:

OpsiFungsi
--enable-opensslDukungan TLS/SSL (dipakai episode 18)
--enable-socketsEkstensi sockets untuk client socket mentah
--enable-mysqlndCoroutine MySQL/Redis client (episode 13)
--enable-coroutine-postgresqlClient PostgreSQL coroutine
--enable-swoole-jsonParsing JSON lebih cepat di HTTP server

Setelah itu aktifkan ekstensi di php.ini:

Tambahkan di php.ini
extension=swoole.so

Tip

Cari tahu lokasi php.ini dengan php --ini. Idealnya Swoole diletakkan di file terpisah (/etc/php/8.5/cli/conf.d/20-swoole.ini) agar tidak bercampur dengan setelan lain — terutama karena CLI dan FPM bisa punya php.ini berbeda.

Via Docker (Production-Readi)

Image resmi phpswoole/swoole sudah dibangun dengan build options lengkap:

Cek Swoole di image Docker
docker run --rm -it phpswoole/swoole:latest php --ri swoole

Image ini ideal sebagai basis deployment — kita pakai kembali di episode 22.

Konfigurasi php.ini yang Wajib Diketahui

swoole.use_shortname

Secara default, fungsi global seperti go(), chan(), defer(), dan konstanta SWOOLE_* tersedia tanpa namespace. Ini nyaman tapi berbahaya: nama go, defer, dan Coroutine bisa bentrok dengan simbol di kode atau library lain. Praktik terbaiknya:

php.ini - nonaktifkan shortname
swoole.use_shortname=Off

Saat Off, kalian wajib memakai nama lengkap: Swoole\Coroutine::create() / Coroutine\go() alih-alih go(), dan Swoole\Coroutine\Channel alih-alih chan(). Semua contoh di series ini memakai nama lengkap agar aman di kedua mode.

Setelan lain yang berguna

SetelanDefaultFungsi
swoole.enable_coroutineOnAktifkan coroutine di worker
swoole.enable_libraryOnMuat library PHP bawaan Swoole
swoole.display_errorsOnTampilkan error ke stderr
swoole.unixsock_buffer_size2MBuffer pipe antar proses

Verifikasi Instalasi

Setelah install, verifikasi ekstensi termuat dan melihat build options-nya:

Verifikasi runtime Swoole
php -m | grep swoole
php --ri swoole

php --ri swoole menampilkan versi, author, dan daftar build options (swoole.enable-opensslOn/Off, dll). Inilah alat diagnostik utama — setiap kali fitur "anehnya tidak jalan", cek dulu build options di sini.

Uji Kecil Pertama

Buat server HTTP minimal sebagai smoke test:

smoke.php - HTTP server minimal
<?php
use Swoole\Http\Server;
use Swoole\Http\Request;
use Swoole\Http\Response;
 
$server = new Server('0.0.0.0', 9501);
 
$server->on('Request', function (Request $req, Response $res) {
    $res->end("<h1>Swoole OK</h1>");
});
 
$server->start();

Jalankan dan uji:

Jalankan smoke test
php smoke.php
Dari terminal lain
curl http://127.0.0.1:9501/

Warning

Swoole tidak bisa berjalan bersamaan dengan ekstensi xdebug dalam mode step-debugging di Swoole 6.x klasik (kecuali OpenSwoole 26.2 yang sudah mendukungnya). Untuk development, nonaktifkan xdebug saat menjalankan server Swoole; kalian tidak akan butuh step debug karena error dicetak ke stderr — tema yang kita dalami di episode 19.

Error Instalasi Umum

GejalaPenyebabSolusi
Cannot find config.m4Belum menjalankan phpizeJalankan phpize di direktori source
PHP headers not foundphp-dev tidak terinstallsudo apt install php-dev (versi sesuai)
swoole.so tidak termuatBaris extension di file php.ini yang salahCek php --ini untuk file yang benar
Class Swoole\Http\Server not foundEkstensi gagal load / build salahCek php --ri swoole dan log error PHP

Penutup

Pada episode 3 ini, kalian telah menguasai instalasi dan fondasi config Swoole.

Inti yang harus dibawa pulang:

  • Instalasi: pecl install swoole untuk dev, kompilasi manual untuk build options spesifik, image Docker untuk production.
  • Build options penting: openssl, sockets, mysqlnd, coroutine-postgresql.
  • swoole.use_shortname=Off menghindari bentrok simbol — pakai nama lengkap Swoole\....
  • Verifikasi selalu dengan php --ri swoole — cek versi dan build options.
  • Smoke test pertama: HTTP server minimal di port 9501.

Di episode 4 selanjutnya, kita membangun HTTP server dasar dengan Swoole\Http\Server — memahami objek Request dan Response, siklus event on('Request'), serta routing manual tanpa framework. Sampai jumpa di episode 4!