Debian 10 Üzerinde Nginx, MariaDB, PHP (LEMP) Kurulumu

LEMP, dinamik web sayfaları ve web uygulamaları (WordPress, Joomla! gibi…) sunmak için kullanılabilen bir yazılım grubudur. “LEMP” adı, (E) Nginx web sunucusuna sahip bir Linux işletim sistemini tanımlayan bir kısaltmadır. Veriler bir MariaDB veritabanında saklanır ve dinamik işlemler PHP tarafından işlenir.

Bu yazılım grubu tipik olarak veritabanı yönetim sistemi olarak MySQL içermesine rağmen, Debian dahil olmak üzere bazı Linux dağıtımları MariaDB’i MySQL’in yerini alan bir yedek yazılım olarak kullanır.

Bu kılavuzda, veritabanı yönetim sistemi olarak MariaDB’i kullanarak, Debian 10 sunucunuza bir LEMP yazılım grubu yükleyeceksiniz.

Ön gereksinimler
Bu kılavuzu tamamlamak için bir Debian 10 sunucusuna (DigitalOcean ve Vultr tavsiyemdir) root ya da sudo kullanıcısı olarak SSH erişiminiz olmalıdır.

Adım 1 - Nginx Web Sunucusunu Yükleme

Web sitenizi ziyaretçilerinize sunmak için biz, genel performansı ve kararlılığıyla tanınan popüler bir web sunucusu olan Nginx’i kullanacağız .

Bu yöntem için kullanacağınız tüm yazılımlar doğrudan Debian’ın varsayılan paket depolarından gelir. Bu, yüklemeyi tamamlamak için apt paket yönetimini kullanabileceğiniz anlamına gelir .

apt komutunu bu oturum için ilk kez kullanacağınızdan, yerel paket dizininizi güncelleyerek başlamalısınız. Daha sonra kuruluma devam edebilirsiniz;

sudo apt update
sudo apt upgrade -y
sudo apt install nginx -y

Debian 10’da, Nginx kurulumdan sonra zaten direkt çalışmaya başlayacak şekilde yapılandırılmıştır.

Eğer çalışan bir ufw güvenlik duvarı varsa, Nginx için bağlantılara izin vermeniz gerekecektir. Yine de sadece sizin istediğiniz trafiğe izin verecek en kısıtlayıcı profili etkinleştirmelisiniz. Yoksa zaten alttaki komutlardan birincisi ile yine kurmuş olacağız.

Bunu aşağıdaki komutları sırasıyla yazarak etkinleştirebilirsiniz:

sudo apt install ufw -y
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable

Değişikliği aşağıdakileri yazarak doğrulayabilirsiniz:

sudo ufw status

Çıktıda HTTP, HTTP(S), OpenSSH trafiğine izin verildiğini görmelisiniz.

Eğer Nginx HTTP gibi önceden kurallar tanımladıysanız şu komutla kaldırın (Nginx Full parametresi hem HTTP hem HTTP(S) trafiğine izin verecektir);

sudo ufw delete allow 'Nginx HTTP'
sudo ufw delete allow 'Nginx HTTPS'

Şimdi, favori web tarayıcınızdan sunucunuzun etki alan adına veya genel IP adresine erişerek sunucunun çalışıp çalışmadığını test edin. Sunucunuza işaret eden bir alan adınız yoksa ve sunucunuzun genel IP adresini bilmiyorsanız, terminalinizde aşağıdaki komutu yazarak bulabilirsiniz:

ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

Bu komut çıktı olarak birkaç IP adresi yazdıracaktır. Birincisini web tarayıcınızda deneyebilirsiniz. Web tarayıcınıza terminalden aldığınız adreslerden birincisini yazın.

Sizi Nginx’in varsayılan açılış sayfasına götürmelidir:

http://sizinalanadiniz.com
http://ipadresiniz

Debian Nginx'in varsayılan açılış sayfası

Adım 2 - MariaDB’i Yükleme

Artık web sunucunuz çalışıyor ve siteniz için veri depolamak ve yönetmek için veritabanı sistemini yüklemelisiniz.

