Takip et

Arch Linux Üzerinde LEMP (Nginx, MySQL, PHP) Stack Kurulumu

Arch Linux Üzerinde LEMP (Nginx, MySQL, PHP) Stack Kurulumu Bu rehber, Arch Linux üzerinde dinamik web uygulamaları çalıştırmak için gerekl

Arch Linux Üzerinde LEMP (Nginx, MySQL, PHP) Stack Kurulumu

Bu rehber, Arch Linux üzerinde dinamik web uygulamaları çalıştırmak için gerekli olan LEMP (Linux, Nginx, MySQL, PHP) stack’ini adım adım nasıl kuracağınızı ve yapılandıracağınızı anlatmaktadır. Arch Linux’un minimalist ve “kendin yap” felsefesi, bu stack’i kurarken size tam kontrol sağlar. LEMP, yüksek performanslı web sunucuları için popüler bir seçimdir, özellikle Nginx’in statik içerik sunma ve eşzamanlı bağlantıları yönetme yeteneği sayesinde.

1. Sistem Güncellemesi ve Temel Önkoşullar

Kuruluma başlamadan önce sisteminizi güncel tutmak her zaman iyi bir uygulamadır. Bu, potansiyel paket çakışmalarını önler ve en son güvenlik yamalarına sahip olmanızı sağlar. Ayrıca, kurulum komutlarını çalıştırmak için sudo yetkilerine sahip olmanız gerekmektedir.

1.1. Sistem Güncellemesi

sudo pacman -Syu

Bu komut, sisteminizdeki tüm paketleri günceller.

1.2. Gerekli Temel Araçlar (Opsiyonel ama Önerilir)

Bazı temel araçlar, yapılandırma dosyalarını düzenlerken veya sistemle etkileşim kurarken işinize yarayabilir.

sudo pacman -S nano git

nano basit bir metin düzenleyicidir, git ise versiyon kontrolü için kullanılır.

2. Nginx Web Sunucusu Kurulumu ve Yapılandırması

Nginx (Engine-x olarak okunur), yüksek performanslı, hafif bir web sunucusudur ve ters proxy, yük dengeleyici ve HTTP önbelleği olarak da kullanılabilir. LEMP stack’inin “E” bileşenidir.

2.1. Nginx Kurulumu

Nginx paketini Arch Linux’un resmi depolarından kurun:

sudo pacman -S nginx

2.2. Nginx Servisini Başlatma ve Etkinleştirme

Kurulumdan sonra Nginx servisini başlatın ve sistem başlangıcında otomatik olarak başlaması için etkinleştirin:

sudo systemctl start nginx
sudo systemctl enable nginx

Nginx’in çalışıp çalışmadığını kontrol etmek için tarayıcınızdan sunucunuzun IP adresine veya localhost‘a gidin. Varsayılan “Welcome to Nginx!” sayfasını görmeniz gerekir. Servisin durumunu kontrol etmek için:

sudo systemctl status nginx

2.3. Nginx Temel Yapılandırması

Nginx’in ana yapılandırma dosyası /etc/nginx/nginx.conf adresinde bulunur. Ayrıca, sanal host’larınızı veya site yapılandırmalarınızı /etc/nginx/sites-available/ dizinine koyup /etc/nginx/sites-enabled/ dizinine sembolik bağlantılar oluşturmak iyi bir uygulamadır. Ancak bu rehberde, basitlik adına /etc/nginx/nginx.conf dosyasını düzenleyeceğiz.

/etc/nginx/nginx.conf dosyasını bir metin düzenleyici ile açın:

sudo nano /etc/nginx/nginx.conf

http bloğunun içinde, server bloğunu bulun veya aşağıdaki gibi bir yapılandırma ekleyin. Özellikle root dizinini ve index dosyalarını kontrol edin. PHP entegrasyonu için location ~ \.php$ bloğunu daha sonra ekleyeceğiz.

server {
    listen 80;
    server_name localhost; # Kendi domain adınız veya IP adresiniz

    root /usr/share/nginx/html; # Web dosyalarınızın bulunduğu dizin
    index index.html index.htm index.php; # Varsayılan açılış dosyaları

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

    # Hata sayfaları (opsiyonel)
    error_page 404 /404.html;
    location = /404.html {
        internal;
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        internal;
    }

    # PHP entegrasyonu buraya gelecek
}

Yapılandırmayı kaydettikten sonra, Nginx yapılandırmasının sözdizimini kontrol edin ve servisi yeniden başlatın:

sudo nginx -t
sudo systemctl reload nginx

3. MySQL/MariaDB Veritabanı Kurulumu ve Güvenliği

MySQL, açık kaynaklı bir ilişkisel veritabanı yönetim sistemidir. Arch Linux’ta genellikle MariaDB, MySQL’in topluluk tarafından geliştirilen bir çatalı olarak tercih edilir ve tamamen uyumludur. Bu rehberde MariaDB’yi kullanacağız.

3.1. MariaDB Kurulumu

sudo pacman -S mariadb

3.2. MariaDB Veri Dizinini Başlatma

Kurulumdan sonra, MariaDB’nin veri dizinini başlatmanız gerekir:

sudo mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql

3.3. MariaDB Servisini Başlatma ve Etkinleştirme

sudo systemctl start mariadb
sudo systemctl enable mariadb

Servisin durumunu kontrol edin:

sudo systemctl status mariadb

3.4. MariaDB Güvenlik Yapılandırması

MariaDB kurulumunuzu güvence altına almak için mysql_secure_installation betiğini çalıştırmanız şiddetle tavsiye edilir. Bu betik, root parolası ayarlamanıza, anonim kullanıcıları kaldırmanıza, uzaktan root girişini devre dışı bırakmanıza ve test veritabanını kaldırmanıza olanak tanır.

sudo mysql_secure_installation

Sorulduğunda aşağıdaki adımları izleyin:

  • Mevcut root parolası: Yeni bir kurulum olduğu için boş bırakıp Enter’a basın.
  • Root parolası ayarla: ‘Y’ (Evet) yazıp güçlü bir parola belirleyin.
  • Anonim kullanıcıları kaldır: ‘Y’
  • Root’un uzaktan giriş yapmasına izin verme: ‘Y’
  • Test veritabanını ve ona erişimi kaldır: ‘Y’
  • Ayrıcalık tablolarını şimdi yeniden yükle: ‘Y’

3.5. Test Veritabanı ve Kullanıcı Oluşturma (Opsiyonel)

Veritabanı bağlantısını test etmek için yeni bir veritabanı ve kullanıcı oluşturabilirsiniz:

sudo mysql -u root -p

Az önce ayarladığınız root parolasını girin. MySQL komut isteminde şunları girin:

CREATE DATABASE mydatabase;
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'your_strong_password';
GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

mydatabase, myuser ve your_strong_password değerlerini kendi tercihinize göre değiştirin.

4. PHP ve PHP-FPM Kurulumu ve Nginx ile Entegrasyonu

PHP, web geliştirme için yaygın olarak kullanılan bir betik dilidir. Nginx, PHP kodunu doğrudan çalıştıramaz; bunun yerine PHP-FPM (FastCGI Process Manager) aracılığıyla PHP isteklerini işler.

4.1. PHP ve PHP-FPM Kurulumu

PHP ve PHP-FPM ile birlikte Nginx ile etkileşim kurmak için gerekli olan php-fpm ve php-nginx (veya php-cgi) paketlerini kurun. Ayrıca MySQL ile etkileşim için php-mysql paketini de ekleyelim:

sudo pacman -S php php-fpm php-nginx php-mysql

İhtiyaç duyabileceğiniz diğer yaygın PHP uzantıları şunlardır: php-gd (görüntü işleme), php-intl (uluslararasılaşma), php-curl (HTTP istekleri).

4.2. PHP-FPM Servisini Başlatma ve Etkinleştirme

sudo systemctl start php-fpm
sudo systemctl enable php-fpm

Servisin durumunu kontrol edin:

sudo systemctl status php-fpm

4.3. PHP-FPM Yapılandırması

PHP-FPM’nin ana yapılandırma dosyası /etc/php/php-fpm.conf‘tur. Ancak, havuz yapılandırmaları genellikle /etc/php/php-fpm.d/www.conf dosyasında yapılır. Bu dosyayı açın:

sudo nano /etc/php/php-fpm.d/www.conf

Aşağıdaki satırları kontrol edin ve gerekirse düzenleyin:

  • user = http ve group = http: Nginx’in çalıştığı kullanıcı ve grupla eşleşmelidir. Arch’ta Nginx genellikle http kullanıcısı altında çalışır.
  • listen = /run/php-fpm/php-fpm.sock: Nginx’in PHP-FPM ile iletişim kuracağı Unix soketinin yoludur. Bu yolu Nginx yapılandırmasında kullanacağız.

Değişiklik yaptıysanız PHP-FPM servisini yeniden başlatın:

sudo systemctl reload php-fpm

4.4. Nginx ile PHP Entegrasyonu

Şimdi Nginx’in PHP isteklerini PHP-FPM’ye nasıl ileteceğini yapılandırmamız gerekiyor. /etc/nginx/nginx.conf dosyasını tekrar açın:

sudo nano /etc/nginx/nginx.conf

Daha önce oluşturduğunuz server bloğunun içine aşağıdaki location ~ \.php$ bloğunu ekleyin. Bu blok, URL’de .php ile biten tüm istekleri PHP-FPM’ye yönlendirecektir.

server {
    listen 80;
    server_name localhost;

    root /usr/share/nginx/html;
    index index.html index.htm index.php;

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

    # PHP dosyalarını FastCGI ile işlemek için
    location ~ \.php$ {
        root           /usr/share/nginx/html; # Kök dizini Nginx root ile aynı olmalı
        fastcgi_pass   unix:/run/php-fpm/php-fpm.sock; # PHP-FPM soket yolu
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi.conf; # FastCGI parametrelerini içerir
    }

    # Diğer hata sayfaları ve ayarlar...
}

Yapılandırmayı kaydedin, Nginx sözdizimini kontrol edin ve servisi yeniden yükleyin:

sudo nginx -t
sudo systemctl reload nginx

4.5. PHP Kurulumunu Test Etme

Web kök dizininize (/usr/share/nginx/html/) bir test dosyası oluşturun:

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

Dosyanın içine aşağıdaki içeriği ekleyin:

Tarayıcınızda http://localhost/info.php adresine gidin. PHP yapılandırma bilgilerini içeren bir sayfa görmeniz gerekir. Bu sayfa, Nginx’in PHP-FPM ile başarıyla iletişim kurduğunu gösterir. Testi bitirdikten sonra güvenlik nedeniyle bu dosyayı silmeyi unutmayın.

sudo rm /usr/share/nginx/html/info.php

5. Ekstra İpuçları ve Güvenlik Önerileri

5.1. Güvenlik Duvarı (Firewall) Yapılandırması

Sunucunuzu güvende tutmak için bir güvenlik duvarı kullanmak önemlidir. Arch Linux’ta ufw (Uncomplicated Firewall) veya iptables/nftables kullanabilirsiniz. ufw daha kolay bir arayüze sahiptir.

sudo pacman -S ufw
sudo systemctl enable ufw
sudo ufw allow 80/tcp  # HTTP
sudo ufw allow 443/tcp # HTTPS (eğer kullanacaksanız)
sudo ufw allow 22/tcp  # SSH (eğer uzaktan erişiyorsanız)
sudo ufw enable

Güvenlik duvarını etkinleştirmeden önce SSH bağlantınızın açık olduğundan emin olun, aksi takdirde bağlantınız kesilebilir.

5.2. Dizin İzinleri

Web kök dizininizin (/usr/share/nginx/html/) ve içindeki dosyaların doğru izinlere sahip olması önemlidir. Nginx’in çalıştığı kullanıcı (genellikle http) bu dosyalara okuma erişimine sahip olmalıdır. PHP’nin dosya yazması gereken durumlar için (örneğin, yüklemeler veya önbellek), bu dizinlere yazma izni de verilmelidir. Ancak, tüm web kök dizinine yazma izni vermek güvenlik riski oluşturabilir. Sadece belirli alt dizinlere yazma izni verin.

sudo chown -R http:http /usr/share/nginx/html/
sudo chmod -R 755 /usr/share/nginx/html/

Eğer PHP’nin belirli bir dizine yazması gerekiyorsa:

sudo chown -R http:http /usr/share/nginx/html/uploads # Örnek: yüklemeler dizini
sudo chmod -R 775 /usr/share/nginx/html/uploads

5.3. HTTPS (SSL/TLS) Kurulumu

Üretim ortamlarında web sitenizi HTTPS ile güvence altına almak için Let’s Encrypt gibi ücretsiz bir sertifika yetkilisi kullanmanız önerilir. Bu, web trafiğinizi şifreler ve sitenizin güvenilirliğini artırır. Certbot aracı bu süreci büyük ölçüde otomatikleştirir.

Sonuç ve Sıkça Sorulan Sorular (SSS)

Bu rehberde, Arch Linux üzerinde Nginx, MariaDB ve PHP-FPM’den oluşan bir LEMP stack’ini başarıyla kurdunuz ve yapılandırdınız. Artık dinamik web uygulamalarınızı bu sağlam temel üzerinde barındırmaya hazırsınız. Arch Linux’un doğası gereği, sisteminizi düzenli olarak güncellemek ve paket değişikliklerini takip etmek önemlidir.

Sıkça Sorulan Sorular (SSS)

LEMP stack’i neden Apache yerine Nginx kullanır?
Nginx, özellikle yüksek eşzamanlı bağlantılar ve statik içerik sunumu konusunda Apache’ye göre genellikle daha iyi performans gösterir. Olay tabanlı mimarisi sayesinde daha az sistem kaynağı tüketir.
/usr/share/nginx/html/ yerine kendi web dizinimi kullanabilir miyim?
Evet, kesinlikle. Nginx yapılandırma dosyasındaki root direktifini istediğiniz dizine (örneğin, /srv/http/mywebsite veya /var/www/html) değiştirebilirsiniz. Ancak, bu dizine Nginx kullanıcısının (genellikle http) okuma erişimi olduğundan emin olun.
PHP uzantılarını nasıl kurarım?
sudo pacman -S php- komutunu kullanarak ihtiyacınız olan PHP uzantılarını kurabilirsiniz (örneğin, php-gd, php-intl, php-curl). Kurulumdan sonra PHP-FPM servisini yeniden başlatmayı unutmayın: sudo systemctl reload php-fpm.
Nginx yapılandırmamda hata alırsam ne yapmalıyım?
Öncelikle sudo nginx -t komutunu çalıştırarak yapılandırma dosyasındaki sözdizimi hatalarını kontrol edin. Hata mesajlarını dikkatlice okuyun. Ayrıca, sudo systemctl status nginx ve sudo journalctl -xeu nginx komutları Nginx servisiyle ilgili daha fazla bilgi sağlayabilir.
MariaDB root parolasını unuttum, nasıl sıfırlayabilirim?
MariaDB servisini durdurun, ardından güvenlik atlama moduyla başlatın: sudo systemctl stop mariadb, sonra sudo mysqld_safe --skip-grant-tables &. Daha sonra sudo mysql -u root ile parolası olmadan giriş yapabilir ve parolayı değiştirebilirsiniz: UPDATE mysql.user SET authentication_string=PASSWORD('NEW_PASSWORD') WHERE User='root'; FLUSH PRIVILEGES;. Son olarak, MariaDB’yi normal şekilde yeniden başlatın.

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.