tarafından eklendi tarafından eklendi

Packagist nedir? Nasıl Composer Paketi Oluştururum? Packagist’e Nasıl Yüklerim?

Packagist, PHP paketlerini paylaşmak ve dağıtmak için popüler bir platformdur. Bir paketi Packagist’e eklemek ve dağıtmak için aşağıdaki adımları izleyebilirsiniz:

1.GitHub veya Bitbucket gibi bir Git depo sağlayıcısında bir hesap oluşturun veya mevcut bir hesabınız varsa giriş yapın.

2.Projenizi hazırlayın:

  • Paketinizi GitHub veya Bitbucket gibi bir Git depo sağlayıcısında barındırın. Projenizin tamamlanmış ve çalışır durumda olması önemlidir.
  • Projenizin kök dizininde composer.json adında bir dosya oluşturun. Bu dosya, paketinizin bağımlılıklarını, sürümünü ve diğer ayarlarını tanımlayacaktır. composer.json dosyasının nasıl yapılandırılacağına ilişkin ayrıntıları Composer belgelerinde bulabilirsiniz.


3.Packagist hesabı oluşturun veya giriş yapın:

  • Packagist’e gitmek için https://packagist.org/ adresini ziyaret edin.
  • Sağ üst köşede “Submit” veya “Submit Package” gibi bir bağlantı bulunmalıdır. Bu bağlantıya tıklayarak bir Packagist hesabı oluşturun veya mevcut hesabınızla giriş yapın.


4.Paketinizi gönderin:

  • Packagist’e giriş yaptıktan sonra, “Submit” veya “Submit Package” bağlantısına tıklayın.
  • Paketinizi Packagist’e göndermek için projenizin Git deposunun URL’sini ve diğer ayrıntıları sağlayın.
  • Packagist, paketinizi otomatik olarak tarayacak ve bağımlılıkları, sürüm numaralarını ve diğer ayrıntıları alacaktır.


5.Paketinizi yayınlayın:

  • Packagist, paketinizi alır ve Composer aracılığıyla erişilebilir hale getirir.
  • Projenizde composer.json dosyasında paketinizi Packagist üzerinden erişilebilir olarak tanımlayın.
  • Kullanıcılar, Composer kullanarak paketinizi projelerine dahil edebilir.


Packagist, paketinizi bağımlılıklarınızı takip etmek, sürüm yönetimi yapmak ve diğer geliştiricilerle paylaşmak için kullanışlı bir platformdur. Packagist’e paket gönderdikten sonra, geliştiriciler projenizi Composer aracılığıyla yükleyebilir ve kullanabilir.

Php Arşiv – Phar Dosyası Oluşturmak

Bir PHAR dosyası oluşturmak için aşağıdaki adımları izleyebilirsiniz:

Hazırlık:

Bir PHAR dosyası oluşturmadan önce, projenizin kaynak dosyalarını ve bağımlılıklarını belirlemeniz gerekmektedir.


Phar Eklentisini Etkinleştirin:

PHP’nin Phar eklentisini etkinleştirmeniz gerekmektedir. Bunun için php.ini dosyanızı düzenleyerek phar eklentisini açmanız gerekebilir. Etkinleştirme işleminden sonra web sunucusunu veya komut satırını yeniden başlatmanız gerekebilir.


Composer Kullanın (isteğe bağlı):

Eğer projenizde Composer kullanıyorsanız, Composer’ı projenizin kök dizininde çalıştırarak bağımlılıklarınızı yükleyin. Bu, PHAR dosyasına dahil etmek istediğiniz bağımlılıkları projenize eklemenizi sağlar.


Phar Oluşturma:

Bir PHAR dosyası oluşturmak için bir PHP betiği oluşturmanız gerekmektedir. Bu betik, PHAR dosyasını oluşturacak kodu içerecektir.
Oluşturacağınız PHP betiğinde Phar sınıfını kullanarak bir PHAR nesnesi oluşturun.
PHAR nesnesini yapılandırarak içeriğini ve ayarlarını belirleyin. Bu, dahil etmek istediğiniz dosyaları belirtmek, sıkıştırma ve şifreleme seçeneklerini ayarlamak ve diğer PHAR özelliklerini yapılandırmak anlamına gelebilir.
PHAR dosyasını oluşturmak için Phar::buildFromDirectory() veya Phar::buildFromIterator() gibi uygun yöntemleri kullanarak kaynak dosyalarını PHAR dosyasına ekleyin.


