Takip et

Ubuntu 22.04 Üzerinde Nginx ile Laravel Kurulumu ve Yapılandırması (LEMP)

Ubuntu 22.04 Üzerinde Nginx ile Laravel Kurulumu ve Yapılandırması (LEMP) Modern web geliştirmenin hızla büyüyen dünyasında, güçlü ve es

Ubuntu 22.04 Üzerinde Nginx ile Laravel Kurulumu ve Yapılandırması (LEMP)

Modern web geliştirmenin hızla büyüyen dünyasında, güçlü ve esnek bir framework olan Laravel, PHP tabanlı uygulamalar oluşturmak için geliştiricilerin ilk tercihlerinden biri haline gelmiştir. Aynı zamanda, yüksek performanslı web sunucusu Nginx, hızlı veritabanı çözümü MySQL (veya MariaDB) ve PHP-FPM (FastCGI Process Manager) ile birleşerek oluşturulan LEMP yığını (Linux, Nginx, MySQL, PHP), web uygulamalarını barındırmak için oldukça popüler ve verimli bir ortam sunar. Bu makalede, Ubuntu 22.04 LTS (Jammy Jellyfish) işletim sistemi üzerinde, Laravel uygulamanızı LEMP yığını ile nasıl kuracağınızı ve yapılandıracağınızı adım adım detaylı bir şekilde inceleyeceğiz. Bu rehber, hem yeni başlayanlar hem de deneyimli geliştiriciler için Laravel projelerini üretim ortamına taşımak isteyenlere kapsamlı bir yol haritası sunmayı amaçlamaktadır.

Laravel, şık sözdizimi, zengin özellik seti ve geniş topluluk desteği ile bilinir. Model-View-Controller (MVC) mimarisi üzerine inşa edilmiş olup, veritabanı etkileşimleri için Eloquent ORM, kullanıcı kimlik doğrulama sistemleri için Passport veya Breeze gibi paketler, kuyruk yönetimi, önbellekleme ve çok daha fazlasını standart olarak sunar. Nginx ise hafif yapısı, yüksek eşzamanlı bağlantıları işleme yeteneği ve statik içerik sunumundaki üstün performansı sayesinde özellikle yüksek trafikli uygulamalar için ideal bir seçimdir. Ubuntu 22.04’ün uzun süreli desteği (LTS) ve kararlı yapısı, bu kombinasyonu güvenilir ve güncel bir sunucu ortamı haline getirmektedir.

Bu makalede, öncelikle Ubuntu sisteminizi güncelleyecek, ardından Nginx web sunucusunu, MariaDB veritabanı sunucusunu ve PHP-FPM’yi gerekli uzantılarıyla birlikte kuracağız. Daha sonra, Composer aracılığıyla yeni bir Laravel projesi oluşturacak, veritabanı bağlantılarını yapılandıracak ve son olarak Nginx’i Laravel uygulamanızı sunacak şekilde yapılandıracağız. Her adımı titizlikle takip ederek, kendi Laravel uygulamanızı güvenli ve performanslı bir LEMP ortamında çalışır hale getirebileceksiniz.

Ön Gereksinimler

Bu kuruluma başlamadan önce, aşağıdaki ön gereksinimlere sahip olduğunuzdan emin olun:

* Ubuntu 22.04 Sunucusu: Yeni kurulmuş veya temiz bir Ubuntu 22.04 LTS sunucusu. Tercihen bir bulut sağlayıcısından (AWS, DigitalOcean, Linode vb.) alınmış bir sanal makine veya fiziksel bir sunucu.
* Sudo Yetkileri: Sunucuda sudo ayrıcalıklarına sahip, root olmayan bir kullanıcı hesabı. Güvenlik nedenleriyle doğrudan root kullanıcısı olarak çalışmaktan kaçınılması önerilir.
* Temel Terminal Bilgisi: Linux komut satırı ile temel düzeyde etkileşim kurabilme yeteneği.
* Alan Adı (Opsiyonel): Bir alan adına sahip olmak (örneğin, ornekalanadi.com), Nginx yapılandırması sırasında kolaylık sağlar. Eğer yoksa, sunucunuzun IP adresini kullanabilirsiniz.

1. Ubuntu 22.04 Sistem Güncellemesi

Kuruluma başlamadan önce, sunucunuzdaki paket listelerini güncellemek ve mevcut paketleri en son sürümlerine yükseltmek her zaman iyi bir uygulamadır. Bu, güvenlik açıklarını kapatır ve yeni yazılımların kurulumunda uyumluluk sorunlarını önler.

Aşağıdaki komutları terminalinizde çalıştırın:

sudo apt update
sudo apt upgrade -y

sudo apt update komutu, sisteminizdeki paket depolarının indeksini günceller. sudo apt upgrade -y komutu ise, indirilen indekslere göre yüklü tüm paketleri yükseltir. -y bayrağı, tüm onay sorularına otomatik olarak “evet” yanıtı vermenizi sağlar, böylece yükseltme işlemi kesintisiz devam eder. Bu işlem, internet bağlantınızın hızına ve sunucunuzdaki güncellenmesi gereken paket sayısına bağlı olarak biraz zaman alabilir.

2. Nginx Kurulumu

Nginx, LEMP yığınının “E” harfini temsil eden yüksek performanslı bir web sunucusudur. Statik içeriği hızlı bir şekilde sunma ve dinamik içerik isteklerini PHP-FPM’ye iletme yeteneği sayesinde Laravel uygulamaları için mükemmel bir seçimdir.

Nginx’i Ubuntu 22.04 üzerine kurmak için aşağıdaki komutu kullanın:

sudo apt install nginx -y

Kurulum tamamlandıktan sonra, Nginx servisini başlatın ve sistem başlangıcında otomatik olarak başlamasını sağlayın:

sudo systemctl start nginx
sudo systemctl enable nginx

Nginx servisinin düzgün çalışıp çalışmadığını kontrol etmek için aşağıdaki komutu kullanabilirsiniz:

sudo systemctl status nginx

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

Güvenlik Duvarı Yapılandırması (UFW)

Ubuntu’da varsayılan olarak gelen Uncomplicated Firewall (UFW) etkinse, Nginx’in dışarıdan erişilebilir olması için HTTP (veya HTTPS) trafiğine izin vermeniz gerekir.

Öncelikle, UFW’nin Nginx için hangi uygulama profillerine sahip olduğunu kontrol edin:

sudo ufw app list

Genellikle Nginx HTTP, Nginx HTTPS ve Nginx Full (hem HTTP hem HTTPS) profillerini görürsünüz. Laravel uygulamamızı başlangıçta HTTP üzerinden sunacağımız için Nginx HTTP profiline izin vereceğiz:

sudo ufw allow 'Nginx HTTP'

Eğer UFW henüz etkin değilse, etkinleştirmeniz gerekir:

sudo ufw enable

Bu işlem, bağlantınızı kesebileceği konusunda bir uyarı verecektir; y tuşuna basarak onaylayın. Son olarak, UFW durumunu kontrol ederek Nginx HTTP trafiğine izin verildiğinden emin olun:

sudo ufw status

Artık bir web tarayıcısı açıp sunucunuzun IP adresini (veya alan adınızı) ziyaret ettiğinizde, Nginx’in varsayılan karşılama sayfasını görmelisiniz. Bu, Nginx’in başarıyla kurulduğunu ve çalıştığını gösterir.

3. MySQL (MariaDB) Kurulumu

LEMP yığınının “M” harfi, veritabanı yönetim sistemini temsil eder. Bu rehberde, MySQL ile tam uyumlu ve genellikle daha performanslı kabul edilen MariaDB’yi kullanacağız. Laravel, Eloquent ORM sayesinde hem MySQL hem de MariaDB ile sorunsuz bir şekilde çalışabilir.

MariaDB sunucusunu ve istemcisini kurmak için aşağıdaki komutu kullanın:

sudo apt install mariadb-server mariadb-client -y

Kurulum tamamlandıktan sonra, MariaDB servisini başlatın ve sistem başlangıcında otomatik olarak başlamasını sağlayın:

sudo systemctl start mariadb
sudo systemctl enable mariadb

MariaDB servisinin durumunu kontrol etmek için:

sudo systemctl status mariadb

MariaDB Güvenlik Yapılandırması

Yeni bir MariaDB kurulumunda güvenlik önlemlerini almak çok önemlidir. mysql_secure_installation betiği, kök parolasını ayarlama, anonim kullanıcıları kaldırma, uzaktan kök oturum açmayı devre dışı bırakma ve test veritabanını kaldırma gibi adımlarda size yardımcı olacaktır.

sudo mysql_secure_installation

Betik size bir dizi soru soracaktır:

1. Enter current password for root (enter for none): İlk kurulumda root parolası olmadığı için doğrudan Enter tuşuna basın.
2. Set root password? [Y/n] Y tuşuna basarak yeni bir root parolası belirleyin ve iki kez girerek onaylayın. Bu parolayı güvenli bir yerde saklayın.
3. Remove anonymous users? [Y/n] Y tuşuna basarak anonim kullanıcıları kaldırın. Bu, veritabanınızın güvenliğini artırır.
4. Disallow root login remotely? [Y/n] Y tuşuna basarak root kullanıcısının uzaktan oturum açmasını engelleyin. Bu, yerel erişimi korur ve güvenlik riskini azaltır.
5. Remove test database and access to it? [Y/n] Y tuşuna basarak varsayılan test veritabanını kaldırın. Bu veritabanı genellikle güvenlik açığı oluşturabilir.
6. Reload privilege tables now? [Y/n] Y tuşuna basarak ayrıcalık tablolarını yeniden yükleyin. Bu, yaptığınız değişikliklerin hemen etkili olmasını sağlar.

Tüm adımları tamamladıktan sonra MariaDB sunucunuz daha güvenli bir hale gelecektir.

4. PHP ve Gerekli Uzantıların Kurulumu

Laravel, PHP ile yazılmış bir framework olduğundan, PHP’nin ve bazı gerekli uzantılarının sunucuda kurulu olması gerekir. Ubuntu 22.04, varsayılan olarak PHP 8.1 sürümünü paket depolarında sunar. Ayrıca, Nginx ile PHP’nin iletişim kurabilmesi için PHP-FPM (FastCGI Process Manager) gereklidir.

Aşağıdaki komutla PHP 8.1’i ve Laravel’in ihtiyaç duyduğu temel uzantıları kurun:

sudo apt install php8.1-fpm php8.1-mysql php8.1-common php8.1-cli php8.1-curl php8.1-gd php8.1-mbstring php8.1-xml php8.1-zip php8.1-bcmath php8.1-intl -y

Kurulan uzantıların kısa açıklamaları:

* php8.1-fpm: PHP FastCGI Process Manager, Nginx’in PHP kodunu işlemesini sağlar.
* php8.1-mysql: MySQL/MariaDB veritabanı bağlantısı için gereklidir.
* php8.1-common: PHP’nin temel modüllerini içerir.
* php8.1-cli: Komut satırı PHP uygulamalarını çalıştırmak için kullanılır (örneğin, Artisan komutları).
* php8.1-curl: HTTP istekleri yapmak için cURL kütüphanesini sağlar.
* php8.1-gd: Görüntü işleme fonksiyonları için (örneğin, resim boyutlandırma).
* php8.1-mbstring: Çok baytlı dizelerle çalışmak için (uluslararasılaşma için önemlidir).
* php8.1-xml: XML verilerini işlemek için gereklidir.
* php8.1-zip: Zip arşivlerini okuma ve yazma yeteneği sağlar.
* php8.1-bcmath: Yüksek hassasiyetli matematik fonksiyonları için.
* php8.1-intl: Uluslararasılaşma (Internationalization) desteği için.

Kurulum tamamlandıktan sonra, PHP-FPM servisinin çalışır durumda olduğundan emin olun:

sudo systemctl start php8.1-fpm
sudo systemctl enable php8.1-fpm
sudo systemctl status php8.1-fpm

PHP Yapılandırması

Laravel uygulamalarının düzgün çalışması için bazı PHP ayarlarını optimize etmek genellikle faydalıdır. Özellikle php.ini dosyasında cgi.fix_pathinfo ayarını devre dışı bırakmak güvenlik açısından önemlidir. Bu ayar, Nginx’in dosyaları yanlışlıkla PHP olarak yorumlamasını önler.

PHP-FPM’nin php.ini dosyasını düzenlemek için bir metin düzenleyici kullanın:

sudo nano /etc/php/8.1/fpm/php.ini

Açılan dosyada, aşağıdaki satırı bulun ve değerini 0 olarak değiştirin (başında noktalı virgül varsa kaldırın):

cgi.fix_pathinfo=0

Ayrıca, uygulamanızın ihtiyaçlarına göre upload_max_filesize, post_max_size, memory_limit ve max_execution_time gibi değerleri artırmak isteyebilirsiniz. Örneğin:

upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M
max_execution_time = 300

Değişiklikleri kaydedin (Ctrl+O, Enter) ve dosyayı kapatın (Ctrl+X). Yaptığınız değişikliklerin etkili olması için PHP-FPM servisini yeniden başlatın:

sudo systemctl restart php8.1-fpm

5. Composer Kurulumu

Composer, PHP için bir bağımlılık yöneticisidir. Laravel gibi modern PHP framework’leri, projenin ihtiyaç duyduğu tüm kütüphaneleri ve bağımlılıkları yönetmek için Composer’ı kullanır. Laravel projesi oluşturmak ve bağımlılıklarını yönetmek için Composer’ı kurmamız gerekmektedir.

Composer’ı sistem genelinde kullanabilmek için aşağıdaki adımları izleyin:

Öncelikle, Composer’ın kurulum betiğini indirin:

curl -sS https://getcomposer.org/installer | php

Bu komut, geçerli dizininizde composer.phar adında bir dosya oluşturacaktır. Bu dosyayı sistem genelinde erişilebilir hale getirmek için /usr/local/bin dizinine taşıyın:

sudo mv composer.phar /usr/local/bin/composer

Şimdi Composer’ın düzgün bir şekilde kurulup kurulmadığını ve erişilebilir olup olmadığını kontrol edebilirsiniz:

composer --version

Çıktıda yüklü Composer sürümünü görmelisiniz.

6. Laravel Uygulaması Oluşturma

Artık LEMP yığınımız ve Composer hazır olduğuna göre, yeni bir Laravel projesi oluşturabiliriz. Web uygulamaları için genellikle /var/www dizini kullanılır. Bu dizin altında Laravel projemiz için bir klasör oluşturacağız.

Öncelikle, /var/www dizinine gidin:

cd /var/www/

Şimdi Composer kullanarak yeni bir Laravel projesi oluşturun. my_laravel_app yerine projenizin adını yazabilirsiniz:

sudo composer create-project laravel/laravel my_laravel_app

sudo kullanmamızın nedeni, /var/www dizininin genellikle root ayrıcalıkları gerektirmesidir. Bu komut, Laravel’in en son stabil sürümünü indirip my_laravel_app adlı yeni bir dizine kuracaktır. Bu işlem biraz zaman alabilir.

Kurulum tamamlandıktan sonra, Laravel projesinin dizin ve dosya izinlerini ayarlamamız gerekir. Nginx ve PHP-FPM, web sunucusu kullanıcısı olan www-data kullanıcısı altında çalıştığı için, bu kullanıcının Laravel projesinin dosyalarına erişebilmesi gerekir. Özellikle storage ve bootstrap/cache dizinleri yazılabilir olmalıdır.

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

Bu komutlar:
* sudo chown -R www-data:www-data /var/www/my_laravel_app: /var/www/my_laravel_app dizininin ve altındaki tüm dosya ve dizinlerin sahipliğini www-data kullanıcısına ve www-data grubuna verir.
* sudo chmod -R 775 /var/www/my_laravel_app/storage: storage dizinine ve altındaki tüm dosya ve dizinlere okuma, yazma ve çalıştırma izinleri verir (sahip ve grup için). Diğerleri için sadece okuma ve çalıştırma izni.
* sudo chmod -R 775 /var/www/my_laravel_app/bootstrap/cache: Aynı izinleri bootstrap/cache dizinine de uygular.

Bu izinler, Laravel’in önbellekleme, oturum ve günlük dosyalarını doğru şekilde yazabilmesini sağlar.

7. Laravel Ortam Yapılandırması

Laravel projenizi oluşturduktan sonra, uygulamaya özgü ayarları içeren .env dosyasını yapılandırmanız gerekir. Bu dosya, veritabanı kimlik bilgileri, uygulama anahtarı, hata ayıklama modu gibi hassas bilgileri içerir ve sürüm kontrol sistemlerine dahil edilmemelidir.

Öncelikle, Laravel projenizin kök dizinine gidin:

cd /var/www/my_laravel_app

Laravel, .env.example adında bir örnek ortam dosyası ile gelir. Bunu kopyalayarak kendi .env dosyamızı oluşturacağız:

cp .env.example .env

Şimdi .env dosyasını düzenlemek için bir metin düzenleyici açın:

sudo nano .env

Aşağıdaki önemli alanları kendi sunucunuzun ve uygulamanızın bilgilerine göre güncelleyin:

* APP_NAME: Uygulamanızın adını belirleyin (örneğin, My Laravel App).
* APP_ENV: Uygulamanızın ortamını belirleyin. Geliştirme aşamasında local veya development, üretim ortamında production olmalıdır.
* APP_URL: Uygulamanızın erişileceği URL’yi belirtin (örneğin, http://your_domain.com).
* Veritabanı Ayarları: MariaDB kurulumunda belirlediğiniz veritabanı adı, kullanıcı adı ve parolayı buraya girin.

APP_NAME="My Laravel App"
    APP_ENV=production # Üretim ortamı için
    APP_KEY= # Bu kısım boş bırakılacak, bir sonraki adımda otomatik oluşturulacak
    APP_DEBUG=false # Üretim ortamında false olmalı
    APP_URL=http://your_domain.com

    LOG_CHANNEL=stack
    LOG_DEPRECATIONS_CHANNEL=null
    LOG_LEVEL=debug

    DB_CONNECTION=mysql
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_DATABASE=laravel_db # Veritabanı adınız
    DB_USERNAME=laravel_user # Veritabanı kullanıcı adınız
    DB_PASSWORD=your_secure_password # Veritabanı parolanız

your_domain.com, laravel_db, laravel_user ve your_secure_password gibi yer tutucuları kendi bilgilerinizle değiştirmeyi unutmayın.

Değişiklikleri kaydedin (Ctrl+O, Enter) ve dosyayı kapatın (Ctrl+X).

Son olarak, Laravel uygulamanız için benzersiz bir uygulama anahtarı (application key) oluşturun. Bu anahtar, oturumlar ve diğer hassas veriler için şifreleme anahtarı olarak kullanılır.

php artisan key:generate

Bu komut, .env dosyasındaki APP_KEY alanına rastgele bir dize ekleyecektir.

8. Veritabanı ve Kullanıcı Oluşturma

Laravel uygulamamızın kullanacağı veritabanını ve bu veritabanına erişim sağlayacak bir kullanıcıyı MariaDB’de oluşturmamız gerekiyor. Bu, güvenlik açısından önemlidir, çünkü uygulamanın root kullanıcısı yerine kendi özel kullanıcı hesabını kullanması, olası bir güvenlik ihlalinde riskleri sınırlar.

MariaDB kabuğuna root kullanıcısı olarak giriş yapın:

sudo mysql -u root -p

İstendiğinde MariaDB root parolanızı girin.

Şimdi, .env dosyasında belirttiğiniz laravel_db adında bir veritabanı oluşturun (kendi adınızı kullanabilirsiniz):

CREATE DATABASE laravel_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Ardından, laravel_user adında bir kullanıcı oluşturun ve bu kullanıcıya güçlü bir parola atayın. your_secure_password kısmını kendi güvenli parolanızla değiştirin:

CREATE USER 'laravel_user'@'localhost' IDENTIFIED BY 'your_secure_password';

Bu kullanıcıya az önce oluşturduğunuz laravel_db veritabanı üzerinde tüm ayrıcalıkları verin:

GRANT ALL PRIVILEGES ON laravel_db.* TO 'laravel_user'@'localhost';

Değişikliklerin etkili olması için ayrıcalık tablolarını yeniden yükleyin:

FLUSH PRIVILEGES;

MariaDB kabuğundan çıkın:

EXIT;

Artık Laravel uygulamanızın veritabanı bağlantısı için gerekli olan veritabanı, kullanıcı ve izinler ayarlanmış durumda. Son olarak, Laravel’in veritabanı tablolarını oluşturmak için migrasyonları çalıştırın. Bu komutu Laravel projenizin kök dizininden çalıştırmanız gerekir (/var/www/my_laravel_app):

php artisan migrate

Bu komut, Laravel’in varsayılan users ve password_resets tablolarını oluşturacaktır.

9. Nginx Sanal Host Yapılandırması

Nginx’in Laravel uygulamanızı doğru şekilde sunabilmesi için bir sanal host (server block) yapılandırması oluşturmamız gerekiyor. Bu yapılandırma, Nginx’e belirli bir alan adına veya IP adresine gelen istekleri hangi dizinden sunacağını ve PHP-FPM ile nasıl etkileşim kuracağını söyler.

Nginx yapılandırma dosyaları genellikle /etc/nginx/sites-available/ dizininde bulunur. Yeni bir yapılandırma dosyası oluşturalım:

sudo nano /etc/nginx/sites-available/my_laravel_app.conf

Açılan dosyaya aşağıdaki içeriği yapıştırın. your_domain.com ve www.your_domain.com kısımlarını kendi alan adınızla veya sunucunuzun IP adresiyle değiştirmeyi unutmayın.

server {
    listen 80;
    server_name your_domain.com www.your_domain.com; # Alan adınızı veya sunucu IP adresinizi buraya yazın

    root /var/www/my_laravel_app/public; # Laravel projenizin public dizinini gösterir
    index index.php index.html index.htm;

    charset utf-8;

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

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock; # PHP-FPM soket dosyasının yolu
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }

    error_log /var/log/nginx/my_laravel_app_error.log;
    access_log /var/log/nginx/my_laravel_app_access.log;
}

Yapılandırma Açıklaması:

* listen 80;: Nginx’in 80 numaralı porttan (HTTP) gelen bağlantıları dinlemesini sağlar.
* server_name your_domain.com www.your_domain.com;: Bu sanal hostun hangi alan adları için geçerli olduğunu belirtir.
* root /var/www/my_laravel_app/public;: Laravel uygulamalarının tüm web isteklerini public dizininden sunması gerektiğini belirtir. Bu, Laravel’in güvenlik mekanizmasının bir parçasıdır.
* index index.php index.html index.htm;: Bir dizin istendiğinde Nginx’in öncelikle hangi dosyaları arayacağını belirtir.
* charset utf-8;: Karakter setini UTF-8 olarak ayarlar.
* location / { ... }: Tüm gelen istekleri işler. try_files yönergesi, istenen bir dosya veya dizin bulunamazsa isteği index.php‘ye yönlendirir. Bu, Laravel’in URL yönlendirme (routing) sisteminin çalışması için kritik öneme sahiptir.
* location ~ \.php$ { ... }: .php uzantılı dosya isteklerini işler.
* include snippets/fastcgi-php.conf;: PHP-FPM için gerekli FastCGI parametrelerini içerir.
* fastcgi_pass unix:/run/php/php8.1-fpm.sock;: İstekleri PHP-FPM’ye Unix soketi üzerinden iletir.
* fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;: PHP-FPM’ye çalıştırılacak PHP dosyasının tam yolunu söyler.
* include fastcgi_params;: Ek FastCGI parametrelerini içerir.
* location ~ /\.ht { deny all; }: .htaccess dosyalarına doğrudan erişimi engeller. Nginx .htaccess dosyalarını kullanmaz, bu nedenle bu dosyaların web üzerinden erişilebilir olması güvenlik riski oluşturur.
* error_log ve access_log: Bu sanal hosta ait hata ve erişim günlüklerinin kaydedileceği yolları belirtir. Sorun giderme için çok faydalıdır.

Değişiklikleri kaydedin (Ctrl+O, Enter) ve dosyayı kapatın (Ctrl+X).

Şimdi bu yapılandırma dosyasını etkinleştirmek için /etc/nginx/sites-enabled/ dizinine sembolik bir bağlantı oluşturun:

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

Varsayılan Nginx yapılandırmasını devre dışı bırakmak iyi bir uygulamadır, çünkü genellikle bu özel yapılandırmanızla çakışabilir:

sudo rm /etc/nginx/sites-enabled/default

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

sudo nginx -t

Eğer test is successful veya syntax is ok gibi bir mesaj görürseniz, yapılandırmanız doğru demektir. Herhangi bir hata varsa, my_laravel_app.conf dosyasını tekrar kontrol edin.

Son olarak, Nginx’i yeni yapılandırmayı yüklemesi için yeniden başlatın:

sudo systemctl restart nginx

10. Test Etme

Tüm kurulum ve yapılandırma adımlarını başarıyla tamamladıysanız, Laravel uygulamanızın artık web üzerinden erişilebilir olması gerekir.

Bir web tarayıcısı açın ve Nginx yapılandırmasında belirttiğiniz alan adını (your_domain.com) veya sunucunuzun IP adresini ziyaret edin.

Her şey yolunda gittiyse, Laravel’in varsayılan karşılama sayfasını görmelisiniz. Bu sayfa, Laravel’in başarıyla kurulduğunu ve Nginx ile PHP-FPM’nin düzgün bir şekilde çalıştığını gösterir.

Eğer bir hata sayfası veya boş bir sayfa görüyorsanız, sorun giderme bölümüne geçmeniz gerekebilir.

11. Güvenlik İpuçları

Laravel uygulamanızı üretim ortamında çalıştırırken güvenlik her zaman en yüksek öncelik olmalıdır. İşte bazı önemli güvenlik ipuçları:

* Sistemi Güncel Tutun: Ubuntu işletim sisteminizi, Nginx, PHP, MariaDB ve Laravel bağımlılıklarınızı düzenli olarak güncelleyin. Güvenlik yamaları genellikle kritik açıkları kapatır.

sudo apt update && sudo apt upgrade -y
    composer update --no-dev

* Güçlü Parolalar Kullanın: MariaDB root kullanıcısı, veritabanı kullanıcıları, SSH kullanıcıları ve Laravel uygulamanızdaki tüm kullanıcılar için güçlü ve benzersiz parolalar kullanın.
* Güvenlik Duvarını Yapılandırın (UFW): Sadece gerekli portlara (SSH için 22, HTTP için 80, HTTPS için 443) izin verin. Diğer tüm portları kapatın.
* HTTPS Kullanın (SSL/TLS): Uygulamanızı HTTP yerine HTTPS üzerinden sunarak veri trafiğini şifreleyin. Let’s Encrypt, ücretsiz SSL sertifikaları için popüler bir çözümdür ve Certbot ile kolayca kurulabilir.
* .env Dosyasını Güvende Tutun: .env dosyası hassas bilgiler içerir. Bu dosyanın web üzerinden erişilebilir olmadığından emin olun ve asla sürüm kontrol sistemlerine (Git gibi) dahil etmeyin.
* Dosya İzinlerini Kısıtlayın: Dosya ve dizin izinlerini minimumda tutun. 777 gibi geniş izinlerden kaçının. storage ve bootstrap/cache dizinleri dışındaki çoğu dosya için 755 (dizinler) veya 644 (dosyalar) yeterli olmalıdır.
* SSH Güvenliği: SSH için parola ile giriş yerine anahtar tabanlı kimlik doğrulaması kullanın. Varsayılan SSH portunu değiştirin ve root ile doğrudan oturum açmayı devre dışı bırakın.
* Hata Ayıklama Modunu Kapatın: Üretim ortamında .env dosyasında APP_DEBUG=false olarak ayarlayın. Hata ayıklama modunun açık olması, hassas sistem bilgilerini saldırganlara ifşa edebilir.
* Günlükleri İzleyin: Nginx, PHP-FPM ve Laravel’in hata günlüklerini düzenli olarak kontrol edin. Anormal aktiviteleri veya hataları erken tespit etmenize yardımcı olur.
* Yedeklemeler: Veritabanınızı ve uygulama dosyalarınızı düzenli olarak yedekleyin. Bir felaket durumunda verilerinizi kurtarabilmeniz için bu kritik öneme sahiptir.

12. Sorun Giderme

Kurulum sırasında veya sonrasında herhangi bir sorunla karşılaşırsanız, aşağıdaki adımlar sorun gidermenize yardımcı olabilir:

* Nginx Hata Günlükleri: Nginx’in hata günlüklerini kontrol edin.

sudo tail -f /var/log/nginx/error.log
    # Veya uygulamanıza özel günlük:
    sudo tail -f /var/log/nginx/my_laravel_app_error.log

* PHP-FPM Hata Günlükleri: PHP-FPM’nin hata günlüklerini kontrol edin.

sudo tail -f /var/log/php8.1-fpm.log

* Laravel Uygulama Günlükleri: Laravel’in kendi hata günlüklerini kontrol edin.

sudo tail -f /var/www/my_laravel_app/storage/logs/laravel.log

* Servis Durumlarını Kontrol Etme: Nginx, PHP-FPM ve MariaDB servislerinin çalışır durumda olduğundan emin olun.

sudo systemctl status nginx
    sudo systemctl status php8.1-fpm
    sudo systemctl status mariadb

Eğer bir servis çalışmıyorsa, sudo systemctl restart komutuyla yeniden başlatmayı deneyin.
* Dosya İzinleri: Özellikle storage ve 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/my_laravel_app
    sudo chmod -R 775 /var/www/my_laravel_app/storage
    sudo chmod -R 775 /var/www/my_laravel_app/bootstrap/cache

* Nginx Yapılandırma Sözdizimi: Nginx yapılandırma dosyanızda bir sözdizimi hatası olup olmadığını kontrol edin.

sudo nginx -t

* PHP cgi.fix_pathinfo: /etc/php/8.1/fpm/php.ini dosyasında cgi.fix_pathinfo=0 olduğundan emin olun ve PHP-FPM’yi yeniden başlatın.
* .env Dosyası ve APP_KEY: .env dosyasındaki veritabanı kimlik bilgilerinin doğru olduğundan ve APP_KEY‘in oluşturulduğundan emin olun.
* Veritabanı Bağlantısı: MariaDB’ye doğru kullanıcı adı ve parola ile bağlanıp bağlanamadığınızı manuel olarak test edin.

mysql -u laravel_user -p

Parolanızı girin ve SHOW DATABASES; komutuyla laravel_db‘nin görünüp görünmediğini kontrol edin.

Bu adımlar, çoğu yaygın sorunu tespit etmenize ve çözmenize yardımcı olacaktır.

Sonuç

Bu kapsamlı rehberde, Ubuntu 22.04 LTS üzerinde Laravel uygulamanızı Nginx, MariaDB ve PHP-FPM’den oluşan güçlü bir LEMP yığını ile nasıl kuracağınızı ve yapılandıracağınızı adım adım öğrendiniz. Başlangıçta sistem güncellemelerinden başlayarak, her bir LEMP bileşeninin kurulumunu, yapılandırmasını ve Laravel projesinin oluşturulmasını, veritabanı bağlantılarını ve Nginx sanal host ayarlarını detaylı bir şekilde ele aldık.

Artık performanslı ve güvenli bir sunucu ortamında Laravel uygulamanızı çalışır durumda. Bu kurulum, uygulamanızın yüksek performansla çalışmasını sağlarken, Nginx’in verimli kaynak kullanımı ve PHP-FPM’nin dinamik içerik işleme yetenekleri sayesinde ölçeklenebilirlik için sağlam bir temel sunar.

Unutmayın ki bu kurulum bir başlangıç noktasıdır. Uygulamanızın özel ihtiyaçlarına göre ek yapılandırmalar (örneğin, Redis önbellekleme, kuyruk yönetimi, Let’s Encrypt ile HTTPS) ve sürekli güvenlik denetimleri yapmanız gerekecektir. Güvenlik ipuçlarına dikkat etmek ve sisteminizi düzenli olarak güncel tutmak, uygulamanızın uzun vadeli kararlılığı ve güvenliği için hayati öneme sahiptir. Bu rehberin, Laravel projelerinizi üretim ortamına taşımak için size sağlam bir yol gösterici olmasını umuyoruz.

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