ServBay ile Hapi.js Geliştirme Ortamı Kurulumu
Hapi.js, uygulama ve API'ler oluşturmak için kullanılan güçlü ve esnek bir Node.js framework’üdür. ServBay ise Node.js geliştiricileri için, Node.js runtime’ı, çeşitli veritabanları ve kolay yapılandırılabilir web sunucusu özellikleriyle entegre, pratik bir yerel geliştirme ortamı sunar. Bu makalede, ServBay ortamında bir Hapi.js projesi nasıl oluşturulur ve çalıştırılır, ServBay’in site özelliğiyle projeye nasıl erişim sağlanır, ayrıca ServBay’in gömülü veritabanlarına nasıl bağlantı kurulur adım adım gösterilecektir.
Hapi.js Nedir?
Hapi.js, Walmart Labs tarafından geliştirilen ve uygulama ile servisler inşa etmek için tasarlanmış, güçlü ve esnek bir Node.js framework’üdür. Güçlü eklenti sistemi, yapılandırmaya dayalı yaklaşımı ve yerleşik güvenlik özellikleriyle öne çıkan Hapi.js sayesinde, geliştiriciler yüksek performanslı ve sürdürülebilir web uygulamaları ve API'ler oluşturabilirler.
Hapi.js’in Öne Çıkan Özellikleri ve Avantajları
- Eklenti Sistemi: Hapi.js, güçlü ve kolayca kullanılabilen bir eklenti sistemine sahiptir. Bu sayede framework fonksiyonları kolayca genişletilebilir ya da uygulama mantığı tekrar kullanılabilir modüllere ayrılabilir.
- Yapılandırma Öncelikli Yaklaşım: Hapi.js, ayrıntılı yapılandırma seçenekleriyle rotalama, doğrulama, cache gibi işlemlerin tanımlanmasına olanak tanır.
- Girdi Doğrulama: Dahili Joi kütüphanesiyle bildirimsel veri doğrulaması sağlar; bu sayede veri bütünlüğü ve güvenliği desteklenir.
- Zengin Ekosistem: Aktif topluluğu ve çok sayıda resmi/üçüncü parti eklentiyle, kimlik doğrulama, yetkilendirme, cache, loglama gibi çeşitli ihtiyaçlar karşılanır.
- Güvenlik: Web güvenlik tehditlerine karşı girdi doğrulama, CORS kontrolü ve daha fazlası gibi yerleşik güvenlik araçları sunar.
- Loglama ve Hata Ayıklama: Detaylı istek yaşam döngüsü log’ları ve hata ayıklama araçlarını içerir.
Hapi.js ile geliştiriciler, iş mantıklarına odaklanırken karmaşık HTTP işlemleri, routing, doğrulama ve güvenlik konularını framework’e bırakabilir.
ServBay ile Hapi.js Projesi Oluşturma
Bu bölümde, ServBay’in sağladığı Node.js ortamında temel bir Hapi.js projesi oluşturma ve çalıştırma ile ServBay’in site (ters proxy) özelliği ile projeyi tarayıcıda erişime açmaya dair adımlar gösterilecektir.
Ön Koşullar
Başlamadan önce aşağıdakilerden emin olun:
- ServBay macOS cihazınıza başarıyla kuruldu.
- ServBay uygulamasında Node.js paketi etkinleştirildi. ServBay kontrol panelindeki "Paketler" sekmesinden Node.js'i bulup etkinleştirebilirsiniz.
- Temel terminal kullanımı ve Node.js’in npm paket yöneticisine aşinasınız.
Hapi.js Projesi Oluşturma
Proje Klasörünü Hazırlayın
Terminali açıp, ServBay’in önerdiği site kök dizini olan
/Applications/ServBay/www
yoluna girin. Burada yeni bir proje klasörü (örneğinservbay-hapi-app
) oluşturup içine geçin:bashcd /Applications/ServBay/www mkdir servbay-hapi-app cd servbay-hapi-app
1
2
3Node.js Projesi Başlatın
Proje klasöründe, yeni bir Node.js projesi başlatmak için npm’i kullanın:
bashnpm init -y
1Bu komut, proje kök dizininde bir
package.json
dosyası oluşturur.Hapi.js Bağımlılığını Kurun
Hapi.js temel kütüphanesini yükleyin:
bashnpm install @hapi/hapi
1Bu işlem,
@hapi/hapi
paketini projenizin bağımlılık listesine ekler.Uygulama Giriş Dosyasını Oluşturun
Proje kökünde
server.js
adında bir dosya oluşturup aşağıdaki kodları ekleyin. Bu kod, basit bir Hapi.js sunucusu kurar:javascript'use strict'; // Sıkı modu etkinleştirir const Hapi = require('@hapi/hapi'); const init = async () => { const server = Hapi.server({ port: process.env.PORT || 3000, // Varsayılan olarak 3000 portunu dinle, veya çevre değişkeninden PORT'u al host: 'localhost' // Yerel loopback adresini dinle }); // Basit ana rota tanımla server.route({ method: 'GET', path: '/', handler: (request, h) => { return 'Hello from Hapi.js powered by ServBay!'; } }); // Sunucuyu başlat await server.start(); console.log('Server running on %s', server.info.uri); }; // Yakalanmamış Promise Reddetme Hatalarını işle process.on('unhandledRejection', (err) => { console.error(err); process.exit(1); // Süreci sonlandır }); // Uygulamayı başlatmak için init fonksiyonunu çağır init();
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
33Bu kod ile, Hapi sunucusu
localhost
üzerinde belirtilen portta (varsayılan 3000) dinler ve/
kök yolunda basit bir GET isteğini cevaplar.
Geliştirme Moduna Geçiş ve ServBay Site Ayarları
Geliştirme sürecinde Node.js uygulamanızı doğrudan çalıştırabilir, ServBay’in ters proxy (reverse proxy) özelliğiyle kendi alan adınızı kullanarak tarayıcıdan güvenli erişim sağlayabilirsiniz. Ayrıca ServBay’in sunduğu SSL sertifikalarından da yararlanabilirsiniz.
Hapi.js Geliştirme Sunucusunu Başlatın
Terminalde,
servbay-hapi-app
projesi dizininde olduğunuzdan emin olun, ardındanserver.js
dosyasını başlatmak içinnode
komutunu kullanın. ServBay’in ters proxy özelliğiyle eşleşecek belirli bir port (örneğin8585
) belirtebiliriz:bashPORT=8585 node server.js
1Sunucu açıldığında, örneğin
Server running on http://localhost:8585
şeklinde dinlediği adresi gösterir. Bu terminal penceresini açık tutun; sunucu burada çalışmaktadır.ServBay’de Site (Ters Proxy) Oluşturun
ServBay uygulamasını açın. "Siteler" sekmesine geçin, sol alt köşedeki "+" butonuna tıklayarak yeni bir site ekleyin.
- İsim (Name):
ServBay Hapi Dev
(dilediğiniz gibi isimlendirebilirsiniz, listede ayırt etmeniz için) - Alan Adı (Domain):
servbay-hapi-dev.servbay.demo
(gerçek domainlerle çakışmamak ve ServBay’in yerel CA sertifikasını kullanmak için.servbay.demo
uzantısı önerilir) - Site Türü (Type):
Ters Proxy (Reverse Proxy)
seçin - Proxy Ayarları (Proxy to):
- Protokol (Protocol):
http
- IP Adresi (IP Address):
127.0.0.1
(çünkü Node.js sunucusu yerel makinede çalışıyor) - Port (Port):
8585
(PORT
değişkeninde kullandığınız portla aynı olmalı)
- Protokol (Protocol):
"Ekle (Add)" butonuna tıklayın. ServBay, web sunucusunu (ör. Caddy veya Nginx) otomatik şekilde yapılandırarak
https://servbay-hapi-dev.servbay.demo
adresinden gelen taleplerihttp://127.0.0.1:8585
adresine yönlendirir. Ayrıca.servbay.demo
adresleri için otomatik olarak güvenli yerel SSL sertifikası üretir ve sisteme tanıtır.Daha ayrıntılı anlatım için ServBay Site Yapılandırması Dokümantasyonu başvurusuna bakabilirsiniz.
- İsim (Name):
Geliştirmekte Olduğunuz Hapi.js Uygulamasına Erişim
Web tarayıcınızda yapılandırdığınız adresi (
https://servbay-hapi-dev.servbay.demo
) açarak uygulamanıza erişebilirsiniz. Ekranda "Hello from Hapi.js powered by ServBay!" mesajını görmelisiniz.Artık,
server.js
dosyanızda yaptığınız değişiklikler (özelliklenodemon
gibi otomatik başlatıcılarla) ServBay’in ters proxy'si üzerinden tarayıcıya yansıyacaktır.
Üretim Sürümünü Yayınlama (Örnek)
Üretim ortamında genellikle daha dayanıklı bir süreç yöneticisi (ör. PM2) ve farklı ayarlara ihtiyaç duyulur. İşte başka bir port ile üretim modunu çalıştırmanın ve ServBay ile ters proxy kullanmanın örneği:
Hapi.js Üretim Sunucusunu Başlatın
Uygulamanızı farklı bir port (örneğin
8586
) ve üretim konfigurasyonuyla başlatabilirsiniz:bashPORT=8586 NODE_ENV=production node server.js
1(Not: Gerçek üretim ortamında Node.js süreçlerini yönetmek için PM2 gibi araçlar önerilir. ServBay PM2 entegrasyonunu da destekler.)
ServBay’de Üretim Sitesi (Ters Proxy) Kurun
ServBay uygulamasında "Siteler" sekmesinde "+" ile yeni bir site ekleyin:
- İsim:
ServBay Hapi Prod
- Alan Adı:
servbay-hapi-prod.servbay.demo
- Site Türü:
Ters Proxy (Reverse Proxy)
- Proxy Ayarları:
- Protokol:
http
- IP Adresi:
127.0.0.1
- Port:
8586
- Protokol:
"Ekle"ye tıklayın.
- İsim:
Üretim Sürümündeki Hapi.js Uygulamasına Erişim
Tarayıcıdan
https://servbay-hapi-prod.servbay.demo
adresine gidin. KodunuzdaNODE_ENV
’ye göre davranış farkı yoksa, geliştirme modunda gördüğünüz çıktının aynısını görürsünüz — ama bu kez uygulama üretim portu ve ayarlarıyla çalışmaktadır.
ServBay’in site özelliğiyle, yerel geliştirme ve üretim simülasyonu için birçok alan adı ve farklı porttaki Node.js (veya diğer) uygulamalarınızı kolayca yönetebilirsiniz.
ServBay’in Sağladığı Veritabanlarına Bağlantı
ServBay, MySQL, MariaDB, PostgreSQL, MongoDB ve Redis gibi birçok popüler veritabanı sistemini yerleşik olarak sunar ve destekler. Bu bölümde, Hapi.js projesinde bu veritabanlarına bağlantının nasıl kurulacağı gösterilecektir.
Önemli: Veritabanına bağlanmadan önce, ServBay uygulamasında gerekli veritabanı paketlerini "Paketler" sekmesinde etkinleştirip ilgili servislerin çalıştığından emin olun. Veritabanı servislerinin durumunu ServBay kontrol panelinden takip edebilirsiniz.
ServBay’in varsayılan veritabanı kullanıcı adı ve şifreleri şöyledir:
- MySQL/MariaDB: Kullanıcı adı
root
, şifrepassword
- PostgreSQL: Kullanıcı adı
user
, şifrepassword
- MongoDB: Varsayılan olarak kimlik doğrulama gerektirmez
- Redis: Varsayılan olarak kimlik doğrulama gerektirmez
Not: Güvenlik için özellikle uzak ortamda kullanıyorsanız veritabanı şifrelerini değiştirmeniz şiddetle tavsiye edilir. MySQL, MariaDB, PostgreSQL'in root şifresini kolayca sıfırlamak için ServBay’in ilgili fonksiyonu kullanılabilir. Bkz: Veritabanı Şifresi Sıfırlama Dokümantasyonu.
Aşağıda çeşitli veritabanlarına bağlantı için örnek kod parçacıkları verilmiştir. Gerekli istemci kütüphanesini npm ile kurmanız gerekir.
MySQL’e Bağlantı
MySQL istemci kütüphanesini yükleyin:
bashnpm install mysql2 # veya mysql
1Örnek bağlantı kodu (
mysql2
ile):javascriptconst mysql = require('mysql2'); const connection = mysql.createConnection({ host: 'localhost', user: 'root', // ServBay varsayılan kullanıcı adı password: 'password', // ServBay varsayılan şifresi database: 'servbay_hapi_app' // Kendi veritabanı adınızı yazın }); connection.connect(err => { if (err) { console.error('Error connecting to MySQL: ' + err.stack); return; } console.log('Connected to MySQL as id ' + connection.threadId); }); // Gerektiğinde bağlantıyı kapatın // connection.end();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19MariaDB’ye Bağlantı
MariaDB istemci kütüphanesini yükleyin:
bashnpm install mariadb
1Örnek bağlantı kodu:
javascriptconst mariadb = require('mariadb'); const pool = mariadb.createPool({ host: 'localhost', user: 'root', // ServBay varsayılan kullanıcı adı password: 'password', // ServBay varsayılan şifresi database: 'servbay_hapi_app', // Kendi veritabanı adınızı yazın connectionLimit: 5 // Havuz boyutu }); pool.getConnection() .then(conn => { console.log("Connected to MariaDB"); // conn.query(...) sorgu işlemleri için conn.release(); // Bağlantıyı havuza geri bırak }) .catch(err => { console.error("Not connected to MariaDB due to error: " + err); });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18PostgreSQL’e Bağlantı
PostgreSQL istemci kütüphanesini yükleyin:
bashnpm install pg
1Örnek bağlantı kodu:
javascriptconst { Pool } = require('pg'); const pool = new Pool({ user: 'user', // ServBay varsayılan kullanıcı adı host: 'localhost', database: 'servbay_hapi_app', // Kendi veritabanınızı yazın password: 'password', // ServBay varsayılan şifresi port: 5432, // PostgreSQL varsayılan portu }); pool.connect((err, client, done) => { if (err) { console.error('Error connecting to PostgreSQL: ', err); return; } console.log('Connected to PostgreSQL'); client.query('SELECT NOW()', (err, res) => { done(); // Bağlantıyı serbest bırak if (err) { console.error('Error executing query', err.stack); } else { console.log('PostgreSQL current time:', res.rows[0].now); } }); }); // Bağlantı havuzu uygulama kapanınca otomatik kapanır // pool.end();
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
27MongoDB’ye Bağlantı
MongoDB istemci kütüphanesini yükleyin:
bashnpm install mongoose # veya mongodb
1Örnek bağlantı kodu (
mongoose
ile):javascriptconst mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/servbay-hapi-app', { useNewUrlParser: true, useUnifiedTopology: true, // ServBay’in varsayılan MongoDB’sinde kimlik doğrulama gerekmez, ayarlıysa authSource, user, pass ekleyin // authSource: 'admin', // user: 'your_username', // pass: 'your_password', }) .then(() => console.log('MongoDB connected')) .catch(err => console.error('MongoDB connection error:', err)); // Mongoose bağlantısı uygulama boyunca aktif kalır // Bağlantıyı kesmek için: mongoose.connection.close();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Redis Bağlantısı
Redis istemci kütüphanesini yükleyin:
bashnpm install redis
1Örnek bağlantı kodu:
javascriptconst redis = require('redis'); // Varsayılan bağlantı: host: 'localhost', port: 6379 const client = redis.createClient(); client.on('error', function (err) { console.error('Redis Error: ' + err); }); client.on('connect', function () { console.log('Redis client connected'); }); // Redis sunucusuna bağlan client.connect(); // redis v4+ için connect() çağrısı gerekir // Örnek: anahtar atama ve okuma // async function exampleRedisUsage() { // await client.set('mykey', 'myvalue'); // const value = await client.get('mykey'); // console.log('Value from Redis:', value); // await client.del('mykey'); // } // exampleRedisUsage(); // Uygulama çıkınca bağlantıyı sonlandırın // client.quit();
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
Bu bağlantı kodlarını Hapi.js uygulamanızda entegre ederek, ServBay’in sunduğu her türlü veritabanını yerel geliştirme ortamınızda kullanabilirsiniz.
Sonuç
ServBay ile macOS üzerinde Hapi.js geliştirme ortamı kurmak oldukça verimli ve kolaydır. ServBay; kolay kurulan ve yönetilen Node.js runtime’ı, hazır veritabanı paketleri, site özelliği (ters proxy ve otomatik SSL ile) sayesinde yerel erişim yapılandırmasını büyük ölçüde basitleştirir. Buradaki adımları izleyerek Hapi.js projenizi hızlıca başlatabilir, ServBay’in güçlü araçları ile geliştirme sürecinizi hızlandırabilirsiniz.