Phar Dosyasını Kaydetme:

Phar nesnesini kullanarak PHAR dosyasını kaydedin. Bu, PHAR dosyasının adını ve kaydedileceği yolu belirlemenizi gerektirecektir.


PHAR Dosyasını Test Etme:

Oluşturulan PHAR dosyasını test etmek için, PHAR dosyasını çalıştırabilir veya projenizi PHAR dosyası üzerinden kullanabilirsiniz. Bu, PHAR dosyasının beklenen şekilde çalıştığından emin olmanızı sağlar.


Bu adımları takip ederek PHP projeniz için bir PHAR dosyası oluşturabilirsiniz. Phar oluşturma süreci projenizin karmaşıklığına ve ihtiyaçlarına bağlı olarak değişebilir. Daha fazla ayrıntı ve örnekler için PHP’nin resmi dokümantasyonunu incelemenizi öneririm.

Phar – Php Arşivi

PHAR (PHP Archive) bir PHP dosyası arşiv formatıdır. PHAR dosyaları, bir veya daha fazla PHP betiği, kaynak dosyası ve diğer kaynakları tek bir dosya içinde saklar. Bu dosya, bir arşiv formatı olarak kullanılarak, dosyaları sıkıştırma, şifreleme ve önbelleğe alma gibi işlemlere tabi tutabilir.

PHAR dosyaları, PHP uygulamalarını taşınabilir ve dağıtılabilir hale getirir. PHAR dosyaları, projenin tüm dosyalarını bir araya getirerek bağımlılıkların ve kaynak dosyalarının düzenli bir şekilde paketlenmesini sağlar. Bu, uygulamanın dağıtımını kolaylaştırır ve projeyi tek bir dosya halinde taşıma ve paylaşma imkanı sağlar.

PHAR dosyaları, PHP betiklerini yürütmek için kullanılabilir. Bir PHAR dosyası çalıştırıldığında, içindeki PHP betikleri çalıştırılır ve uygulama başlatılır. Bu, bir PHAR dosyasının bir uygulama veya komut satırı aracı olarak kullanılabilmesini sağlar.

PHAR dosyaları, güvenlik için önlemler içerebilir. Örneğin, bir PHAR dosyası şifreli olabilir ve yalnızca doğru şifreyle açılabilir. Ayrıca, PHAR dosyası imzalanabilir ve doğrulama mekanizmaları kullanılarak bütünlük kontrolü yapılabilir.

PHP’nin Phar eklentisi, PHAR dosyalarını oluşturmak ve işlemek için kullanılan API’leri sağlar. PHAR dosyaları, PHP’nin yaygın bir bileşeni haline gelmiştir ve birçok PHP projesi tarafından kullanılmaktadır.

Php Composer nedir? Nasıl kullanılır?

PHP Composer, PHP projeleri için bağımlılık ve paket yönetimi aracıdır. Bir projenin dış bağımlılıklarını yönetmek ve bu bağımlılıkları projeye dahil etmek için kullanılır. Composer, paketlerin indirilmesi, sürüm yönetimi, yükseltme, otomatik yükleme ve autoload işlemlerini kolaylaştırır.

Composer, bir projenin kök dizininde composer.json adında bir konfigürasyon dosyası kullanır. Bu dosya, projenin kullanacağı bağımlılıkları ve bu bağımlılıkların sürüm gereksinimlerini tanımlar. Composer, composer.json dosyasındaki tanımlamalara dayanarak belirtilen paketleri indirir ve projenin kullanımına sunar.

Composer ayrıca bağımlılık ağaçlarını çözerek, farklı paketlerin birbirlerine uyumlu sürümlerini belirlemeye yardımcı olur. Bu sayede çatışmaları çözer ve projenin stabil ve tutarlı bir şekilde çalışmasını sağlar.