Debian 10’da mysql-server geleneksel olarak MySQL sunucusunu kurmak için kullanılan meta paketin default-mysql-server yerini almıştır.

Ancak biz uzun süreli uyumluluk ve açık kaynağın devamlılığı için mysql-server yerine, yazılımın mariadb-server paketini kullanarak MariaDB yüklemenizi öneriyoruz.

Bu yazılımı yüklemek için şunu çalıştırın:

sudo apt install mariadb-server -y

Yükleme tamamlandığında, MariaDB ile önceden yüklenmiş olarak gelen bir güvenlik komut dosyasını çalıştırmanızı önermekteyiz. Bu komut dosyası güvenli olmayan bazı varsayılan ayarları kaldıracak ve veritabanı sisteminize erişimi makul ölçüde kilitleyecektir. Şimdi etkileşimli komut dosyasını şunları yazarak başlatın:

sudo mysql_secure_installation

Bu komut dosyası sizi MariaDB kurulumunuzda bazı değişiklikler yapabileceğiniz bir dizi bilgi istemine götürür. İlk bilgi istemi, geçerli veritabanı kök parolasını girmenizi ister. Bu sistem köküyle karıştırılmamalıdır. Veritabanı kök kullanıcı veritabanı sistemi üzerinde tam ayrıcalıkları olan bir idari kullanıcıdır. MariaDB’i yeni yüklediğiniz ve henüz herhangi bir yapılandırma değişikliği yapmadığınız için bu şifre boş kalmalıdır, bu yüzden sadece ENTER tuşuna basın .

Sonraki istemde bir veritabanı kök parolası ayarlamak isteyip istemediğiniz sorulur. MariaDB, kök kullanıcı için genellikle bir parola kullanmaktan daha güvenli olan özel bir kimlik doğrulama yöntemi kullandığından, şimdi bunu ayarlamanıza gerek yoktur. N yazın ve ENTER tuşuna basın.

Sonraki soruların varsayılanlarını kabul etmek için Y ve Enter tuşlarına basabilirsiniz. Bu takip eden istemler, anonim kullanıcıları ve test veritabanını kaldıracak, uzaktan kök oturum açmayı devre dışı bırakacak ve MariaDB’nin yaptığınız değişikliklere hemen uyması için bu yeni kuralları yazılıma yükleyecektir.

İşlem bittiğinde, alttaki komutu yazarak MariaDB konsoluna giriş yapın:

sudo mariadb

Bu komut ile, MariaDB sunucusuna yönetimsel veritabanı kullanıcı kökü olarak bağlanırsınız.
Aşağıdaki gibi bir çıktı görmelisiniz:

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 53
Server version: 10.3.22-MariaDB-0+deb10u1 Debian 10

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

Kök kullanıcı olarak bağlanmak için bir parola girmeniz gerekmediğine dikkat edin . Bu unix_socket yerine, yönetimsel MariaDB kullanıcısı için varsayılan kimlik doğrulama yöntemi olan şifreniz yerine kullanılır. Bu ilk başta bir güvenlik sorunu gibi görünse de, veritabanı sunucusunu aslında daha güvenli bir hale getirir, çünkü kök MariaDB kullanıcısı olarak oturum açmasına izin verilen kullanıcılar zaten sudo ayrıcalıklarına sahip sistem kullanıcılarıdır. Kısacası aynı ayrıcalıklardır :slight_smile: Pratik olarak ise, PHP uygulamanızdan bağlanmak için yönetici veritabanı kök kullanıcısını kullanamayacağınız anlamına gelir.

Daha fazla güvenlik için, özellikle sunucunuzda birden çok veritabanı barındırmayı planlıyorsanız, her veritabanı için daha az geniş ayrıcalıklara sahip özel kullanıcı hesaplarına sahip olmak en iyisidir. Böyle bir durumda yeni bir veritabanı olan ornek_veritabani ve yeni bir kullanıcı olan ornek_kullanici oluşturmamız gerekir. Yeni bir veritabanı oluşturmak için MariaDB konsolunuzdan aşağıdaki komutu çalıştırın:

CREATE DATABASE ornek_veritabani;

