Nginx

Aşağıdaki komut dizisi nginx paketini kuracak, her açılışta çalışacak şekilde aktif edecek ve başlatacaktır. Kurulum esnasında herhangi bir soru sorulmuyor.

sudo dnf install nginx
sudo systemctl enable nginx.service
sudo systemctl start nginx

Nginx Dizinleri

/usr/share/nginx/html : Sitenizde çalışacak dosyaların hepsini bu dizin altına yüklemelisiniz.

/etc/nginx : Nginx ana dizini.

/etc/nginx/nginx.conf : Nginx global konfigürasyon dosyası.

/etc/nginx/conf.d/ : Sunucu bloklarını içeren dizin. Bu dizinde istediğiniz kadar alan adının tanımlama dosyalarını oluşturabilirsiniz.

/var/log/nginx/access.log : Sunucuya yapılacak tüm istekler bu dosyada toplanır.

/var/log/nginx/error.log : Tüm hata mesajları bu dosyaya yazılır.

Nginx Blokları

Her ne kadar tek alan adı çalıştıracak sunucuda bu işlem gerekmiyor olsa da, kesinlikle uygulamanızı öneriyorum. Böylece ileride başka alan adlarını da aynı biçimde kolayca host edebilirsiniz. İstemiyorsanız bu adımı atlayabilirsiniz.

Nginx blokları hakkında detaylı bilgi burada yazıyor.

ÖNEMLİ: Bu adımın doğru çalışması için alan adınızın sunucu IP adresine yönlendirilmiş olması zorunludur.

Şimdi örnek example.com alan adı için bir sunucu bloğu oluşturalım. Alan adımız için bir dizin açarak işe başlıyoruz ve dizinin sahipliğini kullanıcımıza veriyoruz.

sudo mkdir -p /var/www/example.com/html
sudo chown -R $USER:$USER /var/www/example.com/html

Alan adımızın html dizininde bir index açıp içerik girelim:

nano /var/www/example.com/html/index.html

Örnek içeriği girin:

<html>
    <head>
        <title>Hoş Geldiniz</title>
    </head>
    <body>
        <h1>example.com için nginx blok sayfasıdır</h1>
    </body>
</html>

Sırada açtığımız alan adı klasörünü nginx’e tanıtma var.

sudo nano /etc/nginx/conf.d/example.com.conf

Aşağıdaki içeriği aynen girin:

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

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

        server_name example.com www.example.com;

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

Dosyayı kaydedip editörden F2 ile çıktıktan sonra yazım kontrolü yapıyoruz:

sudo nginx -t

Kodlar hatasız ise şu mesajı alacaksınız:

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

Son olarak nginx’i yeniden başlatıp selinux ayarını yapacağız.

sudo systemctl restart nginx
chcon -vR system_u:object_r:httpd_sys_content_t:s0 /var/www/example.com/

Alan adımız example.com için sunucu bloğu kurulumu tamamlandı. Tarayıcıdan sitenizi açtığınızda index.html dosyasına girdiğimiz içeriği göreceksiniz. Aynı adımları izleyerek sunucuda dilediğiniz kadar alan adını host edebilirsiniz.

Firewall

Şimdi firewalld yazılımını kurup aktif hale getirelim.

sudo dnf install firewalld
sudo systemctl enable firewalld
sudo systemctl start firewalld

Sırasıyla girilecek komutlar http (80) ve https (443) portlarına kalıcı izin verip aktif duruma getirecektir.

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

Nginx kurulumu ve firewall ayarları bu kadar. Henüz domain yönlendirmesi yapmadıysanız, sunucu IP adresini tarayıcınıza girip kontrol edebilirsiniz. Nginx varsayılan hoşgeldiniz sayfasını göreceksiniz.

MariaDB

Çalışır durumdaki nginx web yazılımına ek olarak, bir mysql çatallaması olan MariaDB kuracağız. Aşağıdaki komutlar kurulumu yapacak ve programı çalıştıracaktır. Kurulum mysql’i otomatik olarak her açılışta çalışacak şekilde ayarlıyor, bu yüzden ekstra aktifleştirme işlemi yapmıyoruz.

sudo dnf install mariadb-server
sudo systemctl start mariadb

MariaDB kuruldu ve aktif hale geldi. Güvenliği bir kat daha arttırmak için alttaki komutu girin ve soruları cevaplayın. Sizden bir root şifresi (sunucu root şifresi değil) oluşturmanız istenecek. Bu adımda tahmini zor size uygun bir root şifresi oluşturun.

sudo mysql_secure_installation

MariaDB her ne kadar root bağlantısına izin vermiyor olsa da ileride bu şifreye ihtiyacınız olacak. Diğer soruları Evet olarak cevaplayın ve kurulumu tamamlayın.

Şimdi veritabanı bağlantısını kontrol edelim. MariaDB güvenlik nedeniyle direkt root kullanıcı ile bağlantıya izin vermiyor. Bunun yerine sudo yetkilerine sahip kullanıcınız ile bağlanmanız gerekli. Az önce oluşturduğunuz mariadb root şifresini kullanacaksınız.

sudo mysql

Bu komut ile bağlantı isteği yaptığınızda root şifresi sorulacak. Şifrenizi doğru girdiğinizde aşağıdaki ekran gelmelidir.

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.3.17-MariaDB MariaDB Server

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)]> 

exit komutu ile çıkış yapın. Veritabanı yönetimi için phpmyadmin tavsiye ediyorum.

PHP ve PHP-FPM

Kurulum için komut:

sudo dnf install php-fpm php-mysqlnd

Kurulum sonrasında/etc/php-fpm.d/www.confdosyasında bazı değişiklikler yapmamız gerekiyor. www.conf dosyasının hemen başında yer alan apache tanımlamalarını nginx olarak değiştirin. F3 ile kaydedin ve F2 ile çıkış yapın.

sudo nano /etc/php-fpm.d/www.conf
; Unix user/group of processes;
Note: The user is mandatory. If the group is not set, the default user's group; will be used.; RPM: apache user chosen to provide access to the same directories as httpd

user = apache; RPM: Keep a group allowed to write in log dir.
group = apache; RPM: apache user chosen to provide access to the same directories as httpd

apache kelimesi user = nginx ve group = nginx biçiminde değişecek.

Son olarak php-fpm servisini aktif hale getirin ve çalıştırın. Nginx yeniden başlatıldığında LEMP kurulumu tamamlanmış olacaktır.

sudo systemctl enable php-fpm.service
sudo systemctl start php-fpm
sudo systemctl restart nginx

Kontrol

Kurduğumuz php için bir info.php açıp sunucu bilgilerini alacağız. Bu info sayfasında nginx ve mariadb ile ilgili bilgiler de bulunuyor. Bir göz atmanızda fayda var.

nano /var/www/example.com/html/info.php

Dosyaya şu içeriği girin:

<?php
phpinfo();

Şimdi dosyayı /info.php şeklinde tarayıcınızdan açın. Bu info dosyası özel bilgiler içerdiğinden, incelemeniz bittiğinde silmeyi unutmayın.