Composer, bağımlılıkları merkezi bir paket deposundan (Packagist) alır. Bu depoda birçok popüler PHP paketi bulunur ve kullanıcılar bu paketleri projelerine kolayca ekleyebilirler. Aynı zamanda, kullanıcılar kendi özel paketlerini oluşturabilir ve bu paketleri Composer aracılığıyla paylaşabilirler.

Composer, PHP projelerinin yönetimini kolaylaştırır, geliştirme sürecini hızlandırır ve kodun tekrar kullanılabilirliğini artırır. Aynı zamanda, popüler PHP çerçevelerinin ve uygulama yapılarının da Composer desteği bulunmaktadır, bu sayede bu çerçeveleri kullanmak daha kolay hale gelir.

Php PSR Nedir? PHP Standards Recommendations

PHP Standards Recommendations (PSR), PHP programlama dilinde bir dizi standart ve rehberlik belgesidir. Bu belgeler, PHP topluluğunda kodun tutarlılığını, okunabilirliğini ve paylaşılabilirliğini artırmayı amaçlar. PSR’ler, geliştiricilerin kod yazma ve projeleri paylaşma süreçlerini kolaylaştırmak için belirli bir yönergeler seti sunar.

PHP-FIG (PHP Framework Interop Group), PSR’leri oluşturan ve yöneten bir topluluktur. PSR’ler, PHP projelerinin çeşitli bileşenlerinin birbiriyle uyumlu olmasını sağlar ve birçok popüler PHP çatısının (framework) uyumluluğunu sağlamak için kullanılır.

PSR-0: Otomatik Yükleme Standartı

Bu PSR artık geçerli değildir ve PSR-4 yerini almıştır.
Sınıfları, arayüzleri ve isim alanlarını dosya sistemine dönüştürmek için standartlar belirler.
Otomatik yükleme işlemi için yapılandırmaları içerir.


PSR-1: Temel Kodlama Standartları

Bu PSR, PHP kodlaması için temel standartları belirler.
Dosya adlandırmaları, sınıf adlandırmaları, dosya yapısı ve otomatik yüklemeler gibi konuları kapsar.
Kodun okunabilirliğini artırmak ve projeler arasında tutarlılık sağlamak için yönergeler sunar.


PSR-2: Kodlama Stili Rehberi

Bu PSR, kodlama stilini belirler.
Girintileme, boşluklar, satır uzunluğu ve ifadelerin düzenlemesi gibi konuları içerir.
Kodun okunabilirliğini artırmak ve projeler arasında tutarlılık sağlamak için belirli kurallar ve öneriler sunar.


PSR-3: Kayıt Arabirimi

Bu PSR, loglama araçları için bir arabirim tanımlar.
Log mesajlarını oluşturma, düzeyleri belirleme ve kayıtları işleme gibi işlevleri içerir.
Uygulamaların loglama işlemlerini tutarlı bir şekilde yönetmelerini sağlar.


PSR-4: Otomatik Yükleme Standartı

Bu PSR, sınıfların otomatik olarak yüklenmesi için bir standart sağlar.
Sınıf ad alanlarını dosya sistemine dönüştürme ve otomatik yükleme yöntemlerini tanımlama gibi konuları içerir.
Proje dosya yapısını ve sınıf yüklemeyi kolaylaştırır.


PSR-5: PHPDoc Standartı

Bu PSR artık geçerli değildir ve PSR-19 yerini almıştır.
PHPDoc etiketleri ve belgelendirme için standartlar sunar.
Kod belgelerini tutarlı hale getirir ve otomatik dokümantasyon oluşturma işlemlerini kolaylaştırır.

PSR-6: Önbellekleme Arabirimi

Bu PSR, önbellekleme araçları için bir arabirim tanımlar.
Önbellekleme bileşenlerinin nasıl oluşturulacağı, önbelleklemenin nasıl yapılandırılacağı ve verilerin nasıl depolanacağı gibi konuları kapsar.
Önbellek kullanımını standardize ederek performans iyileştirmelerini kolaylaştırır.


PSR-7: HTTP Mesaj Arabirimi

