Image

(Son değişiklik: 06.11.2024)
Bu rehberde, Debian 12 üzerinde LEMP (Nginx, MariaDB ve PHP8.2) stack'inin nasıl kurulacağı gösterilmektedir. Yazılım stack’i, birlikte paketlenmiş bir dizi yazılım aracıdır. LEMP, Linux, Nginx (Engine-X), MariaDB/MySQL ve PHP’yi ifade eder; bunların hepsi açık kaynaklıdır ve ücretsiz olarak kullanılabilir. Dinamik web siteleri ve web uygulamaları destekleyen en yaygın yazılım stack’idir. Linux, bir işletim sistemi; Nginx, bir web sunucusudur; MariaDB/MySQL, bir veritabanı sunucusu ve PHP, dinamik web sayfaları oluşturmak için kullanılan bir sunucu tarafı betik dilidir. Bu rehberde root olarak kurulum yapacağız, normal bir kullanıcıysanız sudo komutunu kullanın.


Sıkça sorulan sorular:

  • Мы хотим, чтобы все данные находились у нас. Можете ли Вы произвести всю эту настройку на нашем оборудовании?

    Да, Вы можете заказать установку и настройку данной конфигурации на Вашем оборудовании по ссылке.


Önceden yapılandırılmış sunucu yapılandırması sipariş formunda mevcuttur.

1. Yazılım paketlerini güncelleyin

LEMP stack’ini kurmadan önce, depo ve yazılım paketlerini güncellemeniz önerilir. Debian 12 işletim sisteminde aşağıdaki komutları çalıştırın.

apt update
apt upgrade

2. Nginx web sunucusunu kurun

Nginx, günümüzde oldukça popüler olan yüksek performanslı bir web sunucusudur. Aynı zamanda bir ters proxy ve önbellek sunucusu olarak da kullanılabilir. Nginx web sunucusunu kurmak için aşağıdaki komutu girin.

apt install nginx

Kurulumdan sonra, Nginx’in otomatik olarak başlatılmasını sağlamak için aşağıdaki komutu çalıştırın.

systemctl enable nginx

Sonra Nginx’i başlatmak için şu komutu girin:

systemctl start nginx

Şimdi durumunu kontrol edin.

systemctl status nginx

Şimdi, Debian 12 sunucunuzun genel IP adresini tarayıcınızın adres çubuğuna girin. "Welcome to Nginx" başlıklı bir web sayfası görmelisiniz, bu da Nginx web sunucusunun doğru çalıştığını gösterir. Eğer LEMP’i yerel Debian 12 makinenizde kuruyorsanız, tarayıcınızın adres çubuğuna 127.0.0.1 veya localhost yazın.

Bağlantı reddedildi ya da kurulamadıysa, güvenlik duvarı TCP port 80’de gelen istekleri engelliyor olabilir. Eğer iptables güvenlik duvarı kullanıyorsanız, TCP port 80’i açmak için şu komutu çalıştırmanız gerekecek:

iptables -I INPUT -p tcp --dport 80 -j ACCEPT

Eğer UFW güvenlik duvarı kullanıyorsanız, TCP port 80’i açmak için şu komutu çalıştırın:

ufw allow http

Şimdi web dizininin sahibi olarak www-data’yı (Nginx kullanıcısı) atamamız gerekiyor. Varsayılan olarak kök kullanıcıya ait.

chown www-data:www-data /usr/share/nginx/html -R

3. MariaDB veritabanı sunucusunu kurun

MariaDB, MySQL’in yerine kullanılan bir yazılımdır. MySQL ekibinin eski üyeleri tarafından geliştirilmiştir ve Oracle’ın MySQL’i kapalı kaynaklı bir ürüne dönüştürmesinden endişe duymaktadırlar. Debian 12’ye MariaDB kurmak için aşağıdaki komutu girin.

apt install mariadb-server mariadb-client

Kurulumdan sonra MariaDB sunucusu otomatik olarak başlatılmalıdır. Durumunu kontrol etmek için systemctl komutunu kullanın.

systemctl status mariadb

Çalışmıyorsa, şu komutla başlatın:

systemctl start mariadb

MariaDB’nin her yeniden başlatıldığında otomatik olarak başlamasını sağlamak için şu komutu girin:

systemctl enable mariadb

Şimdi kurulum sonrası güvenlik script’ini çalıştırın.

mysql_secure_installation

MariaDB root şifresi istenirse, Enter tuşuna basın çünkü root şifresi henüz ayarlanmamıştır. Sonrasında root şifresini belirlemek için 'y' tuşuna basın.

Kalan soruları yanıtlamak için Enter tuşuna basarak anonim kullanıcıyı kaldıracak, uzak root erişimini devre dışı bırakacak ve test veritabanını silecektir. Bu adım, MariaDB veritabanını güvence altına almak için gereklidir. (Y tuşunun büyük olduğunu unutmayın, bu varsayılan yanıttır.)

Varsayılan olarak, Debian’ın MariaDB paketi kullanıcı kimlik doğrulaması için unix_socket kullanır, bu da demek oluyor ki, MariaDB konsoluna şifresiz olarak giriş yapabilirsiniz. Aşağıdaki komut ile MariaDB root şifresini girmeden giriş yapabilirsiniz:

mariadb -u root

Çıkmak için şu komutu çalıştırın:

exit;

4. PHP8.2’yi kurun

PHP8.2, Debian 12 deposunda yer almaktadır ve PHP7.x’e göre küçük bir performans artışı sağlamaktadır. PHP8.2 ve bazı yaygın uzantıları kurmak için aşağıdaki komutu girin:

apt install php php-fpm php-mysql php-common php-cli php-common php-json php-opcache php-readline php-mbstring php-xml php-gd php-curl

PHP uzantıları, WordPress gibi içerik yönetim sistemleri (CMS) için genellikle gereklidir. Örneğin, php8.2-xml eksikse, WordPress sitenizin bazı sayfaları boş olabilir ve Nginx hata günlüğünde şu tür bir hata bulabilirsiniz:

PHP Mesajı: PHP Fatal Error: Unhandled Error: Undefined function call xml_parser_create()

Bu PHP uzantılarını kurmak, CMS’nizin düzgün çalışmasını sağlar. Şimdi php8.2-fpm’yi başlatın.

systemctl start php8.2-fpm

Başlangıçta otomatik çalıştırılmasını sağlamak için:

systemctl enable php8.2-fpm

Durumu kontrol edin:

systemctl status php8.2-fpm

5. Nginx sunucu bloğu oluşturun

Nginx sunucu bloğu, Apache’deki sanal ana bilgisayara benzer. PHP kodu çalıştırmak için uygun olmayan varsayılan sunucu bloğunu kullanmayacağız, çünkü değiştirilirse karışıklığa yol açar. Bu nedenle, /etc/nginx/sites-enabled/ dizinindeki varsayılan sembolik bağlantıyı kaldırmak için şu komutu çalıştırın. (Yine de /etc/nginx/sites-available/default olarak mevcuttur.)

rm /etc/nginx/sites-enabled/default

Sonra Nano gibi bir komut satırı metin düzenleyicisi kullanarak /etc/nginx/conf.d/ dizininde yeni bir sunucu bloğu dosyası oluşturun. Dosyaya aşağıdaki met ni yapıştırın. Bu snippet, Nginx’in IPv4 port 80 ve IPv6 port 80’de sunucunun tekil adıyla dinlemesini sağlar.

nano /etc/nginx/conf.d/default.conf

server {

  listen 80;
  listen [::]:80;
  server_name _;
  root /usr/share/nginx/html/;
  index index.php index.html index.htm index.nginx-debian.html;
  location / {
    try_files $uri $uri/ /index.php;
  }

  location ~ \.php$ {
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    include snippets/fastcgi-php.conf;
  }

 # Tarayıcı önbellek yaşam süresi tekrar ziyaretlerde sayfanızın hızlanmasına yardımcı olabilir
  location ~* \.(jpg|jpeg|gif|png|webp|svg|woff|woff2|ttf|css|js|ico|xml)$ {
       access_log        off;
       log_not_found     off;
       expires           360d;
  }

  # gizli dosyalara erişimi devre dışı bırakın
  location ~ /\.ht {
      access_log off;
      log_not_found off;
      deny all;
  }
}

Dosyayı kaydedin ve kapatın. (Nano metin düzenleyicisinde dosyayı kaydetmek için Ctrl+O'ya, sonra Enter tuşuna basın. Çıkmak için Ctrl+X tuşlarına basın.)

Sonra Nginx yapılandırmalarını test edin.

nginx -t

Test başarılı olursa, Nginx’i yeniden başlatın.

systemctl reload nginx

6. PHP testi

PHP-FPM’i Nginx web sunucusu ile test etmek için, web kök dizininde info.php dosyası oluşturmanız gerekecek.

nano /usr/share/nginx/html/info.php


Dosyayı kaydedip kapatın. Şimdi tarayıcı adres çubuğuna server-ip-address/info.php yazın. Sunucu IP adresinizi gerçek IP adresinizle değiştirin. Bu rehberi yerel makinenizde takip ediyorsanız, tarayıcınızın adres çubuğuna 127.0.0.1/info.php veya localhost/info.php yazın.

Sunucunuzun PHP bilgilerini göreceksiniz. Bu, PHP betiklerinin Nginx web sunucusu ile doğru çalıştığını gösterir.

7. Nginx’in otomatik yeniden başlatılması

Eğer bir nedenle Nginx işlemi durursa, şu komutu çalıştırarak yeniden başlatmanız gerekecek.

systemctl restart nginx

Bu komutu manuel olarak yazmak yerine, Nginx’in otomatik olarak yeniden başlatılmasını sağlayabiliriz. Bunun için nginx.service systemd sistem modülünü düzenlememiz gerekiyor. Varsayılan systemd servis yapılandırmasını geçersiz kılmak için ayrı bir dizin oluşturuyoruz.

mkdir -p /etc/systemd/system/nginx.service.d/

Sonra o dizinde bir dosya oluşturun.

nano /etc/systemd/system/nginx.service.d/restart.conf

Bu dosyaya, Nginx’in bir hata tespit edildikten sonra 5 saniye içinde otomatik olarak yeniden başlatılmasını sağlayacak aşağıdaki satırları ekleyin. Varsayılan RetartSec 100ms’dir, bu çok kısa bir süredir. Eğer RestartSec yeterince büyük değilse, Nginx "başlatma isteği çok hızlı tekrarlanıyor" şeklinde bir şikayette bulunabilir.


[Service]

Restart=always
RestartSec=5s

Dosyayı kaydedin ve kapatın. Değişikliklerin etkili olabilmesi için systemd’yi yeniden yükleyin.

systemctl daemon-reload

Bu işlemin çalışıp çalışmadığını test etmek için, Nginx’i öldürmek için:

pkill nginx

Sonra Nginx’in durumunu kontrol edin. Nginx’in otomatik olarak yeniden başlatıldığını göreceksiniz.

systemctl status nginx

LEMP (Nginx, MariaDB ve PHP8.2) Debian 12 üzerinde başarıyla kuruldu. Tüm bu adımlar, sipariş formunda Debian 12 için önceden yüklenmiş LEMP yapılandırmasında zaten yapılmıştır.




No Comments Yet