DigitalOcean Ubuntu Üzerine Nginx Grav Kurulumu

Grav ile ilgili başlangıç yazısında Grav‘a dair özelliklerden (Bkz. API), sundukları (Bkz. E-Commerce) ve sun(a)madıklarından, uygulamanın odaklandığı sorun ve çözüm metotolojisinden bahsetmiştim.

AA

İlgili yazıda kurulum işlemlerini Apache üzerinden yürütmüştük. Bu yazıda ise kurulum sürecini Nginx HTTP sunucusu üzerinden gerçekleştireceğiz.

Kurulum Süreci

Kurulum için DigitalOcean > Ubuntu 16.04 tercih edecek ve Nginx & PHP kurulumlarını da ilk kez yapılandırarak ilerleyecek ve tüm bu süreci komut satırı üzerinden yürüteceğim.

Windows 10+ işletim sistemi ortamındaki kurulumlar için ise Windows Ortamında Grav Kurulumu başlıklı yazıya göz atabilirsiniz.

Doctl İle Sunucu Oluşturma ve SSH Bağlantısı

Çoğunlukla yaptığım gibi bu yazıda da DigitalOcean üzerinden örnek işlemler için Doctl ile bir sunucu oluşturacak ve bu sunucu üzerinden tüm işlemleri gerçekleştireceğim. Öncelikle seçeneklerimizi değerlendirelim.

doctl compute image list --public

Bağlantı sürecinde kullanacağımız tanımlı SSH anahtarlarımızı görüntüleyelim.

doctl compute ssh-key list

ubuntu-16-04-x64 uygun görünüyor. Lokasyon olarak New York tercih ettim. Tanımlı SSH-Key FingerPrint bilgilerimiz üzerinden droplet oluşturma işlemimizi yapabiliriz.

doctl compute droplet create gravSite --size 1gb --image ubuntu-16-04-x64 --region nyc1 --ssh-keys [ssh-fingerprint]

SSH bağlantısıyla birlikte Nginx ve Grav yapılandırma sürecine başlayabiliriz.

doctl compute ssh [droplet-id]

Nginx Kurulumu

Sunucu üzerinde yapılandırma işlemleri için ilk olarak paket yönetimizi güncelleyelim ve varsa son sürüme yükseltelim.

apt-get update
apt-get upgrade

Grav için veritabanı ihtiyacımız bulunmamakta (Bkz. PHP Flat-File İçerik Yönetimi). Bu nedenle MySQL/MariaDB vb. bir kuruluma ihtiyacımız yok. Ek olarak HTTP sunucu olarak herhangi bir yapılandırma da daha öncesinde gerçekleştirilmediği için Apache sunucusuna ait silme işlemi de yapmamız gerekmiyor. Ancak, olası bir düzenleme gereksinimine karşın aşağıda Apache dosya ve dizinlerine dair paket silme işlemini kısaca iletiyorum.

apt-get remove apache2*
apt-get autoremove

Artık Nginx kurulumuna da geçebiliriz. Ek olarak, sunucuda PHP yapılandırması mevcut olmadığından PHP başta olmak üzere ihtiyaç duyacağımız diğer paketleri de indirelim.

apt-get install nginx unzip php7.0-fpm php7.0-cli php7.0-gd php7.0-curl php7.0-mbstring php7.0-xml php7.0-zip php-apcu

Sunucumuza ait IP adresini alalım.

/sbin/ifconfig -a | grep 'inet addr:'

Dönen IP adresini internet tarayıcımız üzerinden görüntülediğimizde standart Ngix karşılama sayfası açılacaktır.

Nginx index

PHP7 FPM Yapılandırması

PHP7.0 kurulumunun ardından cgi.fix_pathinfo ile ilgili bir düzenleme yapmamız gerekiyor. php.ini dosyasını editörümüzle açıp içerikte cgi.fix_pathinfo araması yapmalıyız.

nano /etc/php/7.0/fpm/php.ini

Ctrl + W tuş kombinasyonu ile (;cgi.fix_pathinfo=1) satırını bulduktan sonra ; işaretini kaldırıp değer olarak 0 vererek dosyayı kapatabiliriz. Yani ilgili satır son durumda şu şekilde olacaktır.

cgi.fix_pathinfo=1

Bu düzenleme işleminin ardından PHP servisini yeniden başlatalım.

systemctl restart php7.0-fpm

Evet, PHP yapılandırmamız tamam. Şimdi Nginx için PHP bağlantısını ilişkilendirmeliyiz. Bu sayede dosya işlemlerindeki yetkilendirme hatalarından korunmuş olacağız.

cd /etc/php/7.0/fpm/pool.d
mv www.conf www.conf.bak
nano grav.conf

Açılacak boş grav.conf dosyamıza şu satırları kopyala yapıştır yöntemiyle aktaralım.

[grav]
user = grav
group = grav

listen = /run/php/php7.0-fpm.sock

listen.owner = www-data
listen.group = www-data

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

chdir = /

