Takip et

Ubuntu 20.04 Üzerinde LEMP Stack Kurulumu: Nginx, MySQL ve PHP

Ubuntu 20. 04 Üzerinde LEMP Stack Kurulumu: Nginx, MySQL ve PHP Bu makalede, Ubuntu 20.

Ubuntu 20.04 Üzerinde LEMP Stack Kurulumu: Nginx, MySQL ve PHP

Bu makalede, Ubuntu 20.04 LTS (Focal Fossa) işletim sistemi üzerine popüler bir web sunucu yığını olan LEMP’i (Linux, Nginx, MySQL, PHP) nasıl kuracağınızı adım adım öğreneceksiniz. LEMP, dinamik web siteleri ve uygulamaları barındırmak için yaygın olarak kullanılan, yüksek performanslı ve esnek bir çözümdür.

LEMP yığını, aşağıdaki bileşenlerden oluşur:

* L (Linux): İşletim sistemimiz olan Ubuntu 20.04.
* E (Nginx): Yüksek performanslı, ters proxy ve web sunucusu.
* M (MySQL): Popüler bir ilişkisel veritabanı yönetim sistemi.
* P (PHP): Dinamik web içeriği oluşturmak için kullanılan bir betik dili.

Bu kurulumu gerçekleştirmek için temel Linux komut satırı bilgisine sahip olmanız ve root veya sudo ayrıcalıklarına sahip bir kullanıcı ile çalışmanız gerekmektedir.

Adım 1: Sistem Güncelleştirmeleri

Herhangi bir yeni yazılım kurmadan önce, sisteminizin paket listesini ve kurulu paketleri güncellemek her zaman iyi bir uygulamadır. Bu, güvenlik açıklarını kapatmaya ve en son kararlı sürümleri almanızı sağlamaya yardımcı olur.

Terminalinizi açın ve aşağıdaki komutları çalıştırın:

sudo apt update
sudo apt upgrade -y

sudo apt update komutu, mevcut paket kaynaklarınızdan en son paket bilgilerini indirir. sudo apt upgrade -y komutu ise sisteminizdeki tüm güncel paketleri yükseltir. -y bayrağı, yükseltme işlemi sırasında herhangi bir onay istemeden devam etmesini sağlar.

Adım 2: Nginx Kurulumu

Nginx, LEMP yığınının ilk ve en önemli bileşenlerinden biridir. Web sitenizin trafiğini işleyecek ve istemcilere içerik sunacaktır.

Nginx’i kurmak için aşağıdaki komutu kullanın:

sudo apt install nginx -y

Kurulum tamamlandıktan sonra, Nginx hizmetinin çalıştığından emin olmak için aşağıdaki komutu kullanabilirsiniz:

sudo systemctl status nginx

Çıktıda active (running) ibaresini görmelisiniz. Eğer Nginx çalışmıyorsa, başlatmak için sudo systemctl start nginx komutunu kullanabilirsiniz.

Nginx’in doğru kurulduğunu doğrulamak için, web tarayıcınızı açın ve sunucunuzun IP adresini veya alan adını girin. Varsayılan Nginx karşılama sayfasını görmelisiniz. Eğer sunucunuzun IP adresini bilmiyorsanız, ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//' komutunu kullanabilirsiniz (eğer ağ arayüzünüz eth0 ise, farklı bir isim olabilir, ip a komutu ile kontrol edebilirsiniz).

Nginx Güvenlik Duvarı Yapılandırması

Ubuntu’nun varsayılan güvenlik duvarı olan UFW (Uncomplicated Firewall) ile Nginx’i çalıştırmak için gerekli izinleri sağlamanız gerekir.

Öncelikle UFW’nin etkin olup olmadığını kontrol edin:

sudo ufw status

Eğer inactive ise, etkinleştirmek için sudo ufw enable komutunu kullanın.

Nginx için UFW profillerini listeleyin:

sudo ufw app list

Bu komut size Nginx Full, Nginx HTTP ve Nginx HTTPS gibi profilleri gösterecektir.

Şimdilik, sadece HTTP trafiğine izin vereceğiz. Bu, web tarayıcınızın sunucunuza varsayılan port 80 üzerinden bağlanmasını sağlar.

sudo ufw allow 'Nginx HTTP'

Güvenlik duvarı kurallarını yeniden yükleyin ve durumunu kontrol edin:

sudo ufw reload
sudo ufw status

Şimdi Nginx HTTP kuralının etkin olduğunu görmelisiniz.

Adım 3: MySQL Kurulumu

MySQL, web uygulamalarınızın verilerini depolayacağı ilişkisel veritabanı yönetim sistemidir.

MySQL’i kurmak için aşağıdaki komutu kullanın:

sudo apt install mysql-server -y

