-- LEMP, MySQL, Nginx, PHP, Ubuntu

Ubuntu 16.04 için Linux, Nginx, MySQL, PHP (LEMP stack) Kurulumu

Bu yazıda size Ubuntu server üzerinde geliştirme yapabilmek ve projelerinizi yayınlayabilmek için gerekli olan LEMP ortamını nasıl kurabileceğinizi anlatmaya çalışacağım. Bu yazının sonunda Nginx, PHP ve MySQL modüllerine sahip olacak ve bunları kullanarak yayın yapabileceğiz.

Ubuntu üzerinde apt paket yöneticisi olduğu için kurulumlarda bu paket yöneticisini kullanıyor olacağız. İlk olarak aşağıdaki komut ile güncel paket bilgilerini alıyoruz.
(Bu işlemler sırasında sudo yetkisine sahip bir kullanıcı kullanmanız gerekmektedir)

sudo apt-get update

1. adım: Nginx Kurulumu

Sayfamıza gelen ziyaretçileri karşılamak üzere daha performanslı olduğunu düşündüğüm nginx’i tercih ediyorum. (Dilerseniz apache de kullanabilirsiniz. Bu başka bir yazının konusu olabilir) Nginx ile ilgili daha detaylı tanıtım ve bilgi için internette arama yapabilirsiniz, bu yazıda ne olduğundan ziyade nasıl kurulduğuyla ilgileniyoruz.

sudo apt-get install nginx

Yukarıdaki komutu çalıştırarak nginx’i kuruyoruz. Nginx ubuntu 16.04 üzerinde kurulduktan sonra açılış servis hizmeti olarak da otomatik olarak tanımlanacaktır. Ek olarak açılışta başlaması için bir ayar yapmamıza gerek yoktur.

* Eğer sunucu üzerinde ufw gibi bir firewall paketi mevcutsa, bu firewall paketinden nginx için gerekli bağlantı ayarlarına izin vermeniz gerekmektedir. Şu aşamada SSL kullanmayacağımız için aşağıdaki kodu yazarak sadece HTTP (80) protokolüne izin veriyoruz:

sudo ufw allow 'Nginx HTTP'

aşağıdaki kodu yazarak firewall üzerinde izin verilen bağlantıları görüntüleyebilirsiniz:

sudo ufw status

çıktıda HTTP trafiğine izin verdiyseniz alttaki gibi bir görüntü olacaktır:

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Nginx HTTP                 ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

Firewall izin işlemlerini tamamladıktan sonra artık default nginx sayfasına erişebilirsiniz. Şimdi sunucuda tanımlı public IP adresinize yönlenmiş bir alan adına girerek ya da public IP adresinizi yazarak nginx kurulumunu test edebilirsiniz.

http://volkanmetin.com

http://IP_ADRESIM

Yukarıdaki şekilde test ettiğinizde alttaki gibi bir karşılama sayfasını görmeniz gerekiyor.

nginx default page

 

2. adım: MySQL Kurulumu

Web server kurulumunu tamamladıktan sonra veri yönetimi için MySQL kurulumu yapacağız. Aşağıdaki kodu yazarak mysql kurulumunu gerçekleştirebilirsiniz:

sudo apt-get install mysql-server

Kurulum aşamasında sizden root kullanıcısı için bir parola belirlemeniz istenecek. Bu işlem sonunda sadece kurulum işlemini gerçekleştirdik. Ayarlar için aşağıdaki kodu yazın:

sudo mysql_secure_installation

Güvenli ayarlama başladığı zaman sizden VALIDATE PASSWORD PLUGIN‘i ayarlamanız istenecek. Burada dikkat etmeniz gereken konu, eğer bu eklentiyi aktif ederseniz MySQL kullanıcıları için parola belirlerken zorluk seviyesine göre belirlemeniz gerekecektir. Eğer kriterlere uygun parola belirlemezseniz MySQL size hata mesajı döndürecektir.