Bu PSR, HTTP mesajlarının oluşturulması, işlenmesi ve gönderilmesi için bir arabirim tanımlar.
Request (istek) ve Response (yanıt) gibi HTTP mesajlarıyla ilgili işlevleri içerir.
HTTP protokolünü kullanan uygulamalar arasında uyum sağlar ve etkileşimli web uygulamalarının geliştirilmesini kolaylaştırır.


PSR-8: Hata Raporlama Arabirimi

Bu PSR, hata raporlama için bir arabirim tanımlar.
Hata yakalama, hata mesajlarını kaydetme, hata düzeylerini belirleme ve hata raporlarını işleme gibi işlevleri içerir.
Uygulamalar arasında tutarlı bir hata raporlama mekanizması sağlar.


PSR-9: Günlük Tutma Arabirimi

Bu PSR, günlük tutma (logging) için bir arabirim tanımlar.
Günlük kayıtlarını oluşturma, düzeyleri belirleme, log rotasyonu ve kayıtları işleme gibi işlevleri içerir.
Uygulamalar arasında tutarlı bir günlük tutma işlemi sağlar.


PSR-10: Kritik Altyapı Güvenliği Bildirimleri

Bu PSR, kritik altyapı güvenliği bildirimleri için bir standart sağlar.
Altyapı sağlayıcılarının güvenlik açıkları, zararlı yazılımlar veya diğer güvenlik tehditleri hakkında güncellemeler yapabilmesini sağlar.
Kritik altyapılar için güvenliği artırmayı hedefler.

PSR-11: Konteyner Arabirimi

Bu PSR, nesne bağımlılığı enjeksiyonu (dependency injection) için bir arabirim tanımlar.
Nesnelerin oluşturulması, bağımlılıkların çözülmesi ve nesnelerin alınması gibi işlevleri içerir.
Bağımlılık enjeksiyonu kullanan uygulamaların taşınabilirliğini artırır ve bileşenler arasında gevşek bağımlılıkların kurulmasına yardımcı olur.


PSR-12: Genel Kodlama Stili Rehberi

Bu PSR, PSR-2’nin gelişmiş bir versiyonu olarak genel kodlama stilini belirler.
Kodlama stilini, girintileme, boşluklar, satır uzunluğu, ifadelerin düzenlemesi ve dokümantasyon gibi alanları kapsar.
Kodun okunabilirliğini artırmayı, tutarlılığı sağlamayı ve işbirliğini kolaylaştırmayı hedefler.


PSR-13: Hypermedia Bağlantıları için URL Arabirimi

Bu PSR, URL’leri ve hypermedia bağlantılarını temsil etmek için bir arabirim tanımlar.
URL’lerin oluşturulması, ayrıştırılması ve işlenmesi gibi işlevleri içerir.
Hypermedia uygulamalarında bağlantılar arasındaki etkileşimi standardize etmeyi amaçlar.


PSR-14: Olaylar için Arabirim

Bu PSR, olay tabanlı programlamada kullanılan bir arabirim tanımlar.
Etkinliklerin tetiklenmesi, dinlenmesi ve işlenmesi gibi olay yönetimi işlevlerini içerir.
Olay tabanlı tasarımı kullanarak bileşenler arasındaki etkileşimi kolaylaştırır.


PSR-15: HTTP Sunucu İstekleri için Middleware Arabirimi

Bu PSR, HTTP sunucu isteklerini işlemek için bir middleware (ara katman) arabirimi tanımlar.
Middleware’lerin istekleri alma, yanıtları üretme ve istek/yanıt döngüsüne katılma gibi işlevleri içerir.
Sunucu tarafında modüler ve esnek HTTP işleme sağlar.


PSR-16: Basit Önbellekleme Arabirimi

Bu PSR, basit önbellekleme işlemleri için bir arabirim tanımlar.
Verilerin önbelleğe alınması, alınması, saklanması ve silinmesi gibi temel önbellek işlevlerini içerir.
Farklı önbellek uygulamaları arasında uyumluluk sağlar

PSR-17: HTTP Sunucusu İstekleri için Mesaj Fabrikaları

