Grav SubDomain (Alt Alanadı) Multisite Kullanımı

Grav CLI Nedir? Nasıl Kullanılır? başlıklı bir önceki yazıda da belirttiğim gibi Grav kurulumu ve temel yapılandırmaların ardından daha detaylı ve işlevsel konulara geçtik. Bu yazıda da Grav subdirectory (alt klasör) multisite kullanımı ile ilgili yazıya ek olarak Grav subdomain multisite yapılandırmasını nasıl gerçekleştirebileceğimizden bahsedeceğim.

Grav SubDomain Multisite Kullanımı

Öncelikle, bu işlem için DNS yönetimi ve subdomain konusunda da temel bilginiz olması gerekiyor. Bu aşamada SubDirectory yazısındaki adımlara benzer bir yol izleyeceğiz. İlk olarak setup.php dosyamızı oluşturacağız.

cd ~/www/html/grav
nano setup.php

Oluşturduğumuz bu dosyaya aşağıdaki PHP kodunu yapştırıp, dosyası kayıt edebiliriz. Bu işlemin sonucunda http://.ornekwebsitesi.com --> user/sites/.ornekwebsitesi.com olarak sitemizi yapılandırmış olacağız.

<?php
/**
 * Multisite setup for subsites accessible via sub-domains.
 *
 * DO NOT EDIT UNLESS YOU KNOW WHAT YOU ARE DOING!
 */
 
use Grav\Common\Utils;
 
// Get subsite name from sub-domain
$environment = isset($_SERVER['HTTP_HOST'])
    ? $_SERVER['HTTP_HOST']
    : (isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : 'localhost');
// Remove port from HTTP_HOST generated $environment
$environment = strtolower(Utils::substrToString($environment, ':'));
$folder = "sites/{$environment}";
 
if ($environment === 'localhost' || !is_dir(ROOT_DIR . "user/{$folder}")) {
    return [];
}
 
return [
    'environment' => $environment,
    'streams' => [
        'schemes' => [
            'user' => [
               'type' => 'ReadOnlyStream',
               'prefixes' => [
                   '' => ["user/{$folder}"],
               ]
            ]
        ]
    ]
];

Bu aşamada subDirectory ile subDomain arasındaki farkı da görmüş olacaksınız. subDirectory sürecinde user/sites/ altında tanımlamayı alanadı olmaksızın gerçekleştirmiştik. Yayın için ayrıca subDomain için ayrıca alan adı tanımlaması ve wildcard yapılandırmasının da yapılması gerekir.

Örneğin cPanel üzerinden altsite1 adında bir subdomain oluşturalım. Elbette bu subdomain kullanmak istediğimiz alanadı içerisinde yer almalıdır. Tanımlama aşamasında ornekwebsitesi1 yerine wilcard kullanabilir ve * ile daha genel bir çözüm üretebilirdik. Çünkü wilcard kullanımı bize ilerleyen süreçte subdomain isimlerinde rahatlıkla değişiklik yapma ve hızlı bir şekilde yeni subdomainler oluşturma imkanı sunacaktır.

Bu işlemlerin ardından altsite1.ornekwebsitesi.com adresini görüntülemek istediğinizde büyük ihtimalle quark temasının bulunamadığına dair bir hata alacaksınız. Bu nedenle tema ve eklentiler için de setup.php içerisinde tanımlamalar yapmalıyız.

<?php
/**
 * Multisite setup for subsites accessible via sub-domains.
 *
 * DO NOT EDIT UNLESS YOU KNOW WHAT YOU ARE DOING!
 */
 
use Grav\Common\Utils;
 
// Get subsite name from sub-domain
$environment = isset($_SERVER['HTTP_HOST'])
    ? $_SERVER['HTTP_HOST']
    : (isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : 'localhost');
// Remove port from HTTP_HOST generated $environment
$environment = strtolower(Utils::substrToString($environment, ':'));
$folder = "sites/{$environment}";
 
$themes = ["user/themes"];
if (is_dir(__DIR__ . "/user/{$folder}/themes")) {
    array_unshift($themes, "user/{$folder}/themes");
}
 
$plugins = ["user/plugins"];
if (is_dir(__DIR__ . "/user/{$folder}/plugins")) {
    array_unshift($themes, "user/{$folder}/plugins");
}
 
if ($environment === 'localhost' || !is_dir(ROOT_DIR . "user/{$folder}")) {
    return [];
}
 
return [
    'environment' => $environment,
    'streams' => [
        'schemes' => [
            'user' => [
               'type' => 'ReadOnlyStream',
               'prefixes' => [
                   '' => ["user/{$folder}"],
               ]
            ],
            'environment' => [
                'type' => 'ReadOnlyStream',
                'prefixes' => [
                    '' => ["user/{$folder}"],
                ]
            ],
            'themes' => [
                'type' => 'ReadOnlyStream',
                'prefixes' => [
                    '' => $themes
                ]
            ],
            'plugins' => [
                'type' => 'ReadOnlyStream',
                'prefixes' => [
                    '' => $plugins
                ]
            ],
            'plugin' => [
                'type' => 'ReadOnlyStream',
                'prefixes' => [
                    '' => ['plugins://']
                ]
            ]
        ]
    ]
];

Artık temalarımızı ve eklentilerimiz oluşturacağımız tüm subdomainler için /var/www/grav/themes ve /var/www/grav/plugins olacaktır. Bu sayede bin/gpm install işlemlerinde de bu klasörü kontrol edebiliyor olacağız.

Son bir not olarak, her subdomain için pages klasörünün ayrı olacağını unutmamalısınız. Bu sayede içerikleri subdomain temelinde oluşturabileceğiz. Özetle, subdomain kullanımı için user klasörü içerisinde sites ve sites altında da altsite1.ornekwebsitesi.com adında subdomainimizi tanımlayan klasörümüzü oluşturduk. Bu klasör içerisinde config ve pages klasörlerimiz olmalı. pages bildiğimiz üzere içeriklerimizi yönettiğimiz alanımız. config ise ilgili subdomain için gerekli yapılandırmaların yer aldığı klasörümüz. Bu aşamaların tamamlanmasının ardından artık subdomainimizi görüntüleyebilir hale gelmiş oluyoruz. Hatta admin eklentisini kullanarak hızlı bir şekilde altsite1.ornekwebsitesi.com/admin/ yolu üzerinden sitenizi yönetmetmeye başlayabilir ve hatta dil yapılarını da düzenleyerek tek bir kurulum üzerinden pek çok dilde site yayını ve e-ticaret işlemleri gerçekleştirebilirsiniz.

Leave a Reply