Kurulum tamamlandıktan sonra, MySQL’in güvenliğini sağlamak için bir güvenlik betiği çalıştırmanız önerilir. Bu betik, varsayılan kullanıcıları kaldırır, uzaktan kök oturum açmayı devre dışı bırakır ve parola gereksinimlerini zorlar.

sudo mysql_secure_installation

Bu betik size birkaç soru soracaktır. Genel olarak aşağıdaki şekilde yanıt verebilirsiniz:

* VALIDATE PASSWORD COMPONENT: Parola politikası seçimi. Varsayılanı (y) seçebilir veya daha katı bir politika için 1 veya 2 seçebilirsiniz.
* New password for root user: MySQL kök kullanıcı için güçlü bir parola belirleyin.
* Remove anonymous users?: y
* Disallow root login remotely?: y
* Remove test database and access to it?: y
* Reload privilege tables now?: y

Bu adımlar, MySQL kurulumunuzu daha güvenli hale getirecektir.

MySQL hizmetinin çalıştığını kontrol etmek için:

sudo systemctl status mysql

Çıktıda active (running) ibaresini görmelisiniz.

MySQL Kök Kullanıcı Erişimi

MySQL kök kullanıcısı olarak oturum açmak için aşağıdaki komutu kullanın:

sudo mysql -u root -p

Yukarıda belirlediğiniz MySQL kök parolasını girmeniz istenecektir. Başarılı bir şekilde giriş yaptıktan sonra, MySQL komut istemcisini göreceksiniz.

mysql>

Buradan veritabanları oluşturabilir, kullanıcılar ekleyebilir ve diğer veritabanı işlemlerini gerçekleştirebilirsiniz. Çıkmak için exit; yazıp Enter’a basın.

Adım 4: PHP Kurulumu

PHP, dinamik web sayfaları oluşturmak için kullanılan bir betik dilidir. LEMP yığınında PHP’yi Nginx ile birlikte çalıştırmak için bazı ek paketlere ihtiyacımız olacak.

PHP’yi ve Nginx ile entegrasyonunu sağlayacak modülü kurmak için aşağıdaki komutu kullanın:

sudo apt install php-fpm php-mysql -y

* php-fpm (FastCGI Process Manager), PHP betiklerini Nginx ile verimli bir şekilde çalıştırmak için kullanılır.
* php-mysql, PHP’nin MySQL veritabanları ile etkileşim kurmasını sağlar.

Kurulumdan sonra, PHP-FPM hizmetinin çalıştığını kontrol edin:

sudo systemctl status php7.4-fpm

Ubuntu 20.04 varsayılan olarak PHP 7.4 ile gelir. Çıktıda active (running) ibaresini görmelisiniz.

Adım 5: Nginx Yapılandırması (PHP İşleme)

Şimdi, Nginx’in PHP dosyalarını doğru şekilde işlemesini sağlayacak şekilde yapılandırmamız gerekiyor. Bunu, Nginx’in sunucu blokları (server blocks) aracılığıyla yapacağız. Sunucu blokları, sanal hostlar gibi düşünülebilir ve farklı alan adları veya dizinler için farklı yapılandırmalar tanımlamanıza olanak tanır.

Varsayılan Nginx yapılandırma dosyasını düzenleyeceğiz. Ancak, en iyi uygulama olarak, mevcut yapılandırmayı yedekleyip yeni bir dosya oluşturmak daha iyidir.

sudo mv /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak

Şimdi, yeni bir varsayılan yapılandırma dosyası oluşturalım:

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

Aşağıdaki içeriği bu dosyaya yapıştırın ve sunucunuzun IP adresini veya alan adını güncelleyin:

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 your_server_ip_or_domain; # Sunucunuzun IP adresini veya alan adını buraya girin

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

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

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

Yapılandırma Açıklaması:

* listen 80 default_server; ve listen [::]:80 default_server;: Bu satırlar, Nginx’in IPv4 ve IPv6 üzerinden port 80’de gelen istekleri dinlemesini sağlar ve bu sunucu bloğunun varsayılan sunucu olacağını belirtir.
* root /var/www/html;: Bu, web sitenizin kök dizinini belirtir. Varsayılan olarak /var/www/html kullanılır.
* index index.php index.html index.htm index.nginx-debian.html;: Bu satır, bir dizin istendiğinde hangi dosyaların indeks olarak aranacağını belirtir. index.php‘nin ilk sırada olması, PHP dosyalarının öncelikli olarak işleneceğini gösterir.
* server_name your_server_ip_or_domain;: Buraya sunucunuzun genel IP adresini veya alan adınızı (örneğin, example.com) girmeniz önemlidir. Eğer bir alan adınız yoksa, sunucunuzun IP adresini kullanabilirsiniz.
* location / { ... }: Bu blok, kök dizine (/) yapılan tüm istekleri işler. try_files direktifi, önce istenen dosyayı, sonra dizini ve en sonunda 404 hatası döndürmeyi dener.
* location ~ \.php$ { ... }: Bu blok, .php uzantılı dosyaları işlemek için kullanılır.
* include snippets/fastcgi-php.conf;: PHP betiklerinin işlenmesi için gerekli FastCGI yapılandırma bilgilerini içerir.
* fastcgi_pass unix:/run/php/php7.4-fpm.sock;: PHP-FPM ile iletişim kurmak için kullanılan Unix soketini belirtir. Bu, PHP-FPM’nin çalıştığı varsayılan konumdur.
* location ~ /\.ht { deny all; }: Bu blok, .htaccess gibi gizli dosyaların doğrudan erişime kapatılmasını sağlar.