Bu PSR, HTTP sunucusu istekleri ve yanıtları oluşturmak için mesaj fabrikaları için bir arabirim tanımlar.
HTTP istekleri ve yanıtları oluşturmayı, yapılandırmayı ve dönüştürmeyi kolaylaştırır.
Sunucu tarafında HTTP mesajlarıyla çalışmayı standartlaştırır.


PSR-18: HTTP İstemcisi Arabirimi

Bu PSR, HTTP istemcileri için bir arabirim tanımlar.
HTTP istekleri yapmayı, yanıtları almayı ve işlemeyi kolaylaştırır.
Farklı HTTP istemci uygulamaları arasında taşınabilirliği sağlar.


PSR-19: API Dokümantasyonu için PHPDoc Etiketleri

Bu PSR, API dokümantasyonu için PHPDoc etiketlerini belirler.
API sınıfları, yöntemleri ve parametreleri hakkında ayrıntılı açıklamalar yapmayı sağlar.
API dokümantasyonunun tutarlılığını artırır ve otomatik dokümantasyon araçlarının kullanımını kolaylaştırır.


PSR-20: Meta-Taşınabilirlik Arabirimi

Bu PSR, PHP kodunun taşınabilirliğini artırmak için bir meta-taşınabilirlik arabirimi tanımlar.
Taşınabilirlikle ilgili bilgileri ve gereksinimleri içeren meta verileri sağlar.
Kodun farklı platformlar arasında daha kolay taşınabilmesini sağlar.


PSR-21: HTTP Mesaj Nesne Modeli

Bu PSR, HTTP mesajlarını temsil etmek için bir nesne modeli tanımlar.
HTTP istekleri ve yanıtlarını nesne olarak oluşturmayı ve işlemeyi sağlar.
HTTP mesajlarının taşınabilirliğini ve işlenmesini kolaylaştırır.


PSR-22: Konteyner Örneklemesi

Bu PSR, PSR-11 uyumlu bir konteynerin örneklemesini tanımlar.
Konteynerin nasıl kullanılacağı ve yapılandırılacağı gibi konuları kapsar.
PSR-11 uyumlu bir konteynerin uygulama örneği sağlar.


PSR-23: HTTP Mesaj Fabrikaları

Bu PSR artık geçerli değildir ve PSR-17’nin yerini almıştır.
HTTP istekleri, yanıtları ve diğer HTTP mesajlarını oluşturmak için fabrikalar sağlar.
HTTP mesajlarıyla çalışmayı kolaylaştırır ve standartlaştırır.

Laravel 9’da Bootstrap ile Pagination(Sayfalama)

Laravel’de, blade ile ilgili kısımlar 8’den sonra Tailwind ile gelmeye başladı. Tailwind’e ısınamayan biri olarak, hep projelerimde Bootstrap’a dönüştürme yapıyorum. Farklı paketler var.
Bootstrap(4 veya 5) ile Pagination için minik bir ipucu mevcut.

App\Providers\AppServiceProvider.php Sınıfında boot methoduna;

use Illuminate\Pagination\Paginator;
 
/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    //Paginator::useBootstrapFive();
    Paginator::useBootstrapFour();
}

Bootstrap 5 veya 4’e göre gerekli satırı eklememiş yeterli.

Önemli Not : PHP ölmedi. :).

Nginx ile Laravel Routing

Laravel hali hazırda Apache ile uyumlu bir şekilde geliyor. Ek bir konfigürasyona ihtiyaç duymuyor. .htaccess ile hazır gelen yapı Nginx’e geçince insanı ayar arayışına itiyor.

Aşağıdaki genel konfigürasyon işinize yarayacaktır. Php-Fpm ayarı default şekilde yazılmıştır. Cpanel vb gibi kullanıyorsanız Php-fpm .sock tanımlamasını yapmalısınız.

