Her zamanki gibi, işleme sudo yetkisine sahip normal bir kullanıcı ile başlıyoruz ve ufw aktif hale getiriyoruz.

sudo apt update
sudo apt install nginx

Firewall ayarlarından full olanı seçiyoruz. Böylece ssh, http ve https bağlantılarına izin verilmiş olacak.

sudo ufw allow 'Nginx Full'
sudo ufw reload

Nginx kuruldu ve firewall ayarları yapıldı. Sunucu IP adresini tarayıcıdan çağırdığınızda nginx hoşgeldiniz sayfası gelecektir.

Sıra MySQL kurmaya geldi. Alttaki komut tüm kurulumu halledecektir.

sudo apt install mysql-server

Bu adımda mysql için bazı güvenlik ayarlamalarını yapacağımız, kurulumla birlikte gelen scripti çalıştırıyoruz.

sudo mysql_secure_installation

Sizden ilk olarak VALIDATE PASSWORD PLUGIN için onay istenecek. Bu özelliği NO ile devre dışı bırakmanızı öneriyorum ancak her zaman güçlü ve tahmini zor şifreler seçmeye özen göstermelisiniz. İnternette hazır şifre üreticilerden yardım alınabilir.

Kalan sorulara cevap olarak her seferinde Y girin ve entere basın. Bu süreçte anonim kullanıcılar ile test veritabanını kaldırılacak, uzaktan root girişini kapatacak ve yeni kuralları aktif hale getirecektir. Şimdi test edelim.

Programın çıktısı şöyle olacaktır:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 22
Server version: 8.0.19-0ubuntu5 (Ubuntu)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

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

mysql> 

exit komutu ile çıkış yapabilirsiniz.

Dikkat ettiyseniz mysql root şifresi oluşturmadık çünkü mysql yetkilendirme için passwordyerine unix_socket kullanıyor. Bu ilk başta bir güvenlik açığı gibi görünse de aslında sistemi daha güvenli kılıyor. MySQL kurulumu bu kadar. Sırada son paketin son elementi olan PHP var.

sudo apt install php-fpm php-mysql

PHP kurulumu bu kadardı. Sırada nginx’in php ile sorunsuz çalışması için yapacağımız bazı önemli ayarlar var.

Nginx için varsayılan web kök dizini /var/www/html dir ve tek bir web sitesi kullanacaksanız başka ayara gerek yoktur. Biz çoklu site kullanımına göre example.com için ayarımızı yapacağız.

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

Alan adımız için gerekli dizini oluşturduk ve kullanıcımıza erişim haklarını verdik. Şimdi nginx’e sitemizi tanıtmaya sıra geldi.

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

Açılan dosyanın içine aşağıdaki bilgileri girin.

server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/example.com;

    index index.html index.htm index.php;
    
    location / {
        try_files $uri $uri/ =404;
    }
    
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
     }
    
    location ~ /\.ht {
        deny all;
    }

}

Son olarak sembolik bağlantıyı veriyoruz:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Kurulumu tamamladık ancak web kökünde halen dosya yok ve sitemiz boş gözüküyor.

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

dosyasına alttaki içeriği girin

<html>

  <head>
    <title>Hoşgeldiniz</title>
  </head>

  <body>
    <h1>Merhaba Dünya!</h1>

    <p>Example.com için test sayfasıdır</p>

  </body>
</html>

Artık alan adınızı tarayıcıdan açtığınızda karşınıza bu test sayfası gelecektir. Şimdi PHP’nin doğru çalıştığından emin olmak için bize detaylı çıktı veren php test sayfasını oluşturacağız.

echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php

Gerekli bilgileri kontrol ettikten sonra info.php dosyasını silmeyi unutmayın!

Kurulumu tamamladık. Aynı metodu izleyerek, daha fazla siteyi sunucuda host edebilirsiniz.