Şimdiye kadarki tüm süreci root kullanıcı üzerinden gerçekleştirdik. Kurulumlarla ilişkilendirilecek bir kullanıcıyla devam edelim. Ben kullanıcı adı olarak grav tercih ettim. İstediğiniz farklı bir kullanıcı adı ile devam edebilirsiniz.

adduser grav

Kullanıcı oluşturma aşamasında sizden şifre başta olmak üzere birkaç bilgi istenecektir. Kendinize göre bu alanları doldurabilirsiniz. Sadece şifre tanımlayarak da ilerleyebilirsiniz. Artık root kullanıcısından oluşturduğumuz grav kullanıcısına geçebilir ve ilişkili klasörlerimizi oluşturabiliriz.

su - grav
mkdir www;cd www;mkdir html;cd html

Bu aşamada klasör içeriğimiz boş olacaktır. Sürecin doğru bir şekilde ilerlediğini test etmek adına bir PHP dökümanı oluşturabiliriz.

echo '' > info.php

Şimdilik grav kullanıcısıyla işimiz bitti. exit komutu ile tekrar root kullanıcıya geçiş yapıp Nginx sunucu yapılandırmasını gerçekleştirebiliriz.

exit
cd /etc/nginx/sites-available/

grav adında bir metin dosyası oluşturacağız. Bu dosya bizim grav adında yapacağımız yüklemenin ardından yayınlanacak olan grav isimli klasör /home/grav/www/html içeriğini tanımlamakta. Başka bir isim de kullanabilirsiniz; önemli olan root olarak tanımlanan yolun doğruluğu.

nano grav

Açılacak boş metin dosyasına aşağıdaki satırları ekleyip dosyayı kaydedelim.

server {
    index index.html index.php;
    root /home/grav/www/html/grav;
    server_name [sunucu-ip-adresi-veya-alan-adi];

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

    location ~ .php$ {
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;

        fastcgi_split_path_info ^(.+.php)(/.+)$;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
    }

    location ~* /(.git|cache|bin|logs|backups)/.*$ { return 403; }
    location ~* /(system|vendor)/.*.(txt|xml|md|html|yaml|php|pl|py|cgi|twig|sh|bat)$ { return 403; }
    location ~* /user/.*.(txt|md|yaml|php|pl|py|cgi|twig|sh|bat)$ { return 403; }
    location ~ /(LICENSE|composer.lock|composer.json|nginx.conf|web.config|htaccess.txt|.htaccess) { return 403; }
}

Nginx yapılandırma sürecinde ön tanımlı olarak default adında bir kayıt oluşturulur. Biz oluşturduğumuz grav kapsamında devam edeceğimiz için default dosyasına gereksinimimiz kalmadı. Oluşturduğumuz grav isimli (ya da sizin tercih ettiğiniz isim) ayarlar için ln komutu sayeside sites-enabled ile sites-available arasında sembolik linklendirme işlemi yapmamız gerekiyor.

cd ../sites-enabled
ln -s ../sites-available/grav
rm default

Evet, Nginx yapılandırmamızı test edebiliriz.

nginx -t

Alacağımız dönüş şu şekilde olmalı.

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

İlgili servislerimizi yeniden başlatalım.

service nginx restart
service php7.0-fpm restart

Grav Kurulumu

Artık Grav kurulumumuza geçebiliriz. root kullanıcı yerine oluşturduğumuz grav isimli kullanıcıyla ilerleyeceğiz.

su - grav

Şimdi yayınlanmış olan son sürüm üzerinden Grav indirme işlemini yapabiliriz.

cd ~/www
wget https://getgrav.org/download/core/grav/latest; unzip latest.zip -d html/
cd html/grav

Kurulum aşamasında oluşturulan dosya ve klasörleri silip system.yaml dosyasını oluşturalım.

bin/grav clear

Alacağımız dönüş şu şekilde olacaktır.

Clearing cache

Cleared:  /home/grav/www/html/grav/cache/twig/*
Cleared:  /home/grav/www/html/grav/cache/compiled/*

Touched: /home/grav/www/html/grav/user/config/system.yaml

Son adımda artık yayına hazırız.

bin/gpm index

Komut ile birlikte kullanabileceğimiz eklenti ve temalar listelenecektir. Komut satırı üzerinden siteyi yönetmeye devam edebilirsiniz1.

bin/gpm info [paket-adi]

Ancak, admin panel üzerinden yönetmek isterseniz ya da harici diğer paketler (temalar ve eklentiler) ile ilgili sorgulama yapmak isterseniz info parametresini kullanabilirsiniz. Biz şimdilik admin paketini indirelim2.

bin/gpm install admin

Yayına hazırız. Nginx ayarlarında da belirttiğimiz server_name sunucu IP adresimizi ve/veya alan adımızı internet tarayıcımız üzerinden görüntülediğimizde eğer admin eklentisini kurmamışsak doğrudan Grav > Home sayfası, paketi kurmuşsak kullanıcı adı, şifre, e-posta adresi gibi alanları dolduracağımız ayar sayfası bizi karşılayacaktır. İlgili alanları doldurup kullanıcı oluşturduktan sonra tekrar ilgili IP ve/veya alan adı üzerinden Home sayfasına erişebiliriz.