server {
    listen 80;
    server_name example.com;
    root /example.com/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

Centos 7 Üzerine Solr Kurulumu

Solr, efsane bir full-text search aracı. Daha önceki yazılarımda detaylarından bahsetmiştim. İnanılmaz hızlı sorgu dönüşleri sağlıyor. Hemen hemen her büyük proje de in-search için kullanıyor. (Netflix, Instagram, Duck Duck Go vb.). Elastic Search’e karşın benim favorim Solr. Yapılandırması zor gibi görünsede ayağa kaldırmak çok kolay. Bence en karmaşık kısmı yetkilendirme kısmı.

Hızlıca kurulum ile ilgili aşamalara geçelim;

İlk önce Java ihtiyacını giderilim.

sudo yum install lsof java-1.8.0-openjdk  java-1.8.0-openjdk-devel

LATEST_VER’i değişen son sürüme karşı kodda minimum değişlik yapılsın diye ekliyorum.

export LATEST_VER="8.0.0" 
curl -O https://www-eu.apache.org/dist/lucene/solr/${LATEST_VER}/solr-${LATEST_VER}.tgz

Solr paketi indi. Arşiven çıkaralım.

tar xvf solr-${LATEST_VER}.tgz

Güzelce kurulumu başlatalım.

cd solr-${LATEST_VER}/bin/
sudo ./install_solr_service.sh ~/solr-${LATEST_VER}.tgz
sudo systemctl enable solr

Süper artık Solr ayağa kalktı. Başlangıçta çalışacak.

http://ip:8983/solr

Bu adım çok önemli. Core oluşturuyoruz. Core bir nevi DB gibi düşünün.

sudo su - solr -c "/opt/solr/bin/solr create -c testcollection -n data_driven_schema_configs"
/var/solr/data

Bu dizinde solr core’ları saklanıyor. buraya security.json adında bir config dosyası bırakıyorum. Solr web ve Rest Api’ye bu dosya sayesinde erişim sağlayacağım.

{
"authentication":{ 
   "blockUnknown": true, 
   "class":"solr.BasicAuthPlugin",
   "credentials":{"solr":"IV0EHq1OnNrj6gvRCwvFwTrZ1+z1oBbnQdiVC3otuq0= Ndd7LKvVBAaZIF0QAVi1ekCfAJXr1GGfLtRUXhgrF8c="}, 
   "realm":"My Solr users", 
   "forwardCredentials": false 
},
"authorization":{
   "class":"solr.RuleBasedAuthorizationPlugin",
   "permissions":[{"name":"security-edit",
      "role":"admin"}], 
   "user-role":{"solr":"admin"} 
}}

Default olarak kullanıcı solr, şifremiz ise SolrRocks. Şifre sha256(şifre+salt) şeklinde oluşturuluyor.

Öncelikle şunuda eklemeyi unutmayayım. In cloud yapısında ZooKeeper denen bir servis var. Bu kısım oldukça detaylı o kısmı geçip, standalone kurulum için bu ayarlar.

Her şey güzel. Ama henüz bitmedi. Solr’ın verileri Db’nizden çekip indekslemeyebilmesi için bir Data Import Handler oluşturmamız lazım.

/var/solr/data/Koleksiyon_Adi/conf/solrconfig.xml
 <lib dir="${solr.install.dir:../..}/dist/" regex="solr-dataimporthandler-.*\.jar" />
 <lib dir="${solr.install.dir:../..}/dist/" regex="mysql-connector-java-\d.*\.jar" />

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
        <lst name="defaults">
            <str name="config">data-config.xml</str>
        </lst>
</requestHandler>
/opt/solr/server/lib

Klasörünün altına da bir mysql-connector-java-surum_no.jar indirip, jar olarak durmasını sağlamalıyız.

Sıra geldi verileri çekebilmemiz için gerekli veritabanı bağlantı ayar dosyasına.

nano data-config.xml
<dataConfig>
  <dataSource type="JdbcDataSource"
              driver="com.mysql.jdbc.Driver"
              url="jdbc:mysql://127.0.0.1:3306/db_name"
              user="user"
              password="pass"
               />
  <document>
  <entity name="Veriler" query="select * from veriler order by sira desc">
    <field column="sutun_adi" name="sutun_adi"/>
    <field column="sutun_adi" name="sutun_adi"/>
    <field column="sutun_adi" name="sutun_adi"/>
    <field column="sutun_adi" name="sutun_adi"/>
    <field column="sutun_adi" name="sutun_adi"/>
  </entity>

</document>
</dataConfig>

Yukarıdaki şekilde dosyayı ekledikten sonra nihayet solr kurulumunu tamamlıyoruz demek isterdim :). Devam…