Ayarlamayı başlattığınız zaman ilk olarak aşağıdaki ekran sizi karşılayacak: (VALIDATE PASSWORD PLUGIN‘i kurmak istiyorsanız y ya da Y yazın, eğer kurmak istemiyorsanız herhangi bir tuşa basarak devam edebilirsiniz)

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No:

Benim önerim bu eklentiyi aktif hale getirmeniz ancak zorluk derecesini MEDIUM olarak ayarlamanız. Eğer kurma işlemini onaylarsanız alttaki gibi bir ekran gelecek ve sizden bir zorluk derecesi seçmenizi isteyecek. Burada zorluk derecesi MySQL içerisinde tanımlanacak kullanıcılara verilen parolaların zorluk derecesi. Yani MEDIUM (orta) seviyeyi seçerseniz; rakam, büyük-küçük harf ve özel karakterlerden oluşturacağınız parolaları verebilirsiniz. Diğer ihtimallerde belirleyeceğiniz parolaları güvenli bulmayarak kabul etmeyecektir.

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG:

Zorluk derecesini 1 olarak belirliyor ve devam ediyoruz. Bundan sonra ilk gelen soruda sizden root kullanıcısının parolasını değiştirmek isteyip istemediğinizi soracak. Ben değiştirmek istemediğim için n olarak işaretledim ve devam ettim. Daha sonra gelecek olan sorularda y girerek ilgili işlemi yapmasını söyledim. (Soruların hepsi güvenlik ile ilgili olduğu için özel durumlar hariç sizin de işlemi onaylamanızı tavsiye ediyorum)

Ayarlama işlemi bittikten sonra MySQL servisi sunucu üzerine başarıyla kurulmuş ve çalışır duruma gelmiş olmalı.

 

3. adım: PHP Kurulumu

Sunucu üzerinde yayın için Nginx ve veritabanı için MySQL kurduktan sonra artık dinamik sayfalar oluşturabilmek için PHP kurulumuna başlayacağız. Nginx üzerinde diğer web serverlarda olduğu gibi native PHP çalıştıramıyoruz bu nedenle php-fpm kuracağız. Daha sonra nginx ayarlarında php dosyalarını php-fpm ile çalıştırması için ayarlayacağız.

Php dosyalarımızda MySQL veritabanıyla haberleşeceğimiz için php kurulumu yaparken bu bağlantıyı sağlayacak paketi de kuruyoruz. Kurulum için alttaki kodu çalıştırmanız yeterli:

sudo apt-get install php-fpm php-mysql

Ubuntu paket arşivinde şu anda Ubuntu 16.04 sürümü için php-fpm 7.0 tanımlı. Bu nedenle default olarak sisteminize PHP7 kurulacaktır. Nginx ile birlikte aktif çalıştırabilmek ve bazı güvenlik önlemleri için aşağıdaki adımları izleyerek birkaç ayar yapmamız gerekmektedir.

PHP İstemci Ayarlama

Aşağıdaki dosyayı sudo yetkisi olan kullanıcı ile açın:

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

Dosya içerisinde cgi.fix_pathinfo satırını bulun ve başındaki ; (noktalı virgül) kaldırın. Değerini de 0 olarak değiştirin. Aşağıdaki gibi olması gerekiyor:

cgi.fix_pathinfo=0

Ayarı değiştirdikten sonra geçerli olması için php-fpm servisini yeniden başlatmamız gerekiyor. Aşağıdaki kodla yeniden başlatabilirsiniz:

sudo systemctl restart php7.0-fpm

 

4. adım: PHP Kullanabilmek için Nginx Ayarları

Nginx üzerinde farklı domainler çalıştırmadan önce default ayarlarında php-fpm’i aktif etmek için default ayar dosyasını açmamız gerekiyor:

sudo nano /etc/nginx/sites-available/default