Dosyayı kaydedip kapatmak için Ctrl + X, ardından Y ve Enter tuşlarına basın.

Şimdi, Nginx yapılandırmasını test edin:

sudo nginx -t

Herhangi bir hata yoksa, syntax is ok ve test is successful gibi bir çıktı görmelisiniz.

Nginx yapılandırmasını yeniden yükleyin:

sudo systemctl reload nginx

Adım 6: PHP Test Sayfası Oluşturma

Nginx’in PHP’yi doğru şekilde işleyip işlemediğini doğrulamak için basit bir PHP bilgi sayfası oluşturalım.

/var/www/html dizininde info.php adında bir dosya oluşturun:

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

Aşağıdaki içeriği dosyaya yapıştırın:

Dosyayı kaydedip kapatın.

Şimdi, web tarayıcınızı açın ve sunucunuzun IP adresini veya alan adını takip eden /info.php yolunu girin. Örneğin: http://your_server_ip_or_domain/info.php

Eğer her şey doğru yapılandırıldıysa, PHP’nin sürümü, yapılandırma ayarları ve kurulu modüller hakkında ayrıntılı bilgilerin yer aldığı bir sayfa görmelisiniz. Bu sayfa, PHP’nin Nginx tarafından başarıyla işlendiğini gösterir.

Güvenlik Notu: Üretim ortamlarında info.php dosyasını silmeniz veya erişimini kısıtlamanız şiddetle tavsiye edilir. Bu dosya, sunucunuzun hassas bilgilerini ortaya çıkarabilir.

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

Adım 7: Veritabanı Oluşturma ve Kullanıcı Ekleme (İsteğe Bağlı ama Önerilir)

Genellikle web uygulamalarınız için ayrı bir veritabanı ve kullanıcı oluşturmak iyi bir uygulamadır. Bu, kök kullanıcı bilgilerini doğrudan kullanmaktan daha güvenlidir.

MySQL istemcisine kök kullanıcı olarak giriş yapın:

sudo mysql -u root -p

Aşağıdaki komutları çalıştırarak yeni bir veritabanı ve kullanıcı oluşturabilirsiniz. your_database_name, your_username ve your_password kısımlarını kendi tercihlerinizle değiştirin:

CREATE DATABASE your_database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'your_username'@'localhost' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON your_database_name.* TO 'your_username'@'localhost';
FLUSH PRIVILEGES;
EXIT;

* CREATE DATABASE your_database_name ...: Yeni bir veritabanı oluşturur. utf8mb4 karakter seti, geniş bir karakter yelpazesini desteklemek için önerilir.
* CREATE USER 'your_username'@'localhost' IDENTIFIED BY 'your_password';: Belirli bir kullanıcı adı ve parola ile yeni bir veritabanı kullanıcısı oluşturur. 'localhost' ifadesi, bu kullanıcının yalnızca sunucudan bağlanabileceğini belirtir.
GRANT ALL PRIVILEGES ON your_database_name. TO 'your_username'@'localhost';: Oluşturulan kullanıcıya, belirtilen veritabanındaki tüm ayrıcalıkları verir.
* FLUSH PRIVILEGES;: Yetkilendirme tablolarını yeniden yükler, böylece yeni değişiklikler hemen geçerli olur.

Bu adımları tamamladıktan sonra, web uygulamanızın veritabanı bağlantı ayarlarında bu yeni bilgileri kullanabilirsiniz.

Sonuç

Tebrikler! Ubuntu 20.04 üzerinde Nginx, MySQL ve PHP’den oluşan LEMP yığınını başarıyla kurdunuz. Artık dinamik web siteleri ve uygulamaları barındırmaya hazırsınız.

Bu kurulum, LEMP yığınının temelini oluşturur. İhtiyaçlarınıza göre ek PHP modülleri kurabilir, Nginx’i daha karmaşık senaryolar için yapılandırabilir ve MySQL’i optimize edebilirsiniz. Güvenlik duvarı yapılandırmasını gözden geçirmek ve sunucunuzu düzenli olarak güncellemek, sunucunuzun güvenliğini sağlamak için kritik öneme sahiptir.

Umarım bu kapsamlı rehber, LEMP yığınını kurma sürecini sizin için anlaşılır hale getirmiştir.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.