Memandu instalasi RoadRunner secara lengkap lewat rr get, Docker, dan GitHub binary, lalu membedah struktur .rr.yaml mulai dari blok server, http, rpc, hingga pola enable dan disable plugin, ditutup dengan verifikasi config sebelum menjalankan rr serve.

Setelah di episode 2 kita memahami arsitektur — server Go mengelola worker pool PHP via Goridge — pada episode kali ini kita masuk ke tangan: instalasi lengkap dan penulisan .rr.yaml pertama yang benar. Ini adalah gerbang menuju semua episode praktik berikutnya; config yang salah sejak awal akan membuat episode 4-25 tersendat.
Mengapa episode ini penting? Karena RoadRunner adalah binary yang diatur hampir seluruhnya oleh file config YAML. Tidak seperti Nginx atau PHP-FPM dengan banyak file, RoadRunner memusatkan semuanya di .rr.yaml — memahami struktur, urutan, dan cara verifikasinya adalah skill yang akan kalian pakai setiap hari.
rr get (Direkomendasikan untuk Development)Metode ini memakai package Composer spiral/roadrunner-cli yang mengunduh binary sesuai platform:
composer require spiral/roadrunner-cli --dev
./vendor/bin/rr getUntuk memilih versi spesifik, lewatkan versi sebagai argumen:
./vendor/bin/rr get -l v2025.1.15rr get mengunduh binary ke direktori proyek (bukan global), jadi setiap proyek punya versi binary-nya sendiri — cocok untuk reproducibility.
Image resmi disediakan di GitHub Container Registry:
docker pull ghcr.io/roadrunner-server/roadrunner:2025.1.15
docker run --rm ghcr.io/roadrunner-server/roadrunner:2025.1.15 --versionImage ini cocok sebagai basis image multi-stage — kita bahas tuntas di episode 21.
Untuk instalasi sistem-global atau CI, unduh archive langsung dari halaman releases repository roadrunner-server/roadrunner:
curl -L -o rr.tar.gz \
https://github.com/roadrunner-server/roadrunner/releases/download/v2025.1.15/roadrunner-2025.1.15-linux-amd64.tar.gz
tar xzf rr.tar.gz
sudo mv roadrunner-2025.1.15-linux-amd64/rr /usr/local/bin/rrWarning
Jangan pernah mengunduh binary RoadRunner dari sumber tidak resmi, dan selalu verifikasi versi lewat ./rr --version. Karena RoadRunner mengeksekusi PHP dan membuka port jaringan, binary yang dicuri/ter-modifikasi adalah risiko keamanan serius — tema yang kita dalami di episode 18.
.rr.yamlFile config RoadRunner adalah YAML dengan blok-blok plugin. Urutan blok tidak penting, tetapi konsistensi dan indentasi YAML sangat penting. Template minimal yang siap dipakai:
version: "3"
server:
command: "php app.php"
relay: pipes
env:
- APP_ENV: local
- APP_DEBUG: "false"
http:
address: 0.0.0.0:8080
middleware: ["gzip"]
pool:
num_workers: 4
max_jobs: 500
max_worker_memory: 128
rpc:
listen: tcp://127.0.0.1:6001
logs:
mode: production
level: infoMari bedah setiap blok:
| Blok | Fungsi |
|---|---|
version | Versi format config (saat ini "3") — penting untuk kompatibilitas |
server | Perintah spawn worker, jalur relay, dan environment variable worker |
http | Plugin HTTP: alamat listen, middleware, dan konfigurasi pool |
rpc | Port RPC untuk komunikasi aplikasi PHP ke plugin |
logs | Konfigurasi logging RoadRunner (kita bahas di episode 9) |
Perhatikan blok env di server — ini cara melewatkan environment ke worker PHP. Karena worker adalah proses terpisah, env dari shell tidak otomatis ikut. Nilai boolean dan numerik sebaiknya ditulis sebagai string di YAML agar tidak berubah tipe saat dibaca PHP.
RoadRunner hanya memuat plugin yang blok config-nya ada di .rr.yaml. Ini adalah mekanisme enable/disable utama:
http:, grpc:, kv:).Kecuali plugin HTTP, RPC, dan server yang selalu dimuat binary. Contoh: untuk mematikan plugin HTTP, hapus blok http. Untuk menambah gRPC nanti, cukup tambahkan blok grpc (episode 16). Tidak ada daftar "load" terpisah — config YAML adalah sumber kebenaran.
Tip
Jalankan ./rr list untuk melihat plugin yang aktif pada binary kalian. Perhatikan bahwa binary resmi sudah berisi semua plugin umum; kalian hanya perlu "menghidupkannya" lewat blok config. Binary custom dengan plugin tambahan dibahas di episode 23 (Velox).
Sebelum rr serve, biasakan memvalidasi config dan mengecek versi plugin:
./rr config:verify -c .rr.yaml
./rr list
./rr serve -c .rr.yaml./rr config:verify mem-parsing config dan melaporkan error struktur/tipe sebelum server benar-benar jalan. ./rr serve -c .rr.yaml menjalankan server; karena blok http ada, RoadRunner mulai mendengarkan di 0.0.0.0:8080 dan spawn worker php app.php — yang belum kita buat (itu tugas episode 4). Server akan menampilkan error bila file app.php tidak ada; itu normal pada tahap ini.
Untuk menghentikan server dengan bersih, tekan Ctrl+C (SIGINT). Untuk graceful restart worker tanpa downtime, kirim SIGUSR2 — fitur yang tersedia sejak v2025.1.8:
kill -USR2 $(pgrep -f "rr serve")Beberapa kesalahan yang sering terjadi dan cara membacanya:
| Gejala | Penyebab | Solusi |
|---|---|---|
config: invalid ... | Indentasi YAML salah atau key salah nama | Jalankan rr config:verify, cek spasi vs tab |
| Plugin tidak aktif padahal dikonfigurasi | Salah blok parent / salah eja key | Bandingkan dengan dokumentasi plugin resmi |
Worker error unable to find ... app.php | server.command menunjuk file yang tidak ada | Buat file worker atau perbaiki path |
| Port sudah terpakai | http.address bentrok | Ganti port atau hentikan proses lain |
Pada episode 3 ini, kalian telah menguasai instalasi dan fondasi config.
Inti yang harus dibawa pulang:
rr get untuk dev, image Docker untuk production, archive GitHub untuk global..rr.yaml berisi blok server, http, rpc, logs, dan blok plugin lainnya../rr config:verify sebelum rr serve.SIGUSR2 (sejak v2025.1.8).Di episode 4 selanjutnya, kita membuat worker dan PSR-7 handling — menulis app.php dengan spiral/roadrunner-worker, memahami kelas Worker dan PSR7Worker, serta membangun aplikasi HTTP sederhana yang benar-benar merespons request. Sampai jumpa di episode 4!