Dosya içeriği aşağıdaki gibi olmalı: (Sunucuda ipv6 ayarları tanımlı değilse listen [::]:80 default_server; satırı görünmeyecektir, probleme neden olmaz)

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;
    index index.html index.htm index.nginx-debian.html;

    server_name _;

    location / {
        try_files $uri $uri/ =404;
    }
}

Bu dosya üzerinde bir takım değişiklikler yapacağız. Aşağıdaki satırları adım adım sizde uygulayın:

  • index index.html satırları arasına index.php yazın. Bu satır, bir dizindeki okunacak dosyaların sıralamasıdır. İlk olarak index dosyası okunuyor ve 2. sırada index.php dosyasının okunmasını sağlıyoruz.
  • server_name sonrasına varsa ana domainimizi yoksa public IP adresimizi yazıyoruz.
  • PHP isteklerini işlenebilmesi ve php-fpm’in çalıştırılması için location ~\.php$ kod bloğunu ekliyoruz. (örneği aşağıda)
  • Nginx .htaccess dosyalarını işlemediği için bu dosyalar text dosyası olarak yayınlanacaktır ve ziyaretçiler dosyanın içeriğini görebilecektir. Olası bir durumda bu dosyalar sunucuya yüklenirse bunları ziyaretçilerin görememesi için location ~ /\.ht { ile engelleyeceğiz. (örneği aşağıda)

Değişiklikleri tamamladıktan sonra dosyamız aşağıdaki gibi olmalı:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;
    index index.php index.html index.htm index.nginx-debian.html;

    server_name volkanmetin.com;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

Şimdi az önce yaptığımız ayarlarda bir hata yapıp yapmadığımızı kontrol ediyoruz:

sudo nginx -t

Eğer herhangi bir hata ile karşılaşmadıysak, ayarların aktif olabilmesi için nginx servisini yeniden başlatmalıyız.

sudo systemctl reload nginx

 

5. adım: PHP Dosyası Oluşturup Test Etmek

Yukarıda yaptığımız ayarlardan sonra artık .php uzantılı dosyalar yüklediğimiz zaman nginx bu dosyaları php-fpm ile çalıştırarak ziyaretçiye yansıtacak. Bunu test etmek için nginx tarafından default oluşturulan klasöre gidip test.php adında bir dosya oluşturacağız ve çalışıp çalışmadığını kontrol edeceğiz.

sudo nano /var/www/html/test.php

test.php adında bir dosya açtık ve içerisine aşağıdaki kodları yazarak kaydedin:

<?php
phpinfo();

Kurulumda bir domain belirlediyseniz bu domaini kullanarak, eğer domain belirlemediyseniz public IP adresini kullanarak dosyayı çalıştırın.

http://IP_ADRESINIZ/test.php

http://volkanmetin.com/test.php

Eğer herhangi bir problem yaşamadan yukarıdaki tüm işlemleri yaptıysanız server hakkında bilgileri içeren PHP sayfasına ulaşmış olmalısınız.

PHP Info Page

Başarılı kurulumu tamamladıktan sonra bu dosyayı silmeyi unutmayın. Çünkü bu dosya, sunucu ve yapılandırma ayarlarınız hakkında çok fazla bilgi içermektedir. Aşağıdaki kod ile dosyayı silebilirsiniz:

sudo rm /var/www/html/test.php

Şu anda Ubuntu 16.04 sürümü üzerinde LEMP stack’e (Linux, Nginx, MySQL ve PHP bileşenlerine) sahipsiniz. Bu ortam size oldukça keyifli bir geliştirme deneyimi sunacaktır.

Sorularınız olursa yorum kısmından bildirmekten lütfen çekinmeyin. Elimden geldiğince yardımcı olmaya çalışacağım.

  • Burak Bilici

    Teşekkürederim Güzel Bir Eğitim.
    Sorum Olucak Mysql root ŞLifresini Nasıl Değişitiricez ,?
    ve Kullanıcı Nasıl Oluşturucaz