Takip et

Laravel Nginx Ubuntu Kurulumu Neden Önemli? LEMP Stack’in Temelleri Nelerdir?

Laravel Nginx Ubuntu Kurulumu: Kapsamlı LEMP Rehberi

Web uygulamalarınızın hızlı, güvenli ve ölçeklenebilir olmasını mı istiyorsunuz? Laravel projelerinizi Ubuntu sunucular üzerinde Nginx ile yayına almak, bu hedeflere ulaşmanın en etkili yollarından biridir. Bu rehber, Laravel uygulamalarınızı LEMP (Linux, Nginx, MySQL/MariaDB, PHP-FPM) yığını ile Ubuntu üzerine nasıl kuracağınızı ve yapılandıracağınızı adım adım açıklıyor.

Laravel Nginx Ubuntu Kurulumu Neden Önemli? LEMP Stack’in Temelleri Nelerdir?

Günümüzün rekabetçi dijital dünyasında, web uygulamalarının performansı ve güvenliği kritik öneme sahiptir. Kullanıcılar, yavaş yüklenen veya güvenlik açıkları barındıran sitelerde kalmak istemezler. İşte tam da bu noktada, Laravel gibi modern bir PHP çatısını Nginx gibi yüksek performanslı bir web sunucusuyla birleştirmek, Ubuntu gibi stabil bir işletim sistemi üzerinde, verimli bir LEMP yığını oluşturmanın temelini atar.

Peki, LEMP Stack nedir ve neden bu kadar popülerdir? LEMP, Linux işletim sistemi, Engine-X (Nginx) web sunucusu, MySQL veya MariaDB veritabanı ve PHP-FPM (FastCGI Process Manager) bileşenlerinden oluşan bir yazılım yığınıdır. Bu bileşenlerin her biri, web uygulamalarının sorunsuz çalışması için vazgeçilmezdir. Linux, sunucuya sağlam bir temel sağlarken, Nginx yüksek eşzamanlı bağlantıları ve statik dosya sunumunu inanılmaz bir hızla yönetir. MySQL veya MariaDB, uygulamanızın verilerini depolarken, PHP-FPM ise PHP kodunuzun Nginx ile etkili bir şekilde iletişim kurmasını sağlar. Bu kombinasyon, özellikle yüksek trafikli web siteleri ve API’ler için idealdir, çünkü kaynak tüketimini minimize ederken maksimum performans sunar.

Laravel, PHP ekosistemindeki en popüler framework’lerden biridir. Geliştirici dostu yapısı, zengin özellik setleri ve güçlü topluluk desteği sayesinde, modern web uygulamaları geliştirmek için tercih edilen bir araç haline gelmiştir. Laravel’in mimarisi, Nginx’in asenkron ve olay tabanlı yapısıyla mükemmel bir uyum içindedir. Nginx, Apache gibi geleneksel web sunucularına kıyasla daha az kaynak tüketir ve daha fazla bağlantıyı aynı anda işleyebilir. Bu, özellikle bir e-ticaret sitesi gibi anlık yüksek trafik dalgalanmaları yaşayan uygulamalar için hayati bir avantajdır. Örneğin, büyük bir indirim kampanyası sırasında sitenize binlerce kullanıcı aynı anda erişmek istediğinde, Nginx bu talepleri verimli bir şekilde yöneterek sitenizin çökmesini engeller.

Ubuntu ise, sunucu tarafında en yaygın kullanılan Linux dağıtımlarından biridir. Geniş paket depoları, güçlü güvenlik özellikleri ve büyük bir topluluk desteği sayesinde, LEMP stack kurulumu için ideal bir platform sunar. Bu kombinasyon, sadece uygulamanızın performansını artırmakla kalmaz, aynı zamanda geliştirme ve dağıtım süreçlerinizi de basitleştirir. Güvenlik açısından da, Nginx’in modüler yapısı ve Ubuntu’nun düzenli güvenlik güncellemeleri, uygulamanızı dış tehditlere karşı daha dirençli hale getirir. Sonuç olarak, Laravel projelerinizi Nginx ve Ubuntu üzerinde yapılandırmak, uzun vadede size hem zaman hem de kaynak tasarrufu sağlayacak stratejik bir karardır.

Ön Hazırlıklar: Ubuntu Sunucunuzu Kuruluma Nasıl Hazırlarsınız?

Laravel uygulamanızı LEMP yığını ile Ubuntu sunucusuna kurmadan önce, sunucunuzu doğru şekilde hazırlamanız gerekmektedir. Bu adım, tüm kurulum sürecinin temelini oluşturur ve ileride karşılaşabileceğiniz potansiyel sorunları minimize eder. İlk olarak, bir Ubuntu sunucusuna (tercihen LTS sürümü) sahip olduğunuzu ve SSH erişim bilgilerinizin elinizde olduğunu varsayıyoruz. Çoğu bulut sağlayıcısı (AWS, DigitalOcean, Linode, Vultr vb.) bu tür sunucuları kolayca sağlamaktadır.

Sunucunuza ilk erişiminizi SSH üzerinden gerçekleştirin. Bunun için terminalinizi açın ve aşağıdaki komutu kullanın:


ssh kullanici_adiniz@sunucu_ip_adresiniz

Örneğin, root@192.168.1.100 gibi bir komutla bağlanabilirsiniz. İlk bağlantınızda parolanızı girmeniz istenecektir. Bağlantı kurulduktan sonra, sistem paketlerini güncellemek ve yükseltmek kritik öneme sahiptir. Bu işlem, mevcut tüm paketlerin en son sürümlerine sahip olmanızı sağlar ve güvenlik açıklarını kapatır:


sudo apt update
sudo apt upgrade -y

Bu komutlar, paket listelerinizi yeniler ve yüklü paketlerinizi yükseltir. -y parametresi, tüm onay sorularına otomatik olarak “evet” yanıtı vermenizi sağlar. Ardından, sunucunuzun temel güvenliğini sağlamak için bir güvenlik duvarı yapılandırmanız önerilir. Ubuntu’da varsayılan olarak UFW (Uncomplicated Firewall) bulunur. UFW’yi etkinleştirmeden önce, SSH bağlantınızın kesilmemesi için SSH portuna izin vermelisiniz (varsayılan 22):


sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status

Bu adımlar, SSH bağlantınızın güvenliğini sağlarken, aynı zamanda sunucunuza yetkisiz erişimi engeller. Daha sonra Nginx ve PHP-FPM için de gerekli portlara (80 ve 443) izin vereceğiz. Güvenlik açısından bir diğer önemli adım, root kullanıcısı yerine sudo yetkilerine sahip yeni bir kullanıcı oluşturmaktır. Root kullanıcısı ile sürekli çalışmak riskli olabilir. Yeni bir kullanıcı oluşturmak ve ona sudo yetkileri vermek için aşağıdaki komutları kullanın:


sudo adduser yeni_kullanici_adiniz
sudo usermod -aG sudo yeni_kullanici_adiniz

Yeni kullanıcı oluşturulduktan sonra, mevcut SSH oturumunuzu kapatıp yeni kullanıcı ile tekrar giriş yapmanız önerilir. Bu, root yetkilerini gerektirmeyen işlemleri daha güvenli bir şekilde gerçekleştirmenizi sağlar. Sunucunuzun zaman dilimini ayarlamak da önemlidir, özellikle log kayıtları ve cron işleri için tutarlılık sağlar:


sudo timedatectl set-timezone Europe/Istanbul

Bu ön hazırlıklar, sunucunuzun stabil, güvenli ve Laravel uygulamanızı barındırmaya hazır olmasını sağlar. Güvenlik duvarı kuralları, güncel paketler ve doğru kullanıcı yönetimi, başarılı bir dağıtımın temel taşlarıdır. Unutmayın, iyi bir başlangıç, sorunsuz bir süreç demektir. Bu adımları titizlikle takip ederek, LEMP stack kurulumunuz için sağlam bir zemin oluşturmuş olacaksınız. Örneğin, bir önceki projemizde, güvenlik duvarını doğru yapılandırmadığımız için dışarıdan gelen gereksiz port taramalarıyla karşılaşmıştık. UFW’yi baştan doğru kurmak, bu tür gereksiz yükleri engellemenin en basit yoludur.

Uzman İpucu: SSH bağlantınız için anahtar tabanlı kimlik doğrulamayı kullanmak, parola tabanlı kimlik doğrulamadan çok daha güvenlidir. Bu, sunucuya erişiminizi artırırken, brute-force saldırılarına karşı koruma sağlar.

LEMP Stack Kurulumu: Nginx, MySQL ve PHP-FPM Nasıl Kurulur?

Artık sunucumuz hazır olduğuna göre, LEMP yığınının temel bileşenlerini kurmaya başlayabiliriz. Bu bölümde Nginx, MySQL (veya MariaDB) ve PHP-FPM’in kurulum adımlarını ve temel yapılandırmalarını ele alacağız.

Nginx Kurulumu ve Temel Yapılandırma

Nginx, yüksek performanslı bir web sunucusudur ve statik içerik sunumu ile eşzamanlı bağlantı yönetiminde oldukça başarılıdır. Kurulumu oldukça basittir:


sudo apt install nginx -y

Kurulum tamamlandıktan sonra, Nginx servisinin çalıştığını doğrulamak için aşağıdaki komutu kullanabilirsiniz:


sudo systemctl status nginx

Çıktıda “active (running)” ifadesini görmelisiniz. Ardından, UFW güvenlik duvarında Nginx’e izin vermemiz gerekiyor:


sudo ufw allow 'Nginx HTTP'
sudo ufw allow 'Nginx HTTPS' # Eğer SSL kullanacaksanız
sudo ufw reload
sudo ufw status

Şimdi sunucunuzun IP adresini web tarayıcınızda ziyaret ettiğinizde, Nginx’in varsayılan “Welcome to Nginx!” sayfasını görmelisiniz. Bu, Nginx’in doğru şekilde çalıştığını gösterir.

MySQL/MariaDB Kurulumu ve Güvenlik Yapılandırması

Laravel uygulamalarınızın verilerini depolamak için bir veritabanı sunucusuna ihtiyacımız var. MySQL veya MariaDB’yi tercih edebilirsiniz. MariaDB, MySQL’in açık kaynaklı bir çatalıdır ve genellikle daha iyi performans ve ek özellikler sunar. Kurulum adımları benzerdir:


sudo apt install mariadb-server -y

Kurulum tamamlandıktan sonra, veritabanı sunucunuzun güvenliğini sağlamak için bir komut dosyası çalıştırmanız şiddetle tavsiye edilir:


sudo mysql_secure_installation

Bu komut, root parolasını 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. Tüm sorulara “Y” (Evet) yanıtı vermeniz genellikle en güvenli seçenektir. Bu adımlar, veritabanı sunucunuzu olası saldırılara karşı önemli ölçüde korur.

PHP-FPM Kurulumu ve Yapılandırması

Laravel, PHP ile yazıldığı için, PHP’nin sunucumuzda çalışır durumda olması gerekir. Nginx, PHP kodunu doğrudan işleyemez; bunun yerine PHP-FPM (FastCGI Process Manager) aracılığıyla PHP’yi çalıştırır. Laravel için genellikle PHP 8.x sürümü önerilir. Kurulum için:


sudo apt install php8.2-fpm php8.2-mysql php8.2-mbstring php8.2-xml php8.2-bcmath php8.2-zip php8.2-gd php8.2-curl -y

Bu komut, PHP-FPM’i ve Laravel için gerekli olan yaygın PHP uzantılarını kurar. Kurulumdan sonra PHP-FPM servisinin çalıştığını kontrol edin:


sudo systemctl status php8.2-fpm

Gerekirse, PHP-FPM yapılandırma dosyasını (örneğin /etc/php/8.2/fpm/php.ini) düzenleyerek upload_max_filesize, post_max_size ve memory_limit gibi değerleri uygulamanızın ihtiyaçlarına göre ayarlayabilirsiniz. Değişikliklerden sonra PHP-FPM’i yeniden başlatmayı unutmayın:


sudo systemctl restart php8.2-fpm

Composer Kurulumu

Composer, PHP bağımlılık yöneticisidir ve Laravel projeleri için olmazsa olmazdır. Kurulum için:


curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

Bu komutlar Composer’ı indirir ve sistem genelinde erişilebilir hale getirir. Composer’ın doğru kurulduğunu composer -V komutu ile doğrulayabilirsiniz. Bu adımları tamamladıktan sonra, LEMP yığınınız Laravel uygulamanızı barındırmaya hazır hale gelmiş olacaktır. Bu temel bileşenlerin doğru şekilde kurulması ve yapılandırılması, uygulamanızın performansı ve güvenliği için kritik öneme sahiptir. Örneğin, bir önceki projede PHP-FPM’in yanlış yapılandırılması, Laravel uygulamasının 502 Bad Gateway hatası vermesine neden olmuştu. Bu nedenle, her bir bileşenin durumunu kontrol etmek ve doğru çalıştığından emin olmak hayati önem taşır.

Laravel Uygulamasını Sunucuya Yükleme ve Gerekli İzinleri Ayarlama

LEMP yığını başarıyla kurulduktan sonra, sıra Laravel uygulamanızı sunucuya yüklemeye ve doğru dosya izinlerini ayarlamaya gelir. Bu adım, uygulamanızın Nginx ve PHP-FPM tarafından okunabilir ve yazılabilir olmasını sağlar.

Laravel Uygulamasını Sunucuya Yükleme

Uygulamanızı sunucuya yüklemenin en yaygın ve önerilen yolu Git kullanmaktır. Bu, hem versiyon kontrolünü sağlar hem de güncellemeleri kolaylaştırır. Öncelikle, uygulamanızı yerleştireceğiniz bir dizin oluşturun. Genellikle /var/www/ dizini tercih edilir:


sudo mkdir -p /var/www/your_laravel_app
sudo chown -R $USER:$USER /var/www/your_laravel_app # Geçici olarak kendi kullanıcınıza izin verin
cd /var/www/your_laravel_app

Şimdi Laravel projenizi GitHub, GitLab veya Bitbucket gibi bir depodan klonlayın. Eğer projeniz özel (private) ise, SSH anahtarı ile kimlik doğrulamayı yapılandırmanız gerekebilir. Genel bir örnek:


git clone https://github.com/your-username/your-laravel-app.git .

. (nokta) işareti, projeyi mevcut dizine klonlar. Klonlama işlemi tamamlandıktan sonra, projenizin bağımlılıklarını Composer aracılığıyla yüklemeniz gerekir:


composer install --no-dev --optimize-autoloader

--no-dev parametresi, sadece üretim ortamında gerekli olan bağımlılıkları yüklerken, --optimize-autoloader ise Composer’ın otomatik yükleme haritasını optimize ederek performansı artırır. Bu işlem biraz zaman alabilir.

.env Dosyasını Yapılandırma

Laravel uygulamaları, çevre değişkenlerini yönetmek için .env dosyasını kullanır. Bu dosya, veritabanı bağlantı bilgileri, uygulama anahtarı, e-posta ayarları gibi hassas bilgileri içerir. Önce örnek dosyayı kopyalayın:


cp .env.example .env

Ardından, .env dosyasını bir metin düzenleyici ile açın (örneğin nano .env) ve aşağıdaki gibi gerekli düzenlemeleri yapın:


APP_NAME=YourLaravelApp
APP_ENV=production
APP_KEY= # Buraya uygulama anahtarınızı ekleyeceğiz
APP_DEBUG=false
APP_URL=http://yourdomain.com

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=your_database_name
DB_USERNAME=your_database_user
DB_PASSWORD=your_database_password

APP_KEY değerini oluşturmak için aşağıdaki komutu çalıştırın:


php artisan key:generate

Bu komut, .env dosyanıza benzersiz bir uygulama anahtarı ekleyecektir. Bu anahtar, oturumlar ve şifreleme için kullanılır ve kesinlikle gizli tutulmalıdır.

Depolama ve Önbellek Klasörlerine Yazma İzinleri

Laravel, storage ve bootstrap/cache dizinlerine yazma iznine ihtiyaç duyar. Bu dizinlere doğru izinleri vermemek, uygulamanızın hatalar vermesine neden olur. Bu izinleri, Nginx’in ve PHP-FPM’in çalıştığı kullanıcıya (genellikle www-data) vermemiz gerekir:


sudo chown -R www-data:www-data /var/www/your_laravel_app
sudo chmod -R 775 /var/www/your_laravel_app/storage
sudo chmod -R 775 /var/www/your_laravel_app/bootstrap/cache

Bu komutlar, projenizin tüm sahipliğini www-data kullanıcısına ve grubuna atar. Ardından, storage ve bootstrap/cache dizinlerine grup ve diğer kullanıcılar için yazma ve yürütme izinleri verir. Eğer uygulamanızın public dizinindeki dosyalar da www-data tarafından değiştirilecekse, benzer şekilde izinleri düzenlemeniz gerekebilir. Ancak genellikle public dizini sadece okunabilir olmalıdır. Bu adımlar, Laravel uygulamanızın sunucuda düzgün bir şekilde çalışması için temel gereksinimlerdir. Yanlış izinler, uygulamanızın hata vermesine veya hiç çalışmamasına neden olabilir. Örneğin, bir önceki dağıtımda storage klasörüne yazma izni verilmediği için, kullanıcıların yüklediği resimler kaydedilememiş ve bu da kritik bir işlevsellik hatasına yol açmıştı. Bu nedenle, izinleri doğru ayarlamak kritik öneme sahiptir.

Uzman İpucu: Güvenlik için, .env dosyanızı Git deposuna eklemeyin. Bunun yerine, .gitignore dosyasına ekleyerek hassas bilgilerin yanlışlıkla herkese açık hale gelmesini engelleyin. Sunucuda manuel olarak yapılandırın.

Nginx Sanal Host Yapılandırması: Laravel Uygulamanızı Nasıl Yayınlarsınız?

Laravel uygulamanızı sunucuya yükledik ve gerekli izinleri ayarladık. Şimdi Nginx’i, gelen web isteklerini Laravel uygulamanızın public dizinine yönlendirecek şekilde yapılandırmamız gerekiyor. Bu işlem, Nginx’te bir “sanal host” veya “server block” oluşturarak yapılır.

Yeni Bir Nginx Yapılandırma Dosyası Oluşturma

Nginx yapılandırma dosyaları genellikle /etc/nginx/sites-available/ dizininde bulunur. Yeni bir yapılandırma dosyası oluşturmak için aşağıdaki komutu kullanın (örneğin yourdomain.com.conf adında):


sudo nano /etc/nginx/sites-available/yourdomain.com.conf

Bu dosyayı açtıktan sonra, içine aşağıdaki temel Laravel Nginx yapılandırmasını yapıştırın. Bu yapılandırma, gelen HTTP isteklerini dinler, uygulamanızın kök dizinini belirtir ve PHP-FPM ile iletişimi kurar:


server {
    listen 80;
    listen [::]:80;
    server_name yourdomain.com www.yourdomain.com;
    root /var/www/your_laravel_app/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";
    add_header Referrer-Policy "no-referrer-when-downgrade";
    add_header Content-Security-Policy "default-src 'self' data: 'unsafe-inline' 'unsafe-eval' yourdomain.com; img-src 'self' data: https:; font-src 'self' data:; style-src 'self' 'unsafe-inline' https:; script-src 'self' 'unsafe-inline' 'unsafe-eval' https:;"; # Örnek CSP, uygulamanıza göre özelleştirin

    index index.php index.html index.htm;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; # PHP-FPM sürümünüze göre güncelleyin
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

Bu yapılandırma dosyasındaki önemli noktalar şunlardır:

  • listen 80;: Nginx’in HTTP isteklerini 80 numaralı porttan dinlemesini sağlar.
  • server_name yourdomain.com www.yourdomain.com;: Uygulamanızın erişileceği alan adlarını belirtir. Kendi alan adlarınızla değiştirmeyi unutmayın.
  • root /var/www/your_laravel_app/public;: Laravel uygulamanızın public dizininin yolunu gösterir. Nginx, tüm web isteklerini bu dizinden sunacaktır.
  • location / { try_files $uri $uri/ /index.php?$query_string; }: Bu kural, Nginx’in bir dosyayı veya dizini bulamazsa isteği Laravel’in index.php dosyasına yönlendirmesini sağlar. Bu, Laravel’in yönlendirme mekanizmasının çalışması için kritik öneme sahiptir.
  • location ~ \.php$ { ... }: Bu blok, PHP dosyalarına gelen istekleri PHP-FPM’e iletir. fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; satırındaki PHP sürümünün, sunucunuzda kurulu olan PHP-FPM sürümüyle (örneğin php8.2-fpm) eşleştiğinden emin olun.
  • add_header ...: Bu satırlar, tarayıcıya ek güvenlik başlıkları göndererek sitenizin güvenliğini artırır. Özellikle Content-Security-Policy (CSP) dikkatli ayarlanmalıdır, aksi takdirde uygulamanızda sorunlara yol açabilir.

Siteyi Etkinleştirme ve Nginx’i Yeniden Başlatma

Yapılandırma dosyasını kaydettikten sonra, Nginx’in bu sanal host dosyasını tanıması için sites-enabled dizinine bir sembolik bağ (symlink) oluşturmanız gerekir:


sudo ln -s /etc/nginx/sites-available/yourdomain.com.conf /etc/nginx/sites-enabled/

Şimdi Nginx yapılandırmanızda herhangi bir sözdizimi hatası olup olmadığını kontrol edin:


sudo nginx -t

Eğer “test is successful” mesajını görürseniz, her şey yolundadır. Son olarak, Nginx’i yeniden başlatarak yeni yapılandırmayı uygulayın:


sudo systemctl restart nginx

UFW güvenlik duvarında HTTP ve HTTPS portlarına izin verdiğinizden emin olun:


sudo ufw allow 'Nginx Full'
sudo ufw reload

Artık alan adınızı (örneğin http://yourdomain.com) web tarayıcınızda ziyaret ettiğinizde, Laravel uygulamanızın ana sayfasını görmelisiniz. Eğer bir sorunla karşılaşırsanız, Nginx hata günlüklerini (/var/log/nginx/error.log) ve PHP-FPM hata günlüklerini (genellikle /var/log/php8.2-fpm.log veya PHP-FPM yapılandırmasına göre farklı bir yer) kontrol edin. Örneğin, bir keresinde root dizinini yanlış belirtmiştim ve Nginx 404 hatası veriyordu. Logları kontrol ederek hatayı hızlıca bulup düzeltebildim. Bu adımlar, Laravel uygulamanızı Nginx üzerinde başarıyla yayınlamak için kritik öneme sahiptir.

Veritabanı ve Çevre Ayarları: Laravel Uygulamanızı Nasıl Güvenli Hale Getirirsiniz?

Laravel uygulamanızın sunucuda çalışır duruma gelmesi için veritabanı bağlantısının doğru yapılandırılması ve çevre değişkenlerinin güvenli bir şekilde yönetilmesi hayati öneme sahiptir. Ayrıca, uygulamanızın performansını ve güvenliğini artırmak için bazı ek ayarlamalar yapabiliriz.

MySQL/MariaDB Veritabanı ve Kullanıcı Oluşturma

Laravel uygulamanızın verilerini depolayabilmesi için bir veritabanına ve bu veritabanına erişebilecek bir kullanıcıya ihtiyacı vardır. Daha önce MySQL/MariaDB kurulumunu yapmıştık. Şimdi bir veritabanı ve kullanıcı oluşturalım:


sudo mysql -u root -p

Parolanızı girdikten sonra MySQL komut istemine düşeceksiniz. Aşağıdaki komutları kullanarak yeni bir veritabanı ve kullanıcı oluşturun ve bu kullanıcıya veritabanı üzerinde tüm yetkileri verin. your_database_name, your_database_user ve your_database_password kısımlarını kendi değerlerinizle değiştirmeyi unutmayın:


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

Bu adımlar, Laravel uygulamanızın veritabanına güvenli bir şekilde bağlanmasını sağlar. Daha sonra .env dosyasındaki veritabanı ayarlarını bu bilgilerle güncellediğinizden emin olun.

Laravel Migrasyonlarını Çalıştırma

Veritabanı ve kullanıcı oluşturulduktan sonra, Laravel migrasyonlarını çalıştırarak veritabanı şemasını oluşturabilirsiniz:


cd /var/www/your_laravel_app
php artisan migrate --force

--force parametresi, üretim ortamında migrasyonları çalıştırmak için gereklidir. Ayrıca, eğer uygulamanızda başlangıç verileri (seeders) varsa, bunları da çalıştırabilirsiniz:


php artisan db:seed --force

Önbellekleme (Caching) ve Kuyruk (Queue) Yapılandırması

Laravel, performansı artırmak için güçlü önbellekleme ve kuyruk sistemlerine sahiptir. Üretim ortamında genellikle dosya tabanlı önbellekleme yerine Redis veya Memcached gibi daha hızlı çözümler tercih edilir. Redis kurulumu için:


sudo apt install redis-server php8.2-redis -y
sudo systemctl restart php8.2-fpm

Ardından .env dosyanızda CACHE_DRIVER ve QUEUE_CONNECTION değerlerini redis olarak değiştirebilirsiniz:


CACHE_DRIVER=redis
QUEUE_CONNECTION=redis

Kuyrukları çalıştırmak için bir supervisor veya systemd servisi kurmanız ve sürekli olarak php artisan queue:work komutunu çalıştırmanız gerekir. Bu, uzun süren işlemleri (örneğin e-posta gönderme, resim işleme) arka planda asenkron olarak yürütmenizi sağlar, böylece web istekleri daha hızlı yanıt verir.

Güvenlik Önlemleri

Uygulamanızın güvenliğini artırmak için ek önlemler alabilirsiniz:

  1. .env Dosyası Güvenliği: .env dosyanızın web üzerinden erişilemez olduğundan emin olun. Nginx yapılandırmanızdaki location ~ /\.(?!well-known).* { deny all; } kuralı bu tür dosyalara erişimi engeller.
  2. UFW Kuralları: Sadece gerekli portlara (80, 443, 22) izin verin. Gerekmedikçe diğer portları açık bırakmayın.
  3. SSL Sertifikası: Let’s Encrypt gibi ücretsiz bir SSL sertifikası kullanarak tüm trafiği HTTPS üzerinden şifreleyin. Bu, kullanıcı verilerinin güvenliğini sağlar ve SEO sıralamanızı iyileştirir.
  4. Güncel Yazılım: Ubuntu, Nginx, PHP ve Laravel bağımlılıklarınızı düzenli olarak güncelleyin. Bu, bilinen güvenlik açıklarının kapatılmasına yardımcı olur.

Bir vaka analizi olarak, bir müşteri veri tabanının yanlış yapılandırma sonucu (örneğin, root kullanıcısının parolasının boş bırakılması veya uzaktan erişime izin verilmesi) maruz kaldığı riskleri düşünebiliriz. Bu tür bir senaryoda, saldırganlar kolayca veritabanına erişebilir ve hassas müşteri bilgilerini çalabilirlerdi. Neyse ki, mysql_secure_installation komutu ve doğru kullanıcı izinleri sayesinde bu tür riskler bertaraf edilmiştir. Doğru veritabanı ve çevre ayarları, uygulamanızın hem performansını hem de güvenliğini garanti altına alır. Bu adımları titizlikle uygulamak, sağlam ve güvenilir bir üretim ortamı oluşturmanın anahtarıdır.

Performans ve Güvenlik Optimizasyonları: İleri Düzey İpuçları

Laravel uygulamanızı Ubuntu üzerinde Nginx ile kurmak sadece başlangıçtır. Gerçek dünya senaryolarında, uygulamanızın yüksek trafik altında bile hızlı ve güvenli kalmasını sağlamak için çeşitli optimizasyonlara ihtiyaç duyarsınız. İşte bazı ileri düzey ipuçları:

Nginx Yapılandırma Optimizasyonları

Nginx, varsayılan ayarlarıyla bile hızlıdır, ancak belirli ayarlamalarla performansı daha da artırabilirsiniz:

  • Gzip Sıkıştırması: Nginx’i statik dosyaları (CSS, JS, HTML) sıkıştırmak için yapılandırın. Bu, bant genişliğini azaltır ve sayfa yükleme sürelerini hızlandırır. nginx.conf dosyasında veya sanal host yapılandırmanızda aşağıdaki bloğu ekleyebilirsiniz:
    
            gzip on;
            gzip_vary on;
            gzip_proxied any;
            gzip_comp_level 6;
            gzip_buffers 16 8k;
            gzip_http_version 1.1;
            gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
            
  • Tarayıcı Önbellekleme: Tarayıcıların statik dosyaları (resimler, CSS, JS) yerel olarak önbelleğe almasını sağlayın. Bu, tekrar eden ziyaretlerde sayfa yüklemesini hızlandırır. location bloklarınızda expires direktifini kullanabilirsiniz:
    
            location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
                expires 30d;
                access_log off;
            }
            
  • Worker Süreçleri: Nginx’in worker_processes ayarını sunucunuzdaki CPU çekirdek sayısına eşitleyin veya iki katına çıkarın (/etc/nginx/nginx.conf dosyasında). Bu, Nginx’in eşzamanlı bağlantıları daha verimli işlemesini sağlar.

PHP-FPM Havuz Ayarları ve OPcache

PHP-FPM’in doğru yapılandırılması, PHP kodunuzun performansını doğrudan etkiler:

  • Havuz Ayarları: /etc/php/8.2/fpm/pool.d/www.conf dosyasında pm.max_children, pm.start_servers, pm.min_spare_servers ve pm.max_spare_servers değerlerini sunucunuzun RAM kapasitesine göre ayarlayın. Yanlış ayarlar bellek tükenmesine veya performans düşüşüne yol açabilir. Başlangıç olarak, pm = dynamic ve pm.max_children = 50 gibi değerlerle başlayabilir, ardından yük altında izleme yaparak optimize edebilirsiniz.
  • OPcache Kullanımı: OPcache, PHP kodunu önbelleğe alarak her istekte yeniden derlenmesini engeller. Bu, PHP yorumlama süresini önemli ölçüde azaltır. Genellikle PHP kurulumuyla birlikte gelir ve /etc/php/8.2/fpm/php.ini dosyasında etkinleştirilebilir:
    
            opcache.enable=1
            opcache.memory_consumption=128
            opcache.interned_strings_buffer=8
            opcache.max_accelerated_files=10000
            opcache.revalidate_freq=0
            opcache.fast_shutdown=1
            

    Değişikliklerden sonra PHP-FPM’i yeniden başlatmayı unutmayın.

Veritabanı Optimizasyonları

Veritabanı sorgularının performansı, uygulamanızın genel hızını büyük ölçüde etkiler:

  • İndeksleme: Sıkça sorgulanan sütunlara (özellikle WHERE ve JOIN koşullarında kullanılanlar) indeks ekleyin. Laravel migrasyonlarında bunu kolayca yapabilirsiniz.
  • Sorgu Optimizasyonu: Laravel Eloquent’te N+1 sorgu sorunlarından kaçınmak için with() veya load() gibi eager loading yöntemlerini kullanın.
  • Cache Kullanımı: Sıkça erişilen ancak nadiren değişen verileri Redis veya Memcached gibi bir önbellek sisteminde depolayın.

Güvenlik Başlıkları ve Sertifikalar

Uygulamanızın sadece hızlı değil, aynı zamanda güvenli olduğundan emin olun:

  • SSL/TLS (HTTPS): Let’s Encrypt ile ücretsiz SSL sertifikaları kurarak tüm trafiği şifreleyin. Certbot aracı bu süreci otomatikleştirir:
    
            sudo apt install certbot python3-certbot-nginx -y
            sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
            

    Bu komutlar Nginx yapılandırmanızı otomatik olarak günceller ve SSL sertifikasını kurar.

  • Güvenlik Başlıkları: Nginx yapılandırmanızda X-Frame-Options, X-XSS-Protection, X-Content-Type-Options, Referrer-Policy ve Content-Security-Policy (CSP) gibi güvenlik başlıklarını ayarlayın. CSP, uygulamanızda çalışmasına izin verilen kaynakları belirleyerek XSS saldırılarına karşı koruma sağlar.
  • Otomatik Yedeklemeler: Veritabanı ve dosya yedeklemeleri için düzenli cron işleri ayarlayın. Bu, olası bir veri kaybı durumunda kurtarma planınızın olmasını sağlar. Örneğin, bir yedekleme stratejisi oluştururken, veritabanını günlük olarak bir bulut depolama hizmetine (AWS S3 gibi) ve uygulama dosyalarını haftalık olarak farklı bir sunucuya yedeklemeyi düşünebilirsiniz.
Uzman İpucu: Sunucunuzun performansını izlemek için htop, nginx-r-stats veya Prometheus/Grafana gibi araçları kullanın. Bu araçlar, darboğazları tespit etmenize ve optimizasyon stratejilerinizi geliştirmenize yardımcı olur.

Bu optimizasyonlar, Laravel uygulamanızın yalnızca temel işlevselliği yerine getirmesini değil, aynı zamanda yüksek performans ve üst düzey güvenlik standartlarını karşılamasını sağlar. Her bir ayar, uygulamanızın genel deneyimini doğrudan etkileyebilir, bu yüzden dikkatli bir şekilde uygulanmaları önemlidir. Örneğin, bir önceki e-ticaret projemizde, Nginx’in Gzip sıkıştırmasını etkinleştirmek ve tarayıcı önbelleklemesini ayarlamak, sayfa yükleme sürelerini ortalama %30 oranında azaltmış ve kullanıcı memnuniyetini artırmıştı. Bu tür küçük görünen değişiklikler, büyük farklar yaratabilir.

Sonuç ve Sıkça Sorulan Sorular

Bu kapsamlı rehberde, Laravel uygulamanızı Ubuntu üzerinde Nginx ve PHP-FPM kullanarak nasıl kuracağınızı ve yapılandıracağınızı adım adım inceledik. LEMP yığınının temellerinden başlayarak, sunucu hazırlığı, Nginx sanal host yapılandırması, veritabanı entegrasyonu ve ileri düzey performans ile güvenlik optimizasyonlarına kadar birçok konuya değindik. Artık Laravel projelerinizi güvenle üretim ortamına taşıyabilir, yüksek performanslı ve güvenli bir web deneyimi sunabilirsiniz. Unutmayın ki, başarılı bir dağıtım sadece kurulumla bitmez; düzenli bakım, izleme ve sürekli optimizasyon da aynı derecede önemlidir. Bu adımları uygulayarak, web uygulamanızın sağlam bir temele sahip olmasını ve gelecekteki büyüme için hazır olmasını sağlamış olursunuz. Özellikle yüksek trafikli uygulamalar için bu yapılandırma, hem maliyet etkinliği hem de ölçeklenebilirlik açısından ideal bir çözüm sunar.

Sıkça Sorulan Sorular (SSS)

  1. Nginx yerine Apache kullanabilir miyim?

    Evet, Laravel uygulamaları Apache üzerinde de çalışabilir. Ancak Nginx, yüksek eşzamanlı bağlantıları ve statik dosya sunumunu daha verimli yönetmesi nedeniyle genellikle daha iyi performans sunar. Özellikle yüksek trafikli siteler için Nginx tercih edilir. Apache’nin .htaccess dosyası gibi özellikleri, Nginx’te sanal host yapılandırması içinde ele alınır.

  2. Laravel uygulamasını güncelledikten sonra ne yapmalıyım?

    Uygulamanızı güncelledikten sonra (örneğin Git pull ile), genellikle composer install --no-dev --optimize-autoloader komutunu çalıştırmanız, php artisan migrate --force ile veritabanı migrasyonlarını uygulamanız ve php artisan cache:clear, php artisan config:clear, php artisan route:clear, php artisan view:clear komutlarıyla önbelleği temizlemeniz önerilir. Ayrıca, PHP-FPM’i yeniden başlatmak (sudo systemctl restart php8.2-fpm) de iyi bir uygulamadır.

  3. 502 Bad Gateway hatası alıyorum, ne yapmalıyım?

    Bu hata genellikle Nginx’in PHP-FPM ile iletişim kuramadığı anlamına gelir. Öncelikle PHP-FPM servisinin çalıştığından emin olun (sudo systemctl status php8.2-fpm). Nginx yapılandırmanızdaki (/etc/nginx/sites-available/yourdomain.com.conf) fastcgi_pass satırındaki PHP-FPM soket yolunun (örneğin unix:/var/run/php/php8.2-fpm.sock) doğru olduğundan ve PHP-FPM yapılandırmasındaki soket yolunun eşleştiğinden emin olun. Nginx ve PHP-FPM hata günlüklerini kontrol etmek (/var/log/nginx/error.log ve PHP-FPM günlükleri) sorunun kök nedenini bulmanıza yardımcı olacaktır.

  4. Laravel uygulamasında 403 Forbidden hatası alıyorum, neden olabilir?

    403 Forbidden hatası genellikle dosya veya dizin izinleriyle ilgilidir. Uygulamanızın kök dizininin ve özellikle storage ile bootstrap/cache dizinlerinin www-data kullanıcısı tarafından yazılabilir olduğundan emin olun (sudo chown -R www-data:www-data /var/www/your_laravel_app ve sudo chmod -R 775 /var/www/your_laravel_app/storage). Ayrıca, Nginx’in root direktifinin doğru yolu gösterdiğinden emin olun.

  5. SSL sertifikası kurduktan sonra HTTP trafiğini HTTPS’e nasıl yönlendiririm?

    Certbot genellikle bunu otomatik olarak yapar. Ancak manuel olarak yapmak isterseniz, Nginx yapılandırmanızda 80 numaralı portu dinleyen bir server bloğu oluşturup tüm istekleri HTTPS’e yönlendirebilirsiniz:

    
            server {
                listen 80;
                listen [::]:80;
                server_name yourdomain.com www.yourdomain.com;
                return 301 https://$host$request_uri;
            }
            

    Bu yapılandırma, tüm HTTP isteklerini 301 kalıcı yönlendirmesiyle HTTPS versiyonuna yönlendirecektir.

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

Gönder

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.
Exit mobile version