Membuat dan Menjalankan Proyek Webman di ServBay
Apa itu Webman?
Webman adalah framework web PHP asinkron berkinerja tinggi yang dibangun di atas Workerman, dirancang khusus untuk membangun aplikasi web dengan tingkat concurrent request yang tinggi dan performa optimal. Berbeda dengan framework sinkron tradisional yang biasanya bersifat blocking, Webman mengadopsi model event-driven dan I/O asinkron non-blocking, sehingga sangat efisien saat menangani banyak permintaan secara bersamaan. Webman menawarkan API yang sederhana dan mekanisme ekstensi yang fleksibel, sangat cocok digunakan untuk aplikasi realtime, layanan API, microservice, dan banyak aplikasi modern lainnya.
Fitur Utama dan Keunggulan Webman
- Performa Tinggi: Dibangun di atas Workerman dengan event-driven dan I/O asinkron non-blocking, Webman dapat menangani jutaan koneksi secara concurrent, throughput melebihi framework sinkron tradisional.
- Mudah Digunakan: Menyediakan API yang mudah dipahami serta fitur-fitur lengkap sehingga developer dapat langsung mulai membangun proyek dengan efektif.
- Dukungan Multi-Protokol: Mendukung berbagai protokol aplikasi populer seperti HTTP, WebSocket, dll, memudahkan pengembangan berbagai tipe layanan.
- Ekstensi Fleksibel: Mudah diperluas menggunakan paket Composer, plugin maupun mekanisme middleware.
- Sumber Daya Efisien: Webman berjalan sebagai aplikasi resident di memori, berbeda dari pola server web tradisional + PHP-FPM, sehingga konsumsi resource lebih rendah.
- Komunitas Aktif: Didukung komunitas developer yang aktif dan dokumentasi yang lengkap.
Webman membantu developer membangun aplikasi web dan layanan API yang dapat diandalkan dan berkinerja tinggi dengan mudah, terutama untuk kebutuhan skalabilitas tinggi dan latensi rendah.
Membuat dan Menjalankan Proyek Webman Sederhana di ServBay
Panduan ini menjelaskan secara detail bagaimana cara membuat dan menjalankan proyek web sederhana menggunakan Webman di lingkungan pengembangan lokal ServBay. Anda akan dipandu mulai dari instalasi Webman, penulisan kode rute dan controller dasar, hingga integrasi database (MySQL, PostgreSQL) serta layanan cache (Redis, Memcached) yang disediakan ServBay.
TIP
ServBay menyarankan menyimpan seluruh proyek website lokal di direktori /Applications/ServBay/www
agar mudah dikelola, contohnya untuk konfigurasi website lokal (sebelumnya disebut “Host”).
Prasyarat
Sebelum memulai, pastikan Anda sudah melakukan langkah berikut:
- Instal ServBay: ServBay sudah terinstal di macOS Anda dan siap digunakan. ServBay menyediakan seluruh lingkungan pengembangan lokal lengkap: PHP, Composer, MySQL, PostgreSQL, Redis, Memcached, dan semua paket yang dibutuhkan tutorial ini.
- Aktifkan Paket yang Dibutuhkan: Lewat panel kontrol ServBay, pastikan semua paket berikut telah diinstal dan berjalan:
- Versi PHP pilihan Anda (disarankan PHP terbaru seperti PHP 8.x)
- Composer (sudah terintegrasi di ServBay)
- MySQL
- PostgreSQL
- Redis
- Memcached
- Pastikan PHP yang digunakan telah mengaktifkan ekstensi
memcached
,redis
,pdo_mysql
,pdo_pgsql
dan lain-lain sesuai kebutuhan. Secara default, ServBay biasa mengaktifkan ekstensi umum ini; Anda bisa mengeceknya di halaman konfigurasi PHP di ServBay.
- Akses Terminal: Sudah terbiasa menggunakan aplikasi Terminal di macOS.
Instalasi Webman
Pastikan Composer Tersedia
ServBay sudah dilengkapi Composer dan dikonfigurasi agar dapat langsung dipakai di terminal. Jalankan perintah berikut di terminal untuk memastikan:
bashcomposer --version
1Jika versi Composer tampil, Composer siap digunakan.
Masuk ke Direktori Website ServBay
Buka terminal dan arahkan ke direktori root website yang disarankan oleh ServBay:
bashcd /Applications/ServBay/www
1Buat Proyek Webman dengan Composer
Gunakan perintah
create-project
Composer untuk menginstal kerangka Webman ke folder yang dipilih. Misal kita beri nama proyekservbay-webman-app
:bashcomposer create-project workerman/webman servbay-webman-app
1Composer akan mengunduh Webman serta seluruh dependensi intinya ke folder
servbay-webman-app
.Masuk ke Direktori Proyek
Setelah instalasi selesai, masuk ke folder proyek yang baru dibuat:
bashcd servbay-webman-app
1Instal Komponen yang Dibutuhkan
Untuk demo interaksi database dan cache, instal beberapa paket Composer tambahan. Webman biasanya menggunakan
illuminate/database
(komponen database Laravel),illuminate/redis
, dll. Parameter-W
(--with-dependencies
) memastikan kompatibilitas dan mengatasi kemungkinan konflik dependensi.bashcomposer require -W illuminate/database illuminate/redis illuminate/pagination illuminate/events symfony/var-dumper
1Perintah ini akan menginstal ORM database, client Redis, komponen paging, event dispatcher, dan tool debugging VarDumper.
Membuat Database dan Tabel
Agar kode contoh dapat dijalankan, buatlah database dan tabel users
di MySQL maupun PostgreSQL ServBay. Secara default password database user root
ServBay adalah password
.
Gunakan tool manajemen database yang disediakan ServBay seperti phpMyAdmin atau pgAdmin (akses lewat panel ServBay), maupun CLI untuk menjalankan perintah SQL di bawah.
Membuat Database
webman_app
- MySQL:sql
CREATE DATABASE IF NOT EXISTS webman_app CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
1 - PostgreSQL:sql
CREATE DATABASE webman_app;
1
- MySQL:
Membuat Tabel
users
di Databasewebman_app
- MySQL:sql
USE webman_app; CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
1
2
3
4
5
6
7 - PostgreSQL:sql
\c webman_app; -- Connect ke database baru CREATE TABLE users ( id SERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
1
2
3
4
5
6
7
- MySQL:
Menulis Kode Proyek Web
Selanjutnya kita akan menambahkan kode untuk mendefinisikan route, membuat controller, serta mengimplementasikan logika interaksi dengan database dan layanan cache.
Konfigurasi Route
Sunting file
config/route.php
di root proyek, lalu tambahkan kode berikut untuk mendefinisikan route yang dibutuhkan:php<?php use Webman\Route; use app\controller\IndexController; use app\controller\CacheController; use app\controller\DatabaseController; // Definisi route untuk root (/), diarahkan ke method index di IndexController Route::any('/', [IndexController::class, 'index']); // Route terkait cache Route::any('/memcached', [CacheController::class, 'memcached']); Route::any('/redis', [CacheController::class, 'redis']); // Route terkait database Route::any('/mysql-add', [DatabaseController::class, 'mysqlAdd']); Route::any('/mysql', [DatabaseController::class, 'mysqlGet']); Route::any('/pgsql-add', [DatabaseController::class, 'pgsqlAdd']); Route::any('/pgsql', [DatabaseController::class, 'pgsqlGet']); // Tambahkan lebih banyak route di sini jika diperlukan...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21Buat File Controller
Buat file
IndexController.php
,CacheController.php
, danDatabaseController.php
di folderapp/controller
, lalu isi dengan kode masing-masing berikut.app/controller/IndexController.php
: Menangani permintaan ke root.php<?php namespace app\controller; use support\Request; use support\Response; // Mengimpor kelas Response class IndexController { /** * Contoh method untuk menangani request ke root * @param Request $request Objek request saat ini * @return Response Mengembalikan objek Response */ public function index(Request $request): Response // Return type diperjelas { // Mengembalikan response teks sederhana return response('Hello ServBay & Webman!'); // Info welcome diperbarui } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20app/controller/CacheController.php
: Contoh penggunaan Memcached & Redis.php<?php namespace app\controller; use support\Request; use support\Response; use Memcached; // Mengimpor kelas Memcached use support\Redis; // Mengimpor Redis Facade dari Webman class CacheController { /** * Contoh penggunaan Memcached * @param Request $request * @return Response */ public function memcached(Request $request): Response { // Hubungkan ke server Memcached (default ServBay di 127.0.0.1:11211) $memcached = new Memcached(); $memcached->addServer('127.0.0.1', 11211); // Set cache item, berlaku selama 60 detik $success = $memcached->set('servbay_key', 'Hello Memcached from ServBay!', 60); // Key & value diperbarui if (!$success) { return response('Failed to set Memcached key', 500); } // Ambil cache item $value = $memcached->get('servbay_key'); // Key diperbarui // Kembalikan nilai yang diambil return response($value ?: 'Memcached key not found or expired'); // Pesan jika tidak ditemukan ditambahkan } /** * Contoh penggunaan Redis * @param Request $request * @return Response */ public function redis(Request $request): Response { // Menggunakan Redis Facade dari Webman untuk set cache item Redis::set('servbay_redis_key', 'Hello Redis from ServBay!'); // Key & value diperbarui // Mengambil cache item dengan Redis Facade $value = Redis::get('servbay_redis_key'); // Key diperbarui // Kembalikan nilai yang diambil return response($value ?: 'Redis key not found'); // Pesan jika tidak ditemukan ditambahkan } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52app/controller/DatabaseController.php
: Contoh operasi database MySQL & PostgreSQL.php<?php namespace app\controller; use support\Request; use support\Response; use support\Db; // Mengimpor Db Facade dari Webman class DatabaseController { /** * Menambah user ke database MySQL * @param Request $request * @return Response */ public function mysqlAdd(Request $request): Response { try { // Insert data ke database MySQL dengan Db Facade Db::connection('mysql')->table('users')->insert([ 'name' => 'ServBay Webman MySQL User', // Contoh data diperbarui 'email' => 'mysql_demo@servbay.test', // Contoh email diperbarui 'created_at' => date('Y-m-d H:i:s') // created_at ditambahkan ]); return response('User added to MySQL'); // Respon diperbarui } catch (\Exception $e) { return response('Error adding user to MySQL: ' . $e->getMessage(), 500); // Penanganan error ditambahkan } } /** * Mengambil daftar user dari database MySQL * @param Request $request * @return Response */ public function mysqlGet(Request $request): Response { try { // Ambil semua user dari MySQL menggunakan Db Facade $users = Db::connection('mysql')->table('users')->get(); // Kembalikan daftar user dalam format JSON return response(json_encode($users), 200, ['Content-Type' => 'application/json']); // Content-Type diperjelas } catch (\Exception $e) { return response('Error getting users from MySQL: ' . $e->getMessage(), 500); // Penanganan error } } /** * Menambah user ke database PostgreSQL * @param Request $request * @return Response */ public function pgsqlAdd(Request $request): Response { try { // Insert data ke PostgreSQL menggunakan Db Facade Db::connection('pgsql')->table('users')->insert([ 'name' => 'ServBay Webman PgSQL User', // Contoh data 'email' => 'pgsql_demo@servbay.test', // Contoh email 'created_at' => date('Y-m-d H:i:s') // created_at ]); return response('User added to PostgreSQL'); // Respon } catch (\Exception $e) { return response('Error adding user to PostgreSQL: ' . $e->getMessage(), 500); // Handle error } } /** * Mengambil daftar user dari database PostgreSQL * @param Request $request * @return Response */ public function pgsqlGet(Request $request): Response { try { // Ambil semua user dari PostgreSQL menggunakan Db Facade $users = Db::connection('pgsql')->table('users')->get(); // Kembalikan daftar user dalam format JSON return response(json_encode($users), 200, ['Content-Type' => 'application/json']); // Content-Type } catch (\Exception $e) { return response('Error getting users from PostgreSQL: ' . $e->getMessage(), 500); // Handle error } } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
Konfigurasi Koneksi Database
Edit file
config/database.php
di root proyek untuk mengatur koneksi MySQL & PostgreSQL. Default host ServBay adalah127.0.0.1
, port masing-masing adalah3306
(MySQL) dan5432
(PostgreSQL), password userroot
adalahpassword
.php<?php /** * Konfigurasi Database */ return [ // Koneksi database default 'default' => 'mysql', // Daftar konfigurasi koneksi database 'connections' => [ 'mysql' => [ 'driver' => 'mysql', // Host & port default ServBay untuk MySQL 'host' => '127.0.0.1', 'port' => 3306, // Nama database yang telah dibuat sebelumnya 'database' => 'webman_app', // Username default ServBay 'username' => 'root', // Password default ServBay 'password' => 'password', 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'strict' => true, 'engine' => null, ], 'pgsql' => [ 'driver' => 'pgsql', // Host & port default ServBay untuk PostgreSQL 'host' => '127.0.0.1', 'port' => 5432, // Nama database 'database' => 'webman_app', // Username default ServBay 'username' => 'root', // Password default ServBay 'password' => 'password', 'charset' => 'utf8', 'prefix' => '', 'schema' => 'public', 'sslmode' => 'prefer', // Bisa 'require', 'verify-ca', 'verify-full' ], // Tambahkan koneksi database lainnya di sini jika perlu... ], ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46Penting: Di lingkungan produksi, selalu ubah password database default dan hindari hardcode informasi sensitif ke dalam kode.
Menjalankan Proyek Webman
Proyek Webman dijalankan dengan script start.php
yang secara otomatis memulai proses Workerman, berbeda dengan pola Nginx/Apache + PHP-FPM tradisional. Webman berjalan sebagai aplikasi asinkron yang resident di memori.
Jalankan perintah berikut di root proyek (/Applications/ServBay/www/servbay-webman-app
) untuk memulai Webman:
bash
php start.php start
1
Anda akan melihat info startup Webman. Secara default, Webman akan mendengarkan HTTP di 127.0.0.1:8787
.
- Catatan: Perintah
php
di sini menggunakan binary PHP dari lingkungan ServBay, yang dikonfigurasi agar bisa langsung dipakai di terminal Anda. - Untuk menjalankan Webman di background gunakan parameter
-d
:php start.php start -d
. - Untuk menghentikan Webman:
php start.php stop
. - Untuk me-restart:
php start.php restart
. - Untuk melakukan reload (me-reload proses tanpa menghentikan request berjalan):
php start.php reload
.
Menguji Proyek Anda
Setelah Webman sukses berjalan dan listening di 127.0.0.1:8787
, Anda dapat mengakses URL berikut di browser untuk menguji setiap fitur:
http://localhost:8787/
: Akan menampilkan halaman dengan teksHello ServBay & Webman!
.http://localhost:8787/memcached
: Akan menampilkanHello Memcached from ServBay!
, menandakan integrasi Memcached berhasil.http://localhost:8787/redis
: Akan menampilkanHello Redis from ServBay!
, menandakan Redis bisa diakses dari Webman.http://localhost:8787/mysql-add
: Akan menampilkanUser added to MySQL
dan menambah record ke tabelusers
di database MySQL.http://localhost:8787/mysql
: Akan menampilkan output JSON berupa daftar user dari tabel MySQL.http://localhost:8787/pgsql-add
: Akan menampilkanUser added to PostgreSQL
dan menambah user di tabel PostgreSQL.http://localhost:8787/pgsql
: Akan menampilkan output JSON berupa daftar user dari tabel PostgreSQL.
Jika ada masalah saat mengakses URL di atas, cek output terminal Webman untuk error, pastikan MySQL, PostgreSQL, Redis, Memcached di ServBay berjalan, serta ekstensi PHP sudah aktif.
Pertanyaan yang Sering Diajukan (FAQ)
- Q: Perintah
php start.php start
tidak ditemukan?- A: Pastikan Anda sudah berada di direktori proyek
servbay-webman-app
lewat terminal. Juga cek apakah PHP dari ServBay sudah berada di PATH environment system Anda (ServBay biasanya menetapkan ini otomatis).
- A: Pastikan Anda sudah berada di direktori proyek
- Q: Mengakses
localhost:8787
gagal koneksi?- A: Periksa output terminal dari perintah
php start.php start
untuk error. Pastikan port8787
tidak digunakan aplikasi lain. Jika bentrok, Anda bisa mengubah port listening di file konfigurasi Webman (misal diconfig/server.php
).
- A: Periksa output terminal dari perintah
- Q: Gagal koneksi ke database?
- A: Pastikan MySQL dan PostgreSQL ServBay sedang berjalan. Periksa konfigurasi koneksi di
config/database.php
(host, port, database, username, password) sesuai setting ServBay (default userroot
, passwordpassword
). Databasewebman_app
dan tabelusers
sudah dibuat.
- A: Pastikan MySQL dan PostgreSQL ServBay sedang berjalan. Periksa konfigurasi koneksi di
- Q: Gagal koneksi Memcached atau Redis?
- A: Pastikan Memcached dan Redis ServBay aktif. Periksa alamat dan port yang digunakan di
app/controller/CacheController.php
(default127.0.0.1:11211
untuk Memcached,127.0.0.1:6379
untuk Redis). Pastikan ekstensimemcached
danredis
di PHP aktif.
- A: Pastikan Memcached dan Redis ServBay aktif. Periksa alamat dan port yang digunakan di
Ringkasan
Setelah mengikuti langkah-langkah di atas, Anda telah berhasil membuat, mengkonfigurasi, dan menjalankan proyek Webman sederhana di lingkungan pengembangan lokal ServBay. Anda telah belajar memanfaatkan ServBay yang all-in-one untuk membangun environment pengembangan Webman dengan cepat, beserta integrasi database dan cache. Dengan menggabungkan performa Webman dan kemudahan ServBay, pengembangan aplikasi PHP asinkron Anda kini jauh lebih praktis dan kuat. Semoga panduan ini membantu Anda memaksimalkan ServBay dan Webman untuk membangun aplikasi web terbaik.