ServBay'de Webman Projesi Oluşturma ve Çalıştırma
Webman Nedir?
Webman, yüksek eşzamanlılık ve performans gerektiren web uygulamaları oluşturmak için tasarlanmış, Workerman tabanlı bir PHP asenkron web çerçevesidir. Geleneksel, senkron ve engelleyici framework'lerden farklı olarak Webman, olay tabanlı ve asenkron, engellemeyen I/O modelini kullanır. Bu sayede çok sayıda eşzamanlı isteği etkin bir şekilde işleyebilir. Webman basit ve kullanışlı bir API ile esnek eklenti destekleri sunar; gerçek zamanlı uygulamalar, API servisleri, mikroservisler gibi projelerde rahatlıkla kullanılabilir.
Webman'ın Başlıca Özellikleri ve Avantajları
- Yüksek Performans: Workerman altyapısıyla, olay yönelimli ve asenkron I/O sayesinde milyonlarca eşzamanlı bağlantıyı verimli şekilde yönetir; geleneksel senkron framework'lerden çok daha yüksek bir işlem kapasitesine sahiptir.
- Kullanım Kolaylığı: Basit, sezgisel API'leri ve fonksiyon zenginliği sayesinde geliştiriciler hızlıca uygulama geliştirebilir.
- Çoklu Protokol Desteği: HTTP, WebSocket gibi birçok yaygın uygulama katmanı protokolünü yerleşik olarak sunar, farklı türde servisler geliştirmeyi kolaylaştırır.
- Esnek Genişletme: Composer paketleri, eklentiler ve middleware mekanizmaları üzerinden framework işlevlerini rahatça geliştirebilirsiniz.
- Düşük Kaynak Tüketimi: Webman, klasik web sunucusu + PHP-FPM modelinin aksine, bellekte sürekli çalışan bir uygulamadır ve kaynak kullanımı düşüktür.
- Güçlü Topluluk Desteği: Aktif geliştirici topluluğu ve zengin dökümantasyon sayesinde teknik desteğe kolayca ulaşırsınız.
Webman, düşük gecikme ve yüksek eşzamanlılık gerektiren API servisleri ve web uygulamaları için ideal bir gelişme ortamı sunar.
ServBay ile Kolay Webman Projesi Oluşturma ve Çalıştırma
Bu rehberde, ServBay yerel geliştirme ortamında Webman kullanarak örnek bir web projesi oluşturmayı, temel rotalar ve kontrolör kodunu yazmayı, ServBay ile sunulan veritabanı (MySQL, PostgreSQL) ve önbellek servislerini (Redis, Memcached) entegre etmeyi adım adım göstereceğiz.
TIP
ServBay, tüm yerel web sitelerinizin /Applications/ServBay/www
dizininde tutulmasını önerir. Böylece ServBay panelinden site yapılandırmasını (eski adıyla "host" ayarlarını) kolayca yönetebilirsiniz.
Ön Gereksinimler
Başlamadan önce aşağıdaki hazırlıkları tamamladığınızdan emin olun:
- ServBay Kurulumu: macOS üzerinde ServBay'i başarıyla kurdunuz. ServBay, PHP, Composer, MySQL, PostgreSQL, Redis, Memcached gibi bu rehberde ihtiyaç duyulan tüm yazılımları paket halinde sunar.
- Gerekli Paketlerin Etkinliği: ServBay kontrol panelinden, aşağıdaki paketlerin kurulu ve çalışır durumda olduğundan emin olun:
- Seçtiğiniz PHP sürümü (En güncel sürümü, ör. PHP 8.x, tavsiye edilir)
- Composer (ServBay ile entegre)
- MySQL
- PostgreSQL
- Redis
- Memcached
- Seçtiğiniz PHP sürümünde,
memcached
,redis
,pdo_mysql
,pdo_pgsql
gibi gerekli PHP uzantılarının etkin olduğunu kontrol edin. ServBay genellikle bu uzantıları varsayılan olarak açar; PHP ayarlarından doğrulayabilirsiniz.
- Terminal Kullanımı: macOS Terminal uygulamasına ve temel komutlara aşinasınız.
Webman Kurulumu
Composer'ın Kullanılabilir Olduğunu Doğrulayın
ServBay, Composer'ı hazır şekilde getirir ve terminalden doğrudan kullanabilirsiniz. Aşağıdaki komutla doğrulama yapın:
bashcomposer --version
1Composer sürüm bilgisi doğru görüntüleniyorsa, Composer kullanıma hazır demektir.
ServBay Proje Dizini'ne Geçiş Yapın
Terminali açıp ServBay’in tavsiye edilen web dizinine geçin:
bashcd /Applications/ServBay/www
1Composer ile Webman Projesi Oluşturun
Aşağıdaki Composer
create-project
komutuyla Webman framework'ünü belirtilen ad klasörüne kurun. Projeyiservbay-webman-app
olarak isimlendiriyoruz:bashcomposer create-project workerman/webman servbay-webman-app
1Composer, Webman ve çekirdek bağımlılıklarını
servbay-webman-app
dizinine indirecektir.Proje Dizinine Girin
Kurulum tamamlandıktan sonra ilgili klasöre geçin:
bashcd servbay-webman-app
1Gerekli Bileşenleri Kurun
Veritabanı ve önbellek özelliğini gösterebilmek için ek Composer paketleri gereklidir. Webman genellikle
illuminate/database
(Laravel’ın veritabanı bileşeni) veilluminate/redis
kullanır.-W
(--with-dependencies
) seçeneği, potansiyel bağımlılık uyuşmazlıklarını çözer.bashcomposer require -W illuminate/database illuminate/redis illuminate/pagination illuminate/events symfony/var-dumper
1Bu komut; ORM, Redis istemcisi, sayfalama bileşeni, event dispatcher ve hata ayıklama için VarDumper'ı yükler.
Veritabanı ve Tablo Oluşturma
Örnek kodların çalışması için ServBay’deki MySQL ve PostgreSQL veritabanlarında gerekli veritabanı ve users
tablosunu oluşturalım. ServBay'de varsayılan root
kullanıcı parolası password
'dur.
Veritabanı yönetimi için ServBay'in panelinden phpMyAdmin veya pgAdmin web arayüzünü ya da terminal komutlarını kullanabilirsiniz.
webman_app
Veritabanı Oluşturma- 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:
webman_app
Veritabanındausers
Tablosu Oluşturma- 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; -- Yeni veritabanına geçiş 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:
Web Proje Kodunu Yazma
Şimdi örnek rotaları, kontrolörleri ve veritabanı/önbellek etkileşimlerini ekleyeceğiz.
Rota Yapılandırması
Proje kök dizinindeki
config/route.php
dosyasına aşağıdaki kodu ekleyin:php<?php use Webman\Route; use app\controller\IndexController; use app\controller\CacheController; use app\controller\DatabaseController; // Ana dizin rotasını tanımlayın, IndexController'ın index metoduna yönlendirir Route::any('/', [IndexController::class, 'index']); // Önbellek ile ilgili rotalar Route::any('/memcached', [CacheController::class, 'memcached']); Route::any('/redis', [CacheController::class, 'redis']); // Veritabanı ile ilgili rotalar 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']); // Buraya başka rotalar ekleyebilirsiniz...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21Kontrolör Dosyalarını Oluşturun
app/controller
dizinindeIndexController.php
,CacheController.php
veDatabaseController.php
dosyalarını oluşturun ve karşılık gelen kodları ekleyin.app/controller/IndexController.php
: Ana sayfa isteklerini işler.php<?php namespace app\controller; use support\Request; use support\Response; // Response sınıfını ekleyin class IndexController { /** * Ana dizin isteklerini işleyen örnek metod * @param Request $request Mevcut istek nesnesi * @return Response Bir Response nesnesi dönüşü */ public function index(Request $request): Response // Tip dönüşü net { // Basit bir metin cevabı döndürür return response('Hello ServBay & Webman!'); // Hoş geldiniz mesajı } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20app/controller/CacheController.php
: Memcached ve Redis kullanımını gösterir.php<?php namespace app\controller; use support\Request; use support\Response; use Memcached; // Memcached sınıfı use support\Redis; // Webman'ın Redis Facade'ı class CacheController { /** * Memcached kullanım örneği * @param Request $request * @return Response */ public function memcached(Request $request): Response { // Memcached sunucusuna bağlan, ServBay varsayılanı 127.0.0.1:11211 $memcached = new Memcached(); $memcached->addServer('127.0.0.1', 11211); // Anahtarı ayarla, 60 saniye süreli $success = $memcached->set('servbay_key', 'Hello Memcached from ServBay!', 60); // Anahtar ve değer güncellendi if (!$success) { return response('Memcached anahtarı ayarlanamadı', 500); } // Anahtarı getir $value = $memcached->get('servbay_key'); // Anahtar güncellendi // Sonucu döndür return response($value ?: 'Memcached anahtarı bulunamadı veya süresi doldu'); // Bulunamazsa uyarı } /** * Redis kullanım örneği * @param Request $request * @return Response */ public function redis(Request $request): Response { // Redis Facade ile anahtar ayarla Redis::set('servbay_redis_key', 'Hello Redis from ServBay!'); // Anahtar ve değer güncellendi // Anahtarı getir $value = Redis::get('servbay_redis_key'); // Anahtar güncellendi // Sonucu döndür return response($value ?: 'Redis anahtarı bulunamadı'); // Bulunamazsa uyarı } }
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
: MySQL ve PostgreSQL işlemlerini gösterir.php<?php namespace app\controller; use support\Request; use support\Response; use support\Db; // Webman’ın Db Facade’ı class DatabaseController { /** * MySQL veritabanına kullanıcı ekleme * @param Request $request * @return Response */ public function mysqlAdd(Request $request): Response { try { // 'mysql' bağlantısıyla tabloya veri ekle Db::connection('mysql')->table('users')->insert([ 'name' => 'ServBay Webman MySQL User', // Örnek veri 'email' => 'mysql_demo@servbay.test', // Örnek e-posta 'created_at' => date('Y-m-d H:i:s') // Tarih ekle ]); return response('Kullanıcı MySQL’e eklendi'); // Yanıt mesajı } catch (\Exception $e) { return response('MySQL’e kullanıcı eklenirken hata: ' . $e->getMessage(), 500); // Hata yönetimi } } /** * MySQL veritabanından kullanıcıları getirme * @param Request $request * @return Response */ public function mysqlGet(Request $request): Response { try { // 'mysql' bağlantısıyla tüm kullanıcıları getir $users = Db::connection('mysql')->table('users')->get(); // JSON olarak döndür return response(json_encode($users), 200, ['Content-Type' => 'application/json']); // Content-Type açık } catch (\Exception $e) { return response('MySQL’den kullanıcılar getirilemedi: ' . $e->getMessage(), 500); // Hata yönetimi } } /** * PostgreSQL veritabanına kullanıcı ekleme * @param Request $request * @return Response */ public function pgsqlAdd(Request $request): Response { try { // 'pgsql' bağlantısıyla tabloya veri ekle Db::connection('pgsql')->table('users')->insert([ 'name' => 'ServBay Webman PgSQL User', // Örnek veri 'email' => 'pgsql_demo@servbay.test', // Örnek e-posta 'created_at' => date('Y-m-d H:i:s') // Tarih ekle ]); return response('Kullanıcı PostgreSQL’e eklendi'); // Yanıt mesajı } catch (\Exception $e) { return response('PostgreSQL’e kullanıcı eklenirken hata: ' . $e->getMessage(), 500); // Hata yönetimi } } /** * PostgreSQL veritabanından kullanıcıları getirme * @param Request $request * @return Response */ public function pgsqlGet(Request $request): Response { try { // 'pgsql' bağlantısıyla tüm kullanıcıları getir $users = Db::connection('pgsql')->table('users')->get(); // JSON olarak döndür return response(json_encode($users), 200, ['Content-Type' => 'application/json']); // Content-Type açık } catch (\Exception $e) { return response('PostgreSQL’den kullanıcılar getirilemedi: ' . $e->getMessage(), 500); // Hata yönetimi } } }
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
Veritabanı Bağlantısını Yapılandırma
Kök dizindeki
config/database.php
dosyasını açın ve MySQL ile PostgreSQL için aşağıdaki ayarları yapın. ServBay'de varsayılan veritabanı sunucusu127.0.0.1
olup, MySQL için port3306
, PostgreSQL için5432
, kullanıcı adıroot
, parola isepassword
'dur.php<?php /** * Veritabanı yapılandırması */ return [ // Varsayılan veritabanı bağlantısı 'default' => 'mysql', // Bağlantı listesi 'connections' => [ 'mysql' => [ 'driver' => 'mysql', // ServBay'in varsayılan MySQL adresi ve portu 'host' => '127.0.0.1', 'port' => 3306, // Oluşturulan veritabanı adı 'database' => 'webman_app', // ServBay'in varsayılan MySQL kullanıcı adı 'username' => 'root', // Varsayılan MySQL parolası 'password' => 'password', 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'strict' => true, 'engine' => null, ], 'pgsql' => [ 'driver' => 'pgsql', // ServBay'in varsayılan PostgreSQL adresi ve portu 'host' => '127.0.0.1', 'port' => 5432, // Oluşturulan veritabanı adı 'database' => 'webman_app', // Varsayılan PostgreSQL kullanıcı adı 'username' => 'root', // Varsayılan PostgreSQL parolası 'password' => 'password', 'charset' => 'utf8', 'prefix' => '', 'schema' => 'public', 'sslmode' => 'prefer', // veya require, verify-ca, verify-full ], // Buraya farklı veritabanı bağlantıları ekleyebilirsiniz... ], ];
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Önemli Not: Gerçek sunucu ortamında, varsayılan veritabanı şifresini kesinlikle değiştirin ve hassas verileri kod içinde açık bırakmayın.
Webman Projesini Çalıştırma
Webman projeleri genellikle kendi start.php
dosyasıyla Workerman işlemlerini başlatır. Bu kullanım, klasik Nginx/Apache + PHP-FPM yaklaşımından farklıdır; Webman, bellekte sürekli çalışan asenkron bir uygulamadır.
Proje dizini (/Applications/ServBay/www/servbay-webman-app
) altında aşağıdaki komutu çalıştırarak Webman'i başlatın:
bash
php start.php start
1
Bu komut sonrası Webman’in başladığına dair bilgiler göreceksiniz; varsayılan olarak HTTP isteklerini 127.0.0.1:8787
adresinden dinler.
- Not: Buradaki
php
komutunu ServBay’in ortamındaki PHP'yi kullanarak çalıştırıyorsunuz. ServBay, terminal ortamınızı otomatik olarak ayarlayacağı için ekstra bir işlem gerekmez. - Webman’i arka planda çalıştırmak isterseniz:
php start.php start -d
- Servisi durdurmak için:
php start.php stop
- Yeniden başlatmak için:
php start.php restart
- Kesintisiz (sorunsuz) yeniden başlatmak için:
php start.php reload
Projeyi Test Etme
Webman başarıyla 127.0.0.1:8787
adresini dinlemeye başladıysa, aşağıdaki URL’ler üzerinden tarayıcıda çeşitli fonksiyonları test edebilirsiniz:
http://localhost:8787/
: EkrandaHello ServBay & Webman!
mesajını göreceksiniz.http://localhost:8787/memcached
: EkrandaHello Memcached from ServBay!
mesajı çıkar. Bu, ServBay’in Memcached servisinin entegre şekilde çalıştığını gösterir.http://localhost:8787/redis
: EkrandaHello Redis from ServBay!
mesajı çıkar. ServBay’in Redis hizmetinin entegre olarak kullanıldığının göstergesidir.http://localhost:8787/mysql-add
: EkrandaKullanıcı MySQL’e eklendi
mesajı çıkar. MySQL veritabanındakiusers
tablosuna bir kayıt eklenir.http://localhost:8787/mysql
: Ekranda, MySQL veritabanındakiusers
tablosunu JSON formatında görürsünüz.http://localhost:8787/pgsql-add
: EkrandaKullanıcı PostgreSQL’e eklendi
mesajı çıkar. PostgreSQL'dekiusers
tablosuna bir kayıt eklenir.http://localhost:8787/pgsql
: Ekranda, PostgreSQL veritabanındakiusers
tablosunu JSON formatında görürsünüz.
Bu URL’leri kullanırken sorun yaşarsanız, Webman’in terminal çıktısını kontrol edin ve ServBay’deki MySQL, PostgreSQL, Redis, Memcached servislerinin çalıştığından veya PHP uzantılarının etkin olduğundan emin olun.
Sık Sorulan Sorular (SSS)
- S:
php start.php start
komutu bulunamıyor mu?- C: Terminalde bulunduğunuz dizinin
servbay-webman-app
olduğunu kontrol edin (cd
ile geçin). ServBay’in kurduğu PHP’nin PATH’e eklendiğinden emin olun (ServBay bunu otomatik ayarlar).
- C: Terminalde bulunduğunuz dizinin
- S:
localhost:8787
adresi bağlantı hatası veriyor mu?- C: Terminaldeki
php start.php start
çıktısını inceleyin; hata var mı bakın. Port8787
başka bir uygulama tarafından kullanılıyorsa Webman’ınconfig/server.php
dosyasından portu değiştirebilirsiniz.
- C: Terminaldeki
- S: Veritabanı bağlantı hatası mı veriyor?
- C: ServBay’de MySQL ve PostgreSQL servislerinin çalışır olduğundan emin olun.
config/database.php
dosyasında adres, port, veritabanı adı, kullanıcı adı ve parola bilgilerini doğrulayın (varsayılan kullanıcıroot
, parolapassword
).webman_app
veritabanı veusers
tablosunun mevcut olduğundan emin olun.
- C: ServBay’de MySQL ve PostgreSQL servislerinin çalışır olduğundan emin olun.
- S: Memcached veya Redis bağlantısı hatalı mı?
- C: ServBay’de Memcached ve Redis servislerinin aktif olduğundan emin olun.
app/controller/CacheController.php
dosyasındaki adres ve portları kontrol edin (varsayılan olarak127.0.0.1:11211
ve127.0.0.1:6379
). Kullandığınız PHP sürümündememcached
veredis
uzantılarının aktif olduğunu kontrol edin.
- C: ServBay’de Memcached ve Redis servislerinin aktif olduğundan emin olun.
Sonuç
Bu adımlar ile ServBay yerel geliştirme ortamında bir Webman projesini başarıyla oluşturup çalıştırdınız; ServBay'in sağladığı tek noktadan kurulum sayesinde Webman ortamını hızlıca ayağa kaldırdınız ve veritabanı ile önbellek entegrasyonunu öğrendiniz. Webman’ın üstün performansı ile ServBay’in pratikliği birleşince, asenkron PHP uygulamalarınızı çok daha hızlı geliştirebilirsiniz. Umarız bu rehber, ServBay ve Webman platformlarını maksimum verimle kullanmanıza yardımcı olur.