Artık yeni bir kullanıcı oluşturabilir ve yeni oluşturduğunuz özel veritabanında tam ayrıcalık tanıyabilirsiniz. Aşağıdaki komut bu oluşturulan kullanıcının parolasını şu şekilde ayarlar şifreniz, ancak bu değeri kendi seçtiğiniz güvenli bir parola ile değiştirmeniz gerekir.

GRANT ALL ON ornek_veritabani.* TO 'ornek_kullanici'@'localhost' IDENTIFIED BY 'şifreniz' WITH GRANT OPTION;

Bu, ornek_kullanici kullanıcısına ornek_veritabani veritabanı üzerinde tam ayrıcalıklar verirken, bu kullanıcının sunucunuzda başka veritabanları oluşturmasını veya değiştirmesini engeller.

Geçerli oturumda kaydedildiklerinden ve kullanılabilir olduklarından emin olmak için ayrıcalıkları temizleyin:

FLUSH PRIVILEGES;

Bu komutu takiben, MariaDB kabuğundan şu komutla çıkın:

exit

MariaDB konsolunda tekrar bu özel kullanıcının kimlik bilgilerini kullanarak oturum açın ve yeni kullanıcının uygun izinlere sahip olup olmadığını test edin;

mariadb -u ornek_kullanici -p

-p komutu ornek_kullanici kullanıcısını oluştururken kullanılan şifreyi isteyecektir. MariaDB konsolunda oturum açtıktan sonra, ornek_veritabani veritabanına erişiminiz olduğunu doğrulayın:

SHOW DATABASES;

Bu size aşağıdaki çıktıyı verecektir:

MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| ornek_veritabani   |
| performance_schema |
+--------------------+
4 rows in set (0.002 sec)

MariaDB [(none)]>

MariaDB kabuğundan yine çıkmak için şunu komutu yazın:

exit

Bu noktada, veritabanı sisteminiz kuruldu ve LEMP grubunun son bileşeni olan PHP’yi kurmaya devam edebilirsiniz.

Adım 3 - Dinamik Veri İşleme için PHP Yükleme

İçeriğinize hizmet vermek için Nginx, verilerinizi depolamak ve yönetmek için MySQL kurduk. Artık web sunucusunda dinamik içerikler oluşturmak için PHP’yi yükleyebilirsiniz.

Apache, PHP tercümanını her talebe gömerken, Nginx, PHP işlemesi için harici bir yazılım gerektirir ve PHP tercümanı ile web sunucusu arasında köprü görevi görür. Bu, çoğu PHP tabanlı web sitesinde daha iyi bir performans sağlar, ancak ek yapılandırma gerektirir. php-fpm yani “PHP fastCGI işlem yöneticisi” anlamına gelen yüklemeniz ve Nginx’e PHP isteklerini işlenmek üzere bu yazılıma aktarmasını söylemeniz gerekir. Ayrıca, php-mysql yani PHP’nin MySQL tabanlı veritabanlarıyla iletişim kurmasını sağlayan bir PHP modülüne ihtiyacınız olacak. Çekirdek PHP paketleri otomatik olarak yan bağımlılıklar şeklinde kurulacaktır.

php-fpm ve php-mysql paketlerini kurmak için şu komutu çalıştırın:

sudo apt install php-fpm php-mysql -y

Artık PHP bileşenlerinizi yüklediniz. Ardından, Nginx’i bunları kullanacak şekilde yapılandırmalısınız.

Adım 4 - Nginx’i PHP İşlemciyi Kullanacak Şekilde Yapılandırma

Nginx web sunucusunu kullanırken, blokları yapılandırmak ve tek bir sunucuda birden fazla etki alanını barındırmak için sunucu blokları (Apache’deki sanal ana bilgisayarlara benzer) kullanılabilir. Bu kılavuzda biz, sizinalanadiniz.com örnek alan adı olarak kullanacağız.

Debian 10’da, Nginx’te varsayılan olarak etkin bir sunucu bloğu vardır ve dökümanları /var/www/html adresindeki bir dizinden sunmak üzere yapılandırılmıştır. Bu, tek bir site için iyi çalışıyor görünüyor olsa da, sunucunuzda birden fazla site barındırıyorsanız yönetilmesi zor bir hal alacaktır. Şimdi sizlerle beraber yeni bir alan adı için kayıt açacağız.

sizinalanadiniz.com için kök web dizinini aşağıdaki gibi oluşturun:

sudo mkdir /var/www/sizinalanadiniz.com

Ardından, dizinin sahipliğini $USER ortam değişkeni ile alan adınıza atayın;
Burada $USER, geçerli sistem kullanıcısıdır.

sudo chown -R $USER:$USER /var/www/sizinalanadiniz.com

Ardından, tercih ettiğiniz komut satırı düzenleyicisini kullanarak Nginx sites-available dizininde yeni bir yapılandırma dosyası açın . Burada biz nano editörünü kullanacağız;

sudo nano /etc/nginx/sites-available/sizinalanadiniz.com

Bu komut yeni bir boş dosya oluşturacak ve düzenlemek için açacaktır.
Aşağıdaki komutları yapıştırın (sizinalanadiniz.com kısımlarını düzenlemeyi unutmayın):

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

    root /var/www/sizinalanadiniz.com;
    index index.php index.html index.htm;

    server_name sizinalanadiniz.com www.sizinalanadiniz.com;

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

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

Bu, 80 bağlantı noktasını dinleyen ve yeni oluşturduğunuz web dizininden dosyalar sunan temel bir yapılandırmadır. Yalnızca sağlanan ana bilgisayara veya IP adresine yapılan isteklere yanıt verir ve Nginx sonuçları kullanıcıya göndermeden önce işler.

Düzenlemeyi bitirdiğinizde dosyayı kaydedin ve kapatın. Bunun için eğer nano kullandıysanız CTRL+X sonra y ve ENTER ile onaylayın.

Nginx sites-enabled dizinindeki yapılandırmanızı bağlayın ve etkinleştirin :

sudo ln -s /etc/nginx/sites-available/sizinalanadiniz.com /etc/nginx/sites-enabled/

Bu komut, Nginx’e bir sonraki yükleme işleminde yapılandırmayı kullanmasını söyleyecektir. Yapılandırmanızı söz dizimi hataları için aşağıdaki komutla test edebilirsiniz:

sudo nginx -t

Herhangi bir hata bildirilirse, devam etmeden önce içeriğini gözden geçirmek için Nginx yapılandırma dosyanıza geri dönmelisiniz.

Hazır olduğunuzda, değişiklikleri uygulamak ve devam etmek için Nginx’i yeniden başlatın:

sudo systemctl reload nginx

Adım 5 - Yapılandırmayı Test Etmek için Bir PHP Dosyası Oluşturma

LEMP yığınınız artık tamamen ayarlanmış oldu. Nginx’in .php dosyaları PHP işlemcinize doğru bir şekilde teslim edebileceğini doğrulamak için test edeceğiz.

Bunu, belge kökünde bir test PHP dosyası oluşturarak yapabilirsiniz.

nano /var/www/sizinalanadiniz.com/test.php

Aşağıdaki satırları yeni dosyaya yazın veya yapıştırın.
Bu kod, sunucunuz hakkında detaylı bilgi döndüren geçerli bir PHP kodudur.

<?php
phpinfo();
?>

İşlem bittiğinde, uygulamak ve onaylamak için CTRL+X sonra y ve ENTER tuşlarına basarak dosyayı kaydedip, kapatın.

Artık Nginx yapılandırma dosyasında ayarladığınız alan adını veya genel IP adresini ziyaret ederek web tarayıcınızda http://sizinalanadiniz.com/test.php sayfasına erişebilirsiniz.

Sunucunuz hakkında ayrıntılı bilgi içeren bir web sayfası görmelisiniz.

Bu sayfada PHP sunucunuzla ilgili bilgileri kontrol ettikten sonra, sunucunuz hakkında hassas bilgiler içerdiğinden, oluşturduğunuz dosyayı kaldırmalısınız.

rm -r /var/www/sizinalanadiniz.com/test.php

Daha sonra ihtiyaç duyarsanız bu dosyayı her zaman yeniden oluşturabileceksiniz.

Adım 6 - PHP’den Veritabanı Bağlantısının Test Edilmesi (İsteğe bağlı)

PHP’nin MariaDB’ye bağlanıp bağlanamayacağını test etmek ve veritabanı sorgularını yürütmek için test etmek istiyorsanız, bir PHP komut dosyasından kukla verilerle bir test tablosu oluşturabilir ve içeriği için sorgulayabilirsiniz.

Bunun için ilk olarak, oluşturduğunuz veritabanı kullanıcısıyla MariaDB konsoluna bağlanın:

mariadb -u ornek_kullanici -p

yapilacaklar_listesi adlı bir tablo oluşturun. MariaDB konsolundan aşağıdaki ifadeyi çalıştırın:

CREATE TABLE ornek_veritabani.yapilacaklar_listesi (
    item_id INT AUTO_INCREMENT,
    content VARCHAR(255),
    PRIMARY KEY(item_id)
);

Şimdi, “yapilacaklar_listesi” tablosuna birkaç satır içerik ekleyin.
Farklı değerleri kullanarak bir sonraki komutu birkaç kez tekrarlamak isteyebilirsiniz:

INSERT INTO ornek_veritabani.yapilacaklar_listesi (content) VALUES ("ilk yapilacak sey");

Verilerin tablonuza başarıyla kaydedildiğini onaylamak için ise şu komutu çalıştırın:

SELECT * FROM ornek_veritabani.yapilacaklar_listesi;

Aşağıdaki çıktıyı göreceksiniz:

MariaDB [(none)]> SELECT * FROM ornek_veritabani.yapilacaklar_listesi;
+---------+-------------------+
| item_id | content           |
+---------+-------------------+
|       1 | ilk yapilacak sey |
+---------+-------------------+
1 row in set (0.001 sec)

MariaDB [(none)]>


Test tablonuzda geçerli verilerinizin bulunduğunu onayladıktan sonra MariaDB konsolundan çıkabilirsiniz:

exit

Artık MariaDB’ye bağlanacak ve içeriğinizi sorgulayacak PHP betiğini oluşturabilirsiniz.
Tercih ettiğiniz terminal editörünü kullanarak web kök dizininizde yeni bir PHP dosyası oluşturun.

nano /var/www/sizinalanadiniz.com/yapilacaklar_listesi.php

PHP betiğinize aşağıdaki içeriği ekleyin:

<?php
$user = "ornek_kullanici";
$password = "şifreniz";
$database = "ornek_veritabani";
$table = "yapilacaklar_listesi";

try {
  $db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
  echo "<h2>Yapilacaklar listesi</h2><ol>";
  foreach($db->query("SELECT content FROM $table") as $row) {
    echo "<li>" . $row['content'] . "</li>";
  }
  echo "</ol>";
} catch (PDOException $e) {
    print "Hata!: " . $e->getMessage() . "<br/>";
    die();
}

Düzenlemeyi bitirdiğinizde dosyayı kaydedin ve kapatın.

Artık Nginx yapılandırma dosyasında ayarladığınız alan adını http://sizinalanadiniz.com/yapilacaklar_listesi.php veya genel IP adresini ziyaret ederek web tarayıcınızda bu sayfaya erişebilirsiniz. Test tablonuza eklediğiniz içeriği gösteren bir sayfa görmelisiniz.

Oluşturduğunuz dosyayı daha sonra alttaki komut ile silebilirsiniz;

rm -r /var/www/sizinalanadiniz.com/yapilacaklar_listesi.php

Sonuç

Bu kılavuzda, Nginx’i web sunucusu olarak kullanarak ziyaretçilerinize PHP web sitelerini ve uygulamalarını sunmak için esnek bir temel oluşturdunuz. Nginx’i PHP isteklerini ele alacak php-fpm olarak ayarladınız, ayrıca web sitenizin verilerini depolamak için bir MariaDB veritabanı kurdunuz.

Son olarak şuradan devam etmenizi öneriyoruz :wink:

Herhangi bir sorunla karşı karşıyaysanız, bu makaleyi yanıtlamaktan çekinmeyin :point_down: