Nasıl Yapılır

En İyi Drupal 8 Güvenlik Modülleri

Drupal güvenlik modulleri

İnternet bazen tehlikeli bir yer olabilir. Çok sayıda bilgisayar korsanı ve potansiyel olarak kötü uygulamalardan hızlıca kâr elde etmek isteyen insanlar ile doludur. Böyle bir ortamda, Drupal sitenizi olabildiğince güvenli hale getirmek giderek önem kazanmaktadır. Neyse ki, Drupal oldukça güvenli bir CMS olarak bilinir. Bununla birlikte, hiçbir şekilde mükemmel değildir ve çeşitli modüller için esnekliği ve desteği sayesinde, onu daha güvenli hale getirmek için kurabileceğiniz birkaç modül vardır. Bu nedenle, Drupal sitenize indirebileceğiniz ve kurabileceğiniz en iyi güvenlik modüllerinden bazılarına mümkün olduğu kadar kusursuz olmasını sağlayalım.

Login Security
Sitenize giriş sayfası, evinizin kapısı gibidir. O zaman güçlendirmek için ilk şey giriş işlemi olacaktır. Bu amaç için mükemmel bir modül Login Güvenlik Modülüdür. Hesabın otomatik olarak engellenmesini engelleyerek sınırlı sayıda giriş yapma denemesi yapmanıza olanak tanır. Buna ek olarak, sitenizde potansiyel bir kaba kuvvet saldırısı olması durumunda IP adreslerini engellemenin yanı sıra size e-posta yoluyla uyarılar göndermenizi sağlar.

Captcha Modülü
Hızlı soru: Spam gönderenleri uzak tutmanın en kolay ve en yaygın kullanılan yöntemi nedir? Elbette Captcha. Captcha modülü ile birkaç dakika içinde captcha'yı Drupal sitenize entegre edebilir ve sinir bozucu spam gönderenleri ve botları uzak tutabilirsiniz.

Security Kit
Sitenizi kusursuz kılmak için yolculuğunuzda en iyi arkadaşınız olacak bir modül olan Security Kit, siteniz için hacklenme şansınızı en aza indirmek için çeşitli seçenekleri yapılandırmanıza, düzenlemenize olanak tanıyan hepsi bir arada bir modüldür. Bunun da ötesinde, sitenizi olabildiğince kötü amaçlı saldırılara karşı dayanıklı kılmak için http başlıkları ayarlamak vb. Gibi yararlı talimatlar da sunar. Drupal sitelerinin korunmasına olanak veren çok değerli bir modül.

Password Policy
Siteniz için bir şifre politikası oluşturmak, yalnızca botları uzak tutmakla kalmayıp, aynı zamanda kullanıcıların yalnızca 'şifre123' türünü değil, güçlü bir şifre korumasını sağlamaya yardımcı olduğu için iyi bir fikirdir. Güçlü bir şifre, sitenizdeki ihlalleri önlemeye yardımcı olur ve bu da işlem sırasında çok daha güvenli olmasını sağlar. Parola ilkesi modülü, yalnızca kullanıcı tarafından parolaları kabul edilmeden önce karşılanması gereken bir dizi kısıtlama tanımlamanız için seçenekler sağlayarak bunu yapmanızı sağlar. Drupal 8 sürümü şu anda alfa aşamasındayken mükemmel bir şekilde çalışıyor, bu nedenle devam edin ve sitenizde etkinleştirin.

Session Limit
Adından da anlaşılacağı gibi, bu modül kullanıcı başına izin verilen maksimum oturum sayısını yapılandırmanıza izin verir. Oturum sayısı, bir kullanıcının oturum açtığı tarayıcı sayısıdır. Bu modülü kullanarak, kullanıcının yeni bir oturum açmadan önce başka bir oturumdan çıkmasını istemek gibi diğer seçenekleri de yapılandırabilirsiniz.

Sonuç
Bu modülleri kullanarak, Drupal sitenizin çok daha güvenli kalmasını sağlayabilirsiniz. Bir Drupal sitesinde güvenliğini sağlamak için uygulanabilecek ek teknikler olsa da, başlamak için bu modüller işi güzelce yapacaktır. Unutulmaması gereken bir başka şey, Drupal 8 ile kullanıma hazır birçok güvenlik önlemi uygulanmış olmasıdır, bu nedenle şu anda Drupal 7'den daha küçük bir miktar ek güvenlik modülü kullanmaktadır.

Siteniz için güvenlik önlemleri oluşturma konusunda kafanız mı karıştı? Sitenizin yeterince güvenli olup olmadığı konusunda endişeli misiniz? Bize ulaşın ve geniş Drupal deneyimimizin size bu konuda yardımcı olmasına izin verin!

Mutlu kodlamalar

Drupal'de özel bloklar nasıl oluşturulur ve Twig'de ekran nasıl ayarlanır

Drupal twig custom block

Drupal'de, özel bir modül geliştirirken PHP içinde doğrudan HTML yazmaktan kaçınılmalıdır. Bu örnekte size programlı olarak özel bir blok oluşturmayı, özel bir Twig dosyası oluşturmayı ve istenen değişkenleri bir şablona göstermeyi deneyimleyeceğiz.

Adımları takip edin.

/**
 * Implements hook_theme().
 */
function magnec_custom_theme() {
  return [
    'magnec_custom_block' => [
      'variables' => ['title' => NULL, 'link' => NULL],
      'template' => 'block--magnec-custom',
    ],
  ];
}

Adım bir blok dosyası oluşturmak ve kodu yerleştirmek. Özel modül klasörüne gidin, /src/Plugin/Block dosyasını açın ve örneğin; MagnecCustom.php dosyası oluşturun. Blok ve yönetici etiketiniz için kimliği tanımlayın; böylece Yapı -> Blok yerleşimi bakarak blok alanını kolayca bulabilirsiniz.

Bir sınıf oluşturun ve BlockBase'i genişletin. build() işlevini kullanın ve bir dizi değişken döndürün.

namespace Drupal\magnec_custom\Plugin\Block;

use Drupal\Core\Block\BlockBase;

/**
 * Provides a 'magnec custom' block.
 *
 * @Block(
 *   id = "magnec_custom_block",
 *   admin_label = @Translation("Magnec Custom Block"),
 * )
 */
class MagnecCustom extends BlockBase {
  /**
   * {@inheritdoc}
   */
  public function build() {
    return [
      '#theme' => 'magnec_custom_block',
      '#title' => 'Drupal Webtasarım',
      '#link' => 'http://magnec.com/',
    ];
  }
}

Şimdi önbelleği temizleyin ve Yapı -> Blok yerleşimi seçin. Blokunuzu bulun ve istediğiniz bölüme yerleştirin.

Bir sonraki adım, Twig dosyası oluşturmak ve değişkenleri oluşturmaktır. Temalar klasörünüzde, örneğin kullandığınız temayı açın. templates/block dosyasına gidin ve block--magnec-custom.html.twig dosyasını oluşturun (ilk örnekteki 'template' dizideki ad alanını tanımlamıştık).

Değişkenleri Twig HTML'ye dönüştürün:

{#
/**
 * @file
 * Profile magnec custom block.
 */
#}

  {{ title }}

Hepsi bu kadardı.

Mutlu kodlamalar!

Geliştirme Sırasında Drupal 8 Önbelleğini Devre Dışı Bırakmak

disable page cache drupal 8

Drupal 8' in birçok önbelleğe alma düzeyine sahip olduğunu biliyoruz. Bunlardan bazıları Render önbelleğe alma, Dinamik sayfa önbelleği, Twig şablon önbelleği gibi..

Bir modül veya bir tema geliştirirken, her değişiklik için önbelleği temizlemek yerine önbelleği geliştirme aşamasında devre dışı bırakmak daha kullanışlıdır. Geliştirme aşamasında oldukça fazla zamandan tasarruf sağlar. Bunun için basit bir şekilde önbellekleme sürecini etkin bir şekilde kapatmayı anlatıcak bir yazı olucak.

 

Adımlar:

 

1-) sites/example.settings.local.php dosyasını kopyalayıp sites/default/settings.local.php yeniden adlandırın.

2-) settings.local.php dosyanızda, "Disable the render cache"." ile başlayan bölümü bulun.

 

3-) $settings değişkeninindeki "#" işaretini kaldırın. Aşağıdaki örnekte olduğu gibi bırakın.

  Örn: $settings['cache']['bins']['render'] = 'cache.backend.null';

4-) Dynamic page caching: Dinamik sayfa önbelleğe alma, Drupal'ın bir sayfanın tüm oluşturulmuş çıktısını alması ve onu veritabanına (veya başka bir önbellek deposuna; varsayılan olarak ) kaydetmesidir. Sayfalar yalnızca anonim trafiğe ve alışveriş sepetindeki öğeler gibi oturum verilerine sahip olmayan kullanıcılar için önbelleğe alınır.

5-) settings.local.php dosyanızda, Disable Dynamic Page Cache" ile başlayan bölümü bulun.

6-) $settings değişkenindeki "#" işaretini kaldırın. Aşağıdaki örnekte olduğu gibi bırakın.

  Örn: $settings['cache']['bins']['dynamic_page_cache'] = 'cache.backend.null';

7-) " sites/default" klasöründe settings.php dosyasını açın ve "settings.local.php" ile başlayan bölümü bulun.

8-) "#" işaretini kaldırın. Aşağıdaki örnekte olduğu gibi bırakın.

  Örn:

 

if (file_exists($app_root . '/' . $site_path . '/settings.local.php')) {

 include $app_root . '/' . $site_path . '/settings.local.php';

}

9-) sites klasöründeki development.services.yml dosyasını açın ve aşağıdaki satırları ekleyin (twig önbelleğini devre dışı bırakmak için)

parameters:

 twig.config:

   debug: true

   auto_reload: true

   cache: false

 

10-) Son olarak development.services.yml aşağıdaki gibi olmalıdır:

11-) Yukarıdaki adımlardan sonra, Drupal önbelleğini yeniden oluşturmanız gerekir.

drush cache-rebuild

drush cr

 

Şimdi blogdaki adımlar eksiksiz yapıldıktan sonra, Drupal'ın önbellekleme sistemi etkin bir şekilde kapatılmıştır.

Mutlu kodlamalar

Linux (Ubuntu, Debian) Server da PHP Composer Kurulumu

composer php

Giriş