http://ip:8983/solr/#/koleksiyon_adi/schema

Buradan indekslemek için bir db solr tablosu oluşturacağız. Dikkat etmemiz gereken veri tipi ve buradaki field isminin, tanımladığımız data-config.xml deki alanlar ile uyuşması. Çünkü burada data mapping yapılacak.

Burada fieldlarımızı tanımladıktan sonra mutlu sona geldik. :).

Hadi verilerimizi çekelimde bitsin artık bu kurulum.

http://ip:8983/solr/#/koleksiyon_adi/dataimport/

Bu ekranda artık dbye bağlandığımız verileri çektiğimiz ekran.

Entity’i data-config.xml’de yazdığımız entity gelecek ve onu seçelim. Command full-import ‘u seçelim. Ayrıca anbean importing’i takip etmek için, auto-refresh status’te tikli olsun. Yukarıdaki gibi yeşil bir alert çıktığında işlem tamam.

Artık her şey tamam. Zevkle sorgulayabiliriz. 🙂

ttp://ip:8983/solr/#/koleksiyon_adi/query

fq kısmına field_Adi:kelime yazarak sorgulamamızı yapabiliriz. Query’in kendine has bir detayı var. Daha önce ki Solr yazımda buna değindiğim için bu yazıda anlatmayacağım. Bir o kadar kolay bir o kadar da zor Solr yazımın sonuna geldim.

İyi çalışmalar.

Redis’e Remote Bağlanma

Bir projemiz için Load Balancer ihtiyacımız olmuştu. İstekler uygulama sunucuları arasında gezerken cache ve session’lar o uygulama sunucusunda kalmaktaydı. Bunun en güzel çözümü ise tek bir Redis server’da bulduk. Redis servisini remote’a açmakta buldum.

sudo nano /etc/redis.conf

dosyasında aşağıdaki satırı;

bind 127.0.0.1 

yerine,

bind 0.0.0.0

ile değiştirdim. Redis’i yeniden başlattım. Şuan mutluyum :).

Http Load Balancers

Bir sunucunun tüm yükü karşılayamadığı, gelen talepleri belirli kurallara göre dağıttığı yapıdır.

Load balancer yapısına çalıştığımız bir proje üzerinde gereksinim duyduk. Şöyle ki; Sunucu’nun üzerinde çok fazla request geziniyordu. Yoğun response’lar sonucunda Apache Workers’ları çok fazla kaynak tüketip, hele de Mysql Instance’ı da bu sunucuda olunca, çoğu zaman sunucu ağlıyordu. Response süreleri çok uzuyor, sunucu cevap veremez hale geliyordu.

İlk iş olarak hizmet daldığımız Bulut Hizmetçisi’nden bir donanımsal Load Balancer(Yazılımsal olanları da var.) hizmeti aldık.

Daha sonra anasunucu’dan replike bir sunucuda daha kurduk.

S1 ve S1 olmak üzere iki uygulama sunucumuz oldu. L isminde de bir Load Balancer’ımız oldu.

Kaynak cevap sürelerine baktım.

Load Balancer Response Time : 40ms

S1:45ms

S2:55ms

Şimdi gelelim katma değerlerine;

domain.com -> L ip’sine yönlendirildi.

L ise Round Robin(*) algoritması ile S1 ve S2 sunucusuna yük dağıtıyor.

Buradan basit bir matematik ile bakınca sunucu response time’larımız sırf Load Balancer ile %12.5 arttı.

Daha da güzel olsun diye; Bir de Database Cluster yapısı kurduk. Sunucu üzerindeki database instance’larını susturup, DB Cluster’a aldık. DB cluster yapımız ise ; primary + standby olarak yapılandırdık.Hem bir fail over hem de performans katkısı sağladık.

Gelelim Load Balancer Yük Dağıtma Algoritmaları‘na

  1. Round Robin : Gelen istekleri 1 ona – 1 ona şeklinde dağıtır.
  2. Least Connection : Sunucu üzerinde ki istek sayısına göre yönlendirir. FIFO( first in first out) mantığıyla çalışır.

İyi Çalışmalar.