Skip to main content

Laravel Kurulumu: Ubuntu 22.04 Üzerinde Nginx İle LEMP Yığını Yapılandırması 🚀

Bu rehberde, Ubuntu 22.04 sunucusunda Nginx ve MySQL kullanarak Laravel uygulamanız için LEMP (Linux, Nginx, MySQL, PHP-FPM) yığını kurulumunu ve yapılandırmasını adım adım öğreneceksiniz. Sonunda, veritabanı ile bağlantı kurarak çalışan bir Laravel demo uygulaması elde edeceksiniz.

Bu Rehberde Ne Öğreneceksiniz?

Laravel'i Ubuntu 22.04 üzerinde nasıl kuracağınızı, PHP modüllerini nasıl yükleyeceğinizi, MySQL veritabanını nasıl oluşturacağınızı ve Nginx ile Laravel uygulamanızı nasıl sunacağınızı öğreneceksiniz. Bu yöntem, modern PHP uygulamalarını canlıya almak için ideal bir ortam sağlar.


Ön Koşullar ve Hazırlık

Başlamadan önce, Ubuntu 22.04 üzerinde aşağıdaki bileşenlerin kurulu olduğundan emin olun:

  • Sudo yetkili bir kullanıcı
  • LEMP yığını (Nginx, MySQL 8, PHP-FPM)
  • Composer (Laravel bağımlılıkları için)

1. Gerekli PHP Modüllerini Kurma

Laravel, bazı PHP modüllerine ihtiyaç duyar. Bu modülleri kurarak Laravel'in çalışmasını sağlarız.

PHP Modüllerini Yükleme

Paket yöneticisini güncelleyin ve gerekli modülleri yükleyin:

sudo apt update
sudo apt install php-mbstring php-xml php-bcmath php-curl

php-mbstring: Karakter kodlama desteği

php-xml: XML işleme desteği

php-bcmath: Hassas matematik hesaplamaları

php-curl: HTTP istekleri için cURL desteği


2. Laravel İçin Veritabanı ve Kullanıcı Oluşturma

Laravel uygulamanızın kullanacağı veritabanını MySQL üzerinde oluşturalım.

MySQL Yapılandırması

MySQL'e root olarak giriş yapın:


sudo mysql

Yeni bir veritabanı oluşturun:


CREATE DATABASE rabisu_liste;
Yeni bir kullanıcı oluşturun ve yetki verin:

CREATE USER 'rabisu_user'@'%' IDENTIFIED WITH mysql_native_password BY 'GucluSifre123!';
GRANT ALL ON rabisu_liste.* TO 'rabisu_user'@'%';
FLUSH PRIVILEGES;

Örnek veriler eklemek için yerler tablosu oluşturun:


CREATE TABLE rabisu_liste.yerler (
id INT AUTO_INCREMENT,
isim VARCHAR(255),
ziyaret_edildi BOOLEAN,
PRIMARY KEY(id)
);
INSERT INTO rabisu_liste.yerler (isim, ziyaret_edildi)
VALUES ("Rize", false),
("Marmaris", true),
("Nevsehir", false),
("Kars", true);

Veritabanı ve kullanıcı hazır, şimdi Laravel için yapılandırmaya geçebiliriz.


3. Yeni Laravel Uygulaması Oluşturma

Laravel projesini Composer ile oluşturacağız.

Laravel Projesini Oluşturma

Ana dizine gidin ve Laravel uygulamasını oluşturun:


cd ~
composer create-project --prefer-dist laravel/laravel rabisu_app

Laravel'in doğru kurulduğunu kontrol etmek için:


cd rabisu_app
php artisan

Bu komut, Laravel komut satırı aracını çalıştıracak ve uygulamanın doğru kurulduğuna dair bilgi verecektir.


4. Laravel Uygulamasını Yapılandırma

Laravel’in .env dosyasını veritabanı bilgileri ile güncelleyelim.

.env Dosyasını Düzenleme

nano editörü ile .env dosyasını açın:


nano .env

Veritabanı bilgilerini aşağıdaki şekilde güncelleyin:


APP_NAME=RabisuListesi
APP_ENV=development
APP_KEY=APPLICATION_UNIQUE_KEY_DONT_COPY
APP_DEBUG=true
APP_URL=http://tr1-node01.rabisu.cloud

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=rabisu_liste
DB_USERNAME=rabisu_user
DB_PASSWORD=GucluSifre123!

Değişiklikleri kaydedip dosyayı kapatın.


5. Nginx Sanal Konağını Ayarlama

Uygulamayı web üzerinden çalıştırabilmek için Nginx yapılandırmasını yapmalıyız.

Dosyaları Taşıma ve İzin Ayarları

Laravel uygulama dosyasını /var/www dizinine taşıyın:


sudo mv ~/rabisu_app /var/www/rabisu_app

Laravel’in storage ve bootstrap/cache dizinlerine yazma izni verin:


sudo chown -R www-data:www-data /var/www/rabisu_app/storage
sudo chown -R www-data:www-data /var/www/rabisu_app/bootstrap/cache

Nginx Yapılandırması

Yeni bir sanal konak dosyası oluşturun:


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

Aşağıdaki Nginx yapılandırmasını ekleyin:


server {
listen 80;
server_name tr1-node01.rabisu.cloud;
root /var/www/rabisu_app/public;

index index.php index.htm index.html;

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

location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
}

Yapılandırmayı Etkinleştirme

Sanal konak dosyasına sembolik bağlantı oluşturun:


sudo ln -s /etc/nginx/sites-available/rabisu_app /etc/nginx/sites-enabled/

Yapılandırma hatalarını kontrol edin:


sudo nginx -t

Nginx'i yeniden yükleyin:


sudo systemctl reload nginx

6. Ana Sayfayı Veritabanından Veri Çekecek Şekilde Özelleştirme

Laravel rota dosyasını (routes/web.php) ve görünüm dosyasını (travellist.blade.php) özelleştirerek veritabanından veri çekeceğiz.

Rota Dosyasını Güncelleme

Ana rota dosyasını şu şekilde düzenleyin:


nano /var/www/rabisu_app/routes/web.php

Aşağıdaki kodu ekleyin:


<?php

use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Route;

Route::get('/', function () {
$ziyaret_edildi = DB::select('select * from yerler where ziyaret_edildi = ?', [1]);
$gidilecek = DB::select('select * from yerler where ziyaret_edildi = ?', [0]);

return view('rabisu_liste', ['ziyaret_edildi' => $ziyaret_edildi, 'gidilecek' => $gidilecek ] );
});

Görünüm Dosyasını Oluşturma

Yeni bir Blade şablonu oluşturun:


nano /var/www/rabisu_app/resources/views/rabisu_liste.blade.php

Aşağıdaki HTML ve Blade kodunu ekleyin:


<html>
<head>
<title>Rabisu Seyahat Listesi</title>
</head>

<body>
<h1>Gezilecek Yerler Listem</h1>
<h2>Ziyaret Etmek İstediklerim</h2>
<ul>
@foreach ($gidilecek as $yeni_yer)
<li>{{ $yeni_yer->isim }}</li>
@endforeach
</ul>

<h2>Daha Önce Gittiğim Yerler</h2>
<ul>
@foreach ($ziyaret_edildi as $yer)
<li>{{ $yer->isim }}</li>
@endforeach
</ul>
</body>
</html>

Sıkça Sorulan Sorular (SSS)

  1. Neden Nginx kullanmalıyım?

Nginx, yüksek performanslı ve hafif bir web sunucusudur. Laravel gibi modern PHP uygulamalarını hızlı bir şekilde çalıştırır.

  1. .env dosyasında hangi ayarları değiştirmeliyim?

Veritabanı kullanıcı adı, şifre ve veritabanı adı gibi bilgileri .env dosyasındaki DB_ alanlarında güncellemeniz gerekmektedir.

  1. Nginx yapılandırmasında neden public dizini kullanılıyor?

Laravel uygulamanızın kök dizini genellikle gizli dosyalar içerir. Web sunucusunun sadece public dizini üzerinden işlem yapmasını sağlamak güvenlik açısından önemlidir.


Sonuç

Laravel uygulamanızı LEMP yığını üzerinde kurarak, güçlü ve taşınabilir bir geliştirme ortamı elde ettiniz. Artık uygulamanızın veritabanı ile sorunsuz çalıştığını ve Nginx ile hızlıca sunulabilir olduğunu görebilirsiniz.