PHP Composer, kullanıcı kimlik doğrulaması veya veritabanı yönetimi gibi yaygın olarak kullanılan web sitesi bileşenlerini, kontrol etmeye yarayan, kullanıcıların "tekerleği yeniden icat etmek" zorunda kalmasını engelleyen bir PHP paket yönetim sistemidir. Composer, Ruby's Bundler gibi diğer popüler paket yönetim sistemleri ile modellenmiştir.

Composer vs Pear

PEAR, PHP için ilk önemli paket yönetim sistemiydi. Ancak, PEAR son yıllarda geliştiricilerin lehine düşmüştür. PEAR'a dahil edilmek üzere onaylanmış paket alma zorluğu nedeniyle, PEAR aracılığıyla temin edilebilen paketlerin çoğu güncel değildir. PEAR ayrıca kullanıcıların sistem genelinde paket yüklemesini gerektirirken Composer, sistem genelinde veya proje bazında paketleri yüklemenizi sağlar. Composer ayrıca bağımlılıkları ele almada daha iyi olma eğilimindedir, daha geniş ve daha güncel bir kod tabanına sahiptir ve daha aktif bir şekilde sürdürülür.

Gereksinimler

Linux çalıştıran Sunucusu (Ubuntu , Debian)
PHP yüklü ve yapılandırılmış, sürüm 5.3.2 veya daha yüksek

PHP versiyonunuzu kontrol etmek için php -v komutunu kullanın:

PHP 7.0.28-0ubuntu0.16.04.1 (cli) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.0.28-0ubuntu0.16.04.1, Copyright (c) 1999-2017, by Zend Technologies

Bu örnekte, sunucu PHP 7.0.28 sürümünü çalıştırıyor.

PHP Composer Kurulumu

Paketlerinizi güncelleyin:

sudo apt-get update

Yoksa eğer Curl yardımcı programını yükleyin:

sudo apt-get install curl

Composer indirin

sudo curl -s https://getcomposer.org/installer | php

composer.phar dosyasını taşıyın:

sudo mv composer.phar /usr/local/bin/composer

Yüklemeyi test etmek için composer komutunu kullanın. Composer doğru şekilde yüklendiyse, sunucu uzun bir yardım bilgileri ve komutları listesiyle yanıt verecektir:


/ ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 1.6.3 2018-01-31 16:28:17

Usage:
  command [options] [arguments]

Options:
  -h, --help                     Display this help message
  -q, --quiet                    Do not output any message
  -V, --version                  Display this application version
      --ansi                     Force ANSI output
      --no-ansi                  Disable ANSI output
  -n, --no-interaction           Do not ask any interactive question
      --profile                  Display timing and memory usage information
      --no-plugins               Whether to disable plugins.
  -d, --working-dir=WORKING-DIR  If specified, use the given directory as working directory.
  -v|vv|vvv, --verbose           Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Available commands:
  about                         Shows the short information about Composer.
  archive                       Creates an archive of this composer package.
  browse                        Opens the package's repository URL or homepage in your browser.
  check-platform-reqs           Check that platform requirements are satisfied.
  clear-cache                   Clears composer's internal package cache.
  clearcache                    Clears composer's internal package cache.
  config                        Sets config options.
  create-project                Creates new project from a package into given directory.
  depends                       Shows which packages cause the given package to be installed.
  diagnose                      Diagnoses the system to identify common errors.
  drupal-phpunit-upgrade        Runs the drupal-phpunit-upgrade script as defined in composer.json.
  drupal-phpunit-upgrade-check  Runs the drupal-phpunit-upgrade-check script as defined in composer.json.
  dump-autoload                 Dumps the autoloader.
  dumpautoload                  Dumps the autoloader.
  exec                          Executes a vendored binary/script.
  global                        Allows running commands in the global composer dir ($COMPOSER_HOME).
  help                          Displays help for a command
  home                          Opens the package's repository URL or homepage in your browser.
  info                          Shows information about packages.
  init                          Creates a basic composer.json file in current directory.
  install                       Installs the project dependencies from the composer.lock file if present, or falls back on the composer.json.
  licenses                      Shows information about licenses of dependencies.
  list                          Lists commands
  outdated                      Shows a list of installed packages that have updates available, including their latest version.
  phpcbf                        Runs the phpcbf script as defined in composer.json.
  phpcs                         Runs the phpcs script as defined in composer.json.
  prohibits                     Shows which packages prevent the given package from being installed.
  remove                        Removes a package from the require or require-dev.
  require                       Adds required packages to your composer.json and installs them.
  run-script                    Runs the scripts defined in composer.json.
  search                        Searches for packages.
  self-update                   Updates composer.phar to the latest version.
  selfupdate                    Updates composer.phar to the latest version.
  show                          Shows information about packages.
  status                        Shows a list of locally modified packages.
  suggests                      Shows package suggestions.
  update                        Upgrades your dependencies to the latest version according to composer.json, and updates the composer.lock file.
  upgrade                       Upgrades your dependencies to the latest version according to composer.json, and updates the composer.lock file.
  validate                      Validates a composer.json and composer.lock.
  why                           Shows which packages cause the given package to be installed.
  why-not                       Shows which packages prevent the given package from being installed.

Herşey tamamsa composer kurulumu tamamlanmış demektir. Drupal ve Composer kullanımı ile alakalı yazımıza göz atabilirsiniz.

Mutlu kodlamalar

Hızlı İpucu: Drupal 8'i Composer ile kurun!

Composer

Drupal 8 ile başlamak için önerilen yaklaşım şimdi composer üzerinden kurulum yapmaktan geçiyor. Bunun için resmi proje şablonu oluşturuldu. Projemizi doğrudan Packagist'te bulunan şablonu kullanarak oluşturacağız.

Öncelikle Composer Kurulumu ile ilgili yazımıza göz atabilirsiniz

Bu şablonu temel alan yeni bir proje oluşturmak için aşağıdaki composer komutunu çalıştırabiliriz:

 

composer create-project drupal-composer/drupal-project:8.x-dev projeadi --stability dev --no-interaction

Bu composer komutu, şablonu Packagist'ten alacak ve projemizi yükleme ve hazırlamak için birkaç Drupal'a özgü scripts çalıştıracaktır. Yapılması gereken tek şey, tarayıcımızı /web dizinine (index.php dosyasının bulunduğu yerden) yönlendirmek ve yükleyiciyi her zamanki gibi çalıştırmaktır.

Bu şablon, diğer şeylerin yanı sıra artık Drupal çekirdeğindeki (index.php dosyası veya modüller ve temalar klasörleri) bir parçası sayılmayan bir Drupal yüklemesinin ana klasörlerini içeren bir /web klasörü ile birlikte gelir. Buna ek olarak, Drupal tarafından kullanılan bir autoload.phpdosyası sadece composer vendor/ dizinine işaret eden bir klasörle birlikte gelir. Böylece bütün PHP kütüphaneleri artık tek bir yerden ele alınıyor.

Şablonun composer.json dosyası, en son kararlı Drupal çekirdeği + Drush ve Drupal Console gibi ek yardımcı araçlar gerektirir. Buna ek olarak, Drupal tarafından özel paketleyici havuzunu, Drupal tarafından katkıda bulunan modülleri, temaları ve profilleri (otomatik olarak doğru yere yerleştirilen) yükleyebildiğimiz yerden ekliyor. Drupal tarafından eklenen bir modül eklemek istersek, onu Drupal specific Packagist'te bulmalı ve projemizde Composer ile bunu yapmamız gerekiyor:

'Modul kurulumu için'

composer require drupal/ctools

Bu komut Ctools modülünü doğrudan web/modules/dizinimize ekleyecek ve composer.json dosyasını güncelleyecektir.

 

Proje şablonu ayrıca, .gitignore dosyasıyla birlikte gelir ve Drupal çekirdeğini ve Git'in dışındaki katkıda bulunan tüm paketleri normal vendor/composer.json dosyasına dayanarak, daha küçük bir Git depoyu idame ettirebilir ve projemizi istediğiniz zaman yeniden oluşturabilirsiniz. Drush Make'in yararlarının birçoğu artık compser akışına dahil edilmiştir.

Drupal Drush Kurulumu

/user/local/bin/composeri /usr/bine sembolik bağlantı oluşturuyoruz.

sudo ln -s /usr/local/bin/composer /usr/bin/composer

DRUSH yazılımını github'dan çekiyoruz.

sudo git clone https://github.com/drush-ops/drush.git /usr/local/src/drush

DRUSH dizinine giriyoruz.

cd /usr/local/src/drush

https://github.com/drush-ops/drush/releases adresine girip, indirdiğimiz yazılımı test edelim.(1 mart tarihinde 9.2.1 sürümündeydi.)

sudo git checkout 9.2.1

Herhangi bir dizinden drush çağırabilmek için; /usr/local/srcden /usr/bin altındaki drush a sembolik bağlantı ekliyoruz.

sudo ln -s /usr/local/src/drush/drush /usr/bin/drush

Composer ile yükleyelim.

sudo composer install

Yukarıdaki adımları sorunsuz hallettiyseniz, başarıyla kurdunuz demektir. :)

drush --version

Sonuç

Drupal 8 diğer büyük PHP yazılımlarını geliştirmede çok yol kat etti. Compser yoluyla, ana proje olarak veya daha büyük bir uygulama setinin parçası, olarak tam olarak yönetilebilmesi, topluluk tarafından verilen çabanın kanıtıdır.

Mutlu kodlamalar

Drupal'de Özel Drush Komutları Oluşturma

Drupal'de Özel Drush Komutları Oluşturma

Kendi özel Drush komutlarınızı oluşturmak çok basittir. Bu blog yazısında Drupal 7 ve Drupal 8 için iki misal göstereceğiz

Özel Drush komutları oluşturmak, bilgileri Drupal'a içe aktarmanız veya bilgileri Drupal'dan dışa aktarmanız gerektiğinde çok faydalı olabilir. Özel komutunuzu çalıştırıp bash komut dosyasını crontab'a ilave edeceğiniz ayrı bir bash komut dosyası yaratmanız gerekiyor

Drupal 8 örneği

Drupal 8 modülü yapısı:

drush_example/
  - drush_example.info.yml
  - drush_example.drush.inc

drush_example.info.yml:,

name: Drush Example command
description: Drupal 8 custom drush command example
type: module
core: 8.x

drush_example.drush.inc

/**
 * Implements hook_drush_command().
 */
function drush_example_drush_command() {

  $commands['my-example-command'] = [
    'description' => 'This is my example command.',
    'aliases' => ['mec'],
    'arguments' => [
       'arg1' => 'My custom argument 1.',
       'arg2' => 'My custom argument 2.',
     ],
     'options' => [
       'opt1' => 'My custom option.',
     ],
     'examples' => [
       'drush mec' => 'Print my example command.',
       'drush mec myargument' => 'Print my example command with an argument "myargument".',
       'drush mec myargument --opt1=myoption' => 'Print my example command with an argument "myargument" and an option "myoption".',
     ],
  ];

  return $commands;
}

/**
 * Drush command logic.
 * drush_[MODULE_NAME]_[COMMAND_NAME]().
 */
function drush_drush_example_my_example_command($arg1 = 'N/A', $arg2 = 'N/A') {
  $opt1 = drush_get_option('opt1', 'N/A');
  $tokens = ['@arg1' => $arg1, '@opt1' => $opt1];
  drush_print(dt('My custom command. Argument: @arg1 Option: @opt1', $tokens));
}

Drupal 7 örneği

D7 örnek modülü için aşağıdaki yapıyı kullanacağız:

drush_example/
  - drush_example.info
  - drush_example.module (empty .module file)
  - drush_example.drush.inc

drush_example.info:

 

name = Drush Example command 
description = Drupal 7 custom drush command example
core = 7.x

drush_example.drush.inc

/**
 * Implements hook_drush_command().
 */
function drush_example_drush_command() {

  $commands['my-example-command'] = array(
    'description' => 'This is my example command.',
    'aliases' => array('mec'),
    'arguments' => array(
       'arg1' => 'My custom argument 1.',
       'arg2' => 'My custom argument 2.',
     ),
     'options' => array(
       'opt1' => 'My custom option.',
     ),
     'examples' => array(
       'drush mec' => 'Print my example command.',
       'drush mec myargument' => 'Print my example command with an argument "myargument".',
       'drush mec myargument --opt1=myoption' => 'Print my example command with an argument "myargument" and an option "myoption".',
     ),
  );

  return $commands;
}

/**
 * Drush command logic.
 * drush_[COMMAND_NAME]().
 */
function drush_my_example_command($arg1 = 'N/A', $arg2 = 'N/A') {
  $opt1 = drush_get_option('opt1', 'N/A');
  $tokens = array('@arg1' => $arg1, '@opt1' => $opt1);
  drush_print(dt('My custom command. Argument: @arg1 Option: @opt1', $tokens));
}

Mutlu kodlamalar

Drupal 8 için Performans Optimizasyonu Kılavuzu

Drupal 8 için Performans Optimizasyonu Kılavuzu

Sayfa yükleme hızı kullanıcı deneyimi ve kullanışlılığı için önemli bir faktördür. Web projelerinizi geliştirirken performansı korumak ve stabil tutmak ana kriter sayılabilicek düzeydedir.. Ayrıca site performansını artırabileceğiniz pek çok yol vardır.

Drupal 8'de, site performansını optimize etmek için belirli araçlar ve modüller bulunur.

Önbellekleme, web sitesinizi optimize etmek için popüler bir tekniktir. Web verilerini (HTML, CSS, Resim) erişilebilir bir yerde depolayan bir işlemdir. Örneğin, kullanıcı bir web sayfasını ilk kez talep ettiğinde okunabilir içeriği veya bilgiyi belleğine depolar ve kullanıcı aynı HTTP sayfasını tekrar talep ettiğinde depolanan verileri alır ve kullanıcılara gösterir. Web sayfasının hızlı bir şekilde yüklenmesini sağlar.

Temelde iki tür önbellekleme vardır: İstemci tarafında önbelleğe alma ve Sunucu tarafında önbelleğe alma. Bu iki önbellekleme yöntemi dışında, sayfalar veritabanında önbelleklenebilir, Drupal öncelikle kendi veritabanında bilgiyi önbelleğe alır.

Drupal 8'in çekirdek önbellekleme teknikleri

Internal Page Cache: Bu çekirdek modül anonim kullanıcılar içindir. Bir e-ticaret web siteniz varsa ve anonim bir kullanıcı için "Sepete ekle" işlevselliğiniz varsa, bu önbellekleme modülü kullanılarak yapılabilir. Bu işleve ihtiyacınız yoksa kapatın.

Internal Dynamic Page Cache: Bu modül dahili sayfa önbelleğine benzer ve ikisi arasındaki tek fark, hem anonim kullanıcı hem de oturum açmış kullanıcı için önbelleğe almasıdır.

Varsayılan olarak "Internal Dynamic Page Cache" ve "Internal Page Cache" in kurulu ve etkinleştirildiğinden emin olun. Bir örnek için aşağıdaki ekran görüntüsüne bakın.

Görsel kaldırıldı.

Page cache maximum age: Bu ayar, ön belleğe alınmış bir sayfanın maksimum zaman sınırı içindir. Burada ayarladığımız zaman ne olursa olsun, sitemiz tarayıcılara önbellekte saklanan bilgileri/verileri saklayacaklarını söyleyen azami zamandır. Varsayılan olarak, dahili dinamik sayfa önbellek "No caching" dir, ancak gereksinim uyarınca değiştirilebilir.

Görsel kaldırıldı.

CSS ve JavaScript dosyalarını toplamayı seçtiğinizde, "Bant Genişliği İyileştirmesi", sayfanın yüklenmesi için gereken HTTP isteklerinin sayısını azaltmak için paketleri gruplar.

Görsel kaldırıldı.

Drupal harici önbellekleme tekniği:

Drupal'da, harici bir önbellekle CMS etkileşimini denetleyen birkaç teknik var. Aşağıdaki gibi katkıda bulunan modülleri kullanarak yapılabilirsiniz.

  • CSS/JS Aggregation: Drupal kendi toplama yeteneklerine sahiptir; ancak Advanced CSS/JS Aggregation modulu dosya gruplama, önbelleğe alma ve sıkıştırma için daha etkili yaklaşımlar sunarak bunları büyük ölçüde geliştirir.
  • Varnish cache: Varnish, web sunucusundaki yükü azaltırken bir web sitesini hızlandıran bir programdır. Site performansını çeşitli modülleri kullanarak hızlandırabilirsiniz. örn: Varnish purge ve  Advanced Varnish Cache
  • Memcache: Memcache, standart önbelleği veritabanından çıkarıp Drupal uygulama performansını geliştirir. Drupal 8'de iki tür Memcached modülü vardır: Memcache ve Memcache Storage Nasıl yapılacağına blog yazımıza bir göz atarak ögrenebilirsiniz Drupal8'de Veritabanı Yükünü Azaltmak için Memcached Yapılandırma.
  • Redis: Redis, yüksek performanslı depolama ve erişim için optimize edilmiş bir önbellek tekniğidir. Bellek içi veri kümesiyle çalışır. Ayrıntılı bir açıklama için Redis modülüne göz atın.

MySQL yerine MariaDB'yi kullanın

MariaDB, verileri çeşitli web uygulamalarında yapılandırılmış bilgilere dönüştürürebilinir. MariaDB'nin, daha iyi depolama motoru ve performans özellikler açısından çeşitli avantajları vardır. Buna ek olarak, büyük kuruluşlar ve kurumsal kullanıcılar için büyük verileri işleyen TokuDB'yi de destekliyor

MySQL'in veritabanı motorları olan MyISAM ve InnoDB'in MariaDB'de sırasıyla Aria ve XtraDB tarafından değiştirildiğini unutmayın. Aria, disk yoğun operasyonlar söz konusu olduğunda fark yaratan daha iyi önbellekleme imkanı sunar. Geçici tablolar, karmaşık sorguları hızlandırmak için Aria'yı da kullanır. Percona'nın XtraDB, özellikle yüksek yüklü ortamlarda yavaş performans ve istikrar ile tüm InnoDB sorunlarından kurtarabilir.

Apache yerine Nginx kullanın

Apache ve Nginx en yaygın kullanılan iki açık web sunucusudur, ancak Nginx daha hızlıdır ve Apache'den daha az bellek tüketir. Nginx, Apache web servisine göre daha iyi performans gösterir. Aynı zamanda çok az sayıda eşzamanlı kullanıcıyı asgari kaynaklar kullanır.

Diğer özel araçlar ve modüller

  • Gereksiz tüm modülleri web uygulamanızdan devre dışı bırakın.
  • Bir güncelleme varsa, kullandığınız modülleri ve çekirdeği mutlaka güncelleyin.
  • Devel: Sorunları izlemeye yardımcı olduğu için sorgu analizi için Devel modülünü kullanın.
  • CDN (içerik dağıtım ağı): Sitenizde gösterilecek çok miktarda içerik varsa, bir CDN kullanmayı düşünün. Çoğu CDN, görüntü, video, ses klipleri, CSS dosyaları ve JavaScript gibi statik kaynakları barındırmak için kullanılır. Bir CDN sunucusu bir site ziyaretçisine ne kadar yakınsa, içerik o kadar çabuk bilgisayarlarına veya mobil cihazlarına gönderilir. Örneğin: AWS CloudFront, Akamai. Drupal siteleri için kolay İçerik Dağıtım Ağı entegrasyonu sağlar.
  • Image Lazyloader ve Blazy: Bu iki modül yalnızca tarayıcı penceresinde görünen resimleri yükler.
  • CSS sprite: Küçük resimler için CSS sprite'ı kullanın birine birleştirin.
  • gzip sıkıştırma: GZIP, kayıpsız bir sıkıştırma sağlar; yani, sıkıştırmayı açtığınızda orijinal veriyi geri alabiliriz. DEFLATE algoritmasına dayanmaktadır. Nginx için  örneğin;
<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>

Gzip sıkıştırma aracını kullanarak sıkıştırmanın çalışıp çalışmadığını da kontrol edebilirsiniz.

Web hostinginizi değiştirin

Artık Drupal site performansını nasıl geliştireceğinizi biliyorsunuz. Uygulamanızın beklenen performans hedeflerini hala karşılamaması halinde daha hızlı hizmet sağlayan bir ana makine seçmeyi düşünün.

Managed Dedicated Server(s): Yönetilen adanmış sunucu sizin için tüm barındırma ihtiyaçlarınızı halleder. Sadece donanımı almakla kalmazsanız da, her şeyin gerektiği gibi çalışıp çalışmadığından emin olmanız için bir takım uzmanlar edersiniz. Yazılımınızı güncel tutarlar ve herhangi bir sorun varsa sizi uyarırlar. Birden çok yapılandırmayı birden çok sunucuyu dağıtabilirsiniz.

Dedicated Server(s):  Özel bir sunucu düşük gecikme süresi sağlar, bu da çoğu küçük ve orta ölçekli sitelere için hızlı tepki süresi demektir.

Cloud Hosting: Bulut barındırma ölçeklenebilir. Birden fazla sunucunun birbiri ile bağlanmasından oluşan bir servistir. Sunucuların aynı veri merkezi içinde olma zorunluluğu da yoktur, bir network ile birbirlerine bağlı olmaları yeterlidir.

Sonucu kontrol edelim

Masaüstü araçları: ApacheBench (ab), Apache jmeter, The Grinder, EasyQA

Çevrimiçi araçlar: Pingdom, GTMetrix, PageSpeed Insights

Performans optimizasyonu, büyük ölçekli veya küçük ölçekli olsun, her web uygulamasında önemli bir rol oynar. Bu blogda, Drupal uygulamalarının performansını ayarlamak için yapabileceğiniz ana yapılandırma değişikliklerinin bir listesini hazırlamaya çalıştık.

Resim boyutunun, web sitenizin yükleme hızı ve performansı üzerinde büyük bir etkisi olabileceğini unutmayın.

Drupal site performansı ile ilgili bir yardıma ihtiyaç duyarsanız bizimle iletişim kurmaktan çekinmeyin.

Mutlu kodlamalar

Drupal 8'de Veritabanı Yükünü Azaltmak için Memcached Yapılandırma

Drupal8'de Veritabanı Yükünü Azaltmak için Memcached Yapılandırma

Drupal'ın standart önbellek modunu  aktifleştirerek veritabanındaki gereksiz sorguları azaltabilirsiniz. Fakat yogun trafikli bir siteye sahipseniz bazen yeterli olmayabilir. Memcache, standart önbellek bilgilerini, veri tabanını sonuçlarını yeniden önbelleğe alarak Drupal uygulama performansınızı oldukça geliştirebilir.

Drupal'ın varsayılan olarak Memcached'i desteklemediğini ve bunun için sunucuya yüklememiz gerektiğini unutmayın. Memcached'i sunucuya nasıl yükleyeceğinizi ve her sayfanın yüklenmesiyle veritabanındaki yükü azaltmak için Drupal 8 ile nasıl yapılandırılacağını görelim.

Memcached'i sunucuya nasıl kuracağımıza göz atalım

Yerel makinenizdeki terminali açın ve sunucuya bağlandıktan sonra aşağıdaki kodları sırası ile çalıştırın:

sudo apt-get update

sudo apt install memcached

sudo apt install php-memcached

Aşağıdaki komutu çalıştırarak Memcache arka plan programının iyi çalıştığından emin olun:

“ps aux | grep memcached” 

Ayrıca, Memcached eklentisinin drupal sitenizin "admin/reports/status/php" sayfasını kontrol ederek veya info.php sayfası oluşturarak PHP7'de düzgün şekilde yapılandırılıp yapılandırılmadığını kontrol edin.

nano /var/www/html/memcache/info.php 

aşağıdaki kodu giriniz <?php phpinfo(); ?> Şimdi Memcached ve php7-fpm servislerini yeniden başlatın.

service memcached restart 
service php7.0-fpm restart 

Web tarayıcısına gidin ve info.php dosyasına veya drupal sitenizin "/admin/reports/status/php" adresine gidin ve "Memcached" araması memcache hakkında bilgiler bulacaksınız.

 

Sunucunuza Memcached yüklendikten sonra, Memcache module ve Memcache Storage module indirin. Daha sonra "drupal web sitenizin "/admin/modules" adresine gidin ve iki modülüde etkinleştirin.

Sunucuya kurduğumuz Memcache modulunu Drupal 8 için yapılandıralım:

Sitenizin settings.php dosyasını açın ve aşağıdaki kodu yapıştırın. Burada, D8 ve Memcached PECL'nin bir entegrasyonunu sağladığı için Drupal 8 için Memcache depolama alanını kullanıyoruz.

$settings['cache']['default'] = 'cache.backend.memcache_storage';

$settings['memcache_storage']['key_prefix'] = '';

$settings['memcache_storage']['memcached_servers'] = ['127.0.0.1:11211' => 'default'];

Debug için aşağıdaki kodu isterseniz settings.php dosyasında ekleyin.

$settings['memcache_storage']['debug'] = TRUE;

Hepsi bu kadardı. Artık memcache ile sunucu yükünü azaltmış olduk. Herhangi bir sorunuz olursa iletişim kurmaktan çekinmeyin. Bu tarz blog yazıları hoşunuza gidiyorsa mail bültenimize abone olabilirsiniz.

Mutlu kodlamalar

Drupal 8' de Register Event Subscriber Nasıl Kullanılır.

Drupal 8' de Register Event Subscriber Nasıl Kullanılır.

Drupal 8'deki olaylar, sistemin farklı bileşenlerinin birbiriyle etkileşim ve iletişim kurmasına olanak tanır. Bir sistem bileşeni olayı uygun bir saatte gönderir; birçok olay Drupal çekirdeği ve Symfony çerçevesi tarafından her istekte gönderilir. Diğer sistem bileşenleri etkinlik abonesi olarak kaydedilebilir; bir olay gönderildiğinde, kayıtlı abone üzerinde her biri tepki vermesine olanak veren bir yöntem ile çağrılır.

Drupal'ın önceki sürümlerinden gelen çengellerin çoğu, Drupal 8'de Olaylar lehine kaldırıldı. Örnek: hook_init() veya hook_boot() şimdi bir olay abonesini kaydederek yapılabilir.

Örnek modül için aşağıdaki yapıyı kullanacağız:

my_event_subscriber/
  - my_event_subscriber.info.yml
  - my_event_subscriber.services.yml
  - src/
    - EventSubscriber/
      - MyEventSubscriber.php

özel modul için standart my_event_subscriber.info.yml dosyası:

name: Register an Event Subscriber
type: module
description: 'Example: How to Register an Event Subscriber in Drupal 8'
core: 8.x
package: Other

Içinde 'event_subscriber' ile etiketlenmiş bir hizmet tanımlayın.

my_event_subscriber.services.yml.

services:
  my_event_subscriber:
    class: '\Drupal\my_event_subscriber\EventSubscriber\MyEventSubscriber'
    tags:
      - { name: 'event_subscriber' }

src/EventSubscriber/MyEventSubscriber.php uygulayan bir sınıf içeriyor

\Symfony\Component\EventDispatcher\EventSubscriberInterface

/**
 * @file
 * Contains \Drupal\my_event_subscriber\EventSubscriber\MyEventSubscriber.
 */

namespace Drupal\my_event_subscriber\EventSubscriber;

use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

/**
 * Event Subscriber MyEventSubscriber.
 */
class MyEventSubscriber implements EventSubscriberInterface {

  /**
   * Code that should be triggered on event specified 
   */
  public function onRespond(FilterResponseEvent $event) {
    // The RESPONSE event occurs once a response was created for replying to a request.
    // For example you could override or add extra HTTP headers in here
    $response = $event->getResponse();
    $response->headers->set('X-Custom-Header', 'MyValue');
  }

  /**
   * {@inheritdoc}
   */
  public static function getSubscribedEvents() {
    // For this example I am using KernelEvents constants (see below a full list).
    $events[KernelEvents::RESPONSE][] = ['onRespond'];
    return $events;
  }

}

KernelEvents sabitler listesi aşağıdadır:

KernelEvents::CONTROLLER; // The CONTROLLER event occurs once a controller was found for handling a request.
KernelEvents::EXCEPTION; // The EXCEPTION event occurs when an uncaught exception appears.
KernelEvents::FINISH_REQUEST; //The FINISH_REQUEST event occurs when a response was generated for a request.
KernelEvents::REQUEST; // The REQUEST event occurs at the very beginning of request dispatching.
KernelEvents::RESPONSE; // The RESPONSE event occurs once a response was created for replying to a request.
KernelEvents::TERMINATE; // The TERMINATE event occurs once a response was sent.
KernelEvents::VIEW; // The VIEW event occurs when the return value of a controller is not a Response instance.

Daha Fazlası için Drupal sayfası

Bir etkinlik nasıl gönderilir?

$dispatcher = \Drupal::service('event_dispatcher');
$dispatcher->dispatch($Event_Name, $Optional_Event_Object);

Kullanışlı bağlantılar

Drupal 8.2.x: HttpKernel component event constants

Drupal 8.2.x: class EventDispatcher

Drupal 8.2.x: Events

Drupal'da Önbellek API'si Nasıl Kullanılır?

Drupal'da Önbellek API'si nasıl kullanılır?

Yogun trafiğe sahip drupal projelerinizde modul geliştirken, üçüncü parti API'lerinden veya veri tabanından bilgi toplamak istediğinizde ağır hesaplamalar yapmanız gerekmez. Bunun yerine bir kere çalıştırın ve önbelleğe alın. Bizzat karışık SQL sorguları ve üçüncü parti entegrasyonları çalıştırmak gerektiğinde önbelleğe alma özelliğini kullanarak daha hızlı açılan web sayfaları oluşturabilirsiniz.

Drupal 8 için aşağıdaki kod yapısını kullanın;

public function custom_example_cache() {
  $data = &drupal_static(__FUNCTION__); //` __METHOD__` ile değiştirilebilir
  $cid = 'custom_example:' . \Drupal::languageManager()->getCurrentLanguage()->getId();

  if ($cache = \Drupal::cache()->get($cid)) {
    $data = $cache->data;
  }
  else {
    // Burası, yalnızca çalışacak kodunuzu ekleyeceğiniz yerdir    
    // yeni bir önbellek oluştururken.
    $data = custom_complicated_calculation();
    \Drupal::cache()->set($cid, $data);
  }
  return $data;
}

Drupal 7 için aşağıdaki kod yapısını kullanın;

function custom_example_cache() {
  $data = &drupal_static(__FUNCTION__);
  if (empty($data)) {
    if ($cache = cache_get('custom_example')) {
      $data = $cache->data;
    }
    else {
      // Burası, yalnızca çalışacak kodunuzu ekleyeceğiniz yerdir
      // yeni bir önbellek üretirken.
      $data = custom_complicated_calculation();
      cache_set('custom_example', $data, 'cache');
    }
  }
  return $data;
}

Yardımcı Linkler

  1. Drupal 8 API: Cache API
  2. Drupal 8 API: function drupal_static
  3. Drupal 7 API: function cache_set
  4. Drupal 7 API: function cache_get
  5. Drupal 7 API: function drupal_static
Abone ol Nasıl Yapılır