Laravel Uygulaması Oluşturma ve Dağıtma Rehberi
Giriş
Modern web geliştirme dünyasında, güçlü, esnek ve bakımı kolay uygulamalar oluşturmak giderek daha önemli hale gelmektedir. Bu bağlamda, PHP tabanlı framework’ler arasında Laravel, sunduğu zarif sözdizimi, zengin özellik seti ve geliştirici dostu yapısıyla öne çıkmaktadır. Laravel, Model-View-Controller (MVC) mimarisine dayalı, açık kaynaklı bir web uygulama çatısıdır. Geliştiricilerin, kimlik doğrulama, yönlendirme, veritabanı etkileşimleri ve önbellekleme gibi yaygın görevleri hızlı ve kolay bir şekilde gerçekleştirmesine olanak tanır. Bu sayede, geliştiriciler temel altyapı yerine uygulamanın benzersiz iş mantığına odaklanabilirler.
Bu kapsamlı rehberde, bir Laravel uygulamasını sıfırdan nasıl oluşturacağınızı, geliştirme sürecinde karşılaşacağınız önemli konuları ve nihayetinde uygulamanızı bir sunucuya nasıl dağıtacağınızı adım adım inceleyeceğiz. Amacımız, hem yeni başlayanlar hem de deneyimli geliştiriciler için Laravel’in gücünden tam olarak yararlanmalarını sağlayacak pratik bilgiler sunmaktır.
1. Geliştirme Ortamını Hazırlama
Bir Laravel uygulaması geliştirmeye başlamadan önce, gerekli yazılımları ve araçları içeren uygun bir geliştirme ortamı kurmanız şarttır.
1.1. Gerekli Yazılımların Kurulumu
Laravel, PHP üzerine inşa edildiği için öncelikle PHP’ye ihtiyacınız olacaktır. Laravel’in güncel sürümleri genellikle PHP 8.1 veya daha yeni bir sürümünü gerektirir.
* PHP: Sisteminizde PHP’nin kurulu olduğundan emin olun. Windows kullanıcıları için XAMPP, WAMP veya Laragon gibi paketler, Apache/Nginx, MySQL ve PHP’yi tek bir pakette sunarak kurulumu kolaylaştırır. macOS kullanıcıları Homebrew ile PHP kurabilirken, Linux kullanıcıları dağıtımlarının paket yöneticilerini (apt, yum) kullanabilirler.
* Composer: PHP bağımlılık yöneticisi olan Composer, Laravel projeleri oluşturmak ve bağımlılıklarını yönetmek için vazgeçilmezdir. Composer’ı resmi web sitesinden indirip kurabilirsiniz. Kurulumdan sonra composer komutunu terminalde çalıştırarak doğru şekilde kurulduğunu kontrol edin.
* Node.js ve NPM/Yarn: Laravel, frontend varlıklarını (CSS, JavaScript) yönetmek ve derlemek için Node.js tabanlı araçları kullanır. Node.js’i resmi web sitesinden indirerek kurabilirsiniz. Node.js ile birlikte gelen npm (Node Package Manager) veya Yarn (alternatif bir paket yöneticisi) ile frontend bağımlılıklarını yöneteceksiniz.
1.2. Veritabanı Kurulumu
Laravel, MySQL, PostgreSQL, SQLite ve SQL Server gibi birçok veritabanını destekler. Geliştirme ortamınızda bir veritabanı sunucusu kurulu olmalıdır. Çoğu geliştirici için MySQL veya PostgreSQL iyi bir başlangıç noktasıdır.
* MySQL/PostgreSQL: XAMPP, WAMP veya Laragon gibi paketler genellikle MySQL’i içerir. Ayrı olarak kurmak isterseniz, ilgili veritabanının resmi web sitesinden kurulum talimatlarını takip edebilirsiniz.
* Veritabanı Yönetim Aracı: PhpMyAdmin, Sequel Pro, DBeaver veya DataGrip gibi bir veritabanı yönetim aracı, veritabanlarınızla etkileşim kurmanızı kolaylaştıracaktır.
1.3. IDE Seçimi
İyi bir Entegre Geliştirme Ortamı (IDE), geliştirme verimliliğinizi önemli ölçüde artırır.
* VS Code: Ücretsiz, hafif ve zengin eklenti desteği sayesinde PHP ve Laravel geliştirmek için oldukça popülerdir. PHP Intelephense, Laravel Blade Snippets gibi eklentiler işinizi kolaylaştırır.
* PhpStorm: JetBrains tarafından geliştirilen PhpStorm, PHP ve Laravel geliştirme için özel olarak tasarlanmış, çok güçlü ve kapsamlı bir IDE’dir. Ücretli olmasına rağmen sunduğu özellikler (otomatik tamamlama, hata ayıklama, kod analizi) bu maliyeti karşılayabilir.
2. Laravel Uygulaması Oluşturma
Geliştirme ortamınız hazır olduğunda, yeni bir Laravel projesi oluşturmaya başlayabilirsiniz.
2.1. Yeni Bir Laravel Projesi Başlatma
Composer kullanarak yeni bir Laravel projesi oluşturmak oldukça basittir:
composer create-project laravel/laravel benim-uygulamam
cd benim-uygulamam
php artisan serve
Bu komutlar sırasıyla:
1. benim-uygulamam adında yeni bir Laravel projesi oluşturur.
2. Proje dizinine girer.
3. Laravel’in dahili geliştirme sunucusunu http://127.0.0.1:8000 adresinde başlatır. Tarayıcınızda bu adresi ziyaret ederek Laravel’in hoş geldiniz sayfasını görmelisiniz.
2.2. Temel Yapılandırma ve Veritabanı Bağlantısı
Laravel projenizin kök dizininde bulunan .env dosyası, uygulamanızın ortam değişkenlerini içerir. Bu dosya, veritabanı bağlantı bilgileri, uygulama anahtarı, e-posta ayarları gibi hassas ve ortama özgü verileri saklamak için kullanılır.
.env dosyasını açarak veritabanı bağlantı bilgilerinizi düzenlemelisiniz:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_db
DB_USERNAME=root
DB_PASSWORD=
DB_DATABASE, DB_USERNAME ve DB_PASSWORD değerlerini kendi veritabanı sunucunuzun ayarlarına göre güncelleyin. laravel_db adında bir veritabanını manuel olarak oluşturmanız gerekecektir.
2.3. Model, Migration ve Controller Oluşturma
Laravel, MVC mimarisini benimser.
* Model: Veritabanındaki tablolarla etkileşimi sağlar.
* View: Kullanıcı arayüzünü oluşturur.
* Controller: Model ve View arasındaki iletişimi yönetir, iş mantığını barındırır.
Örnek olarak, bir Post (Gönderi) modeli oluşturalım:
php artisan make:model Post -m
-m bayrağı, Post modeliyle birlikte otomatik olarak bir veritabanı migration dosyası da oluşturur. Migration dosyaları, veritabanı şemasını programatik olarak yönetmenizi sağlar. database/migrations dizininde oluşan migration dosyasını açın ve up metoduna posts tablosunun sütunlarını ekleyin:
// database/migrations/XXXX_XX_XX_XXXXXX_create_posts_table.php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('content');
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('posts');
}
};
Veritabanı tablosunu oluşturmak için migration’ı çalıştırın:
php artisan migrate
Şimdi, Post modeli için bir controller oluşturalım. Kaynak odaklı (resourceful) bir controller, CRUD (Create, Read, Update, Delete) işlemleri için gerekli metodları otomatik olarak oluşturur:
php artisan make:controller PostController --resource
Bu komut, app/Http/Controllers/PostController.php dosyasını oluşturacaktır.
2.4. Rota Tanımlama ve Blade Şablonları
Kullanıcıların uygulamanızın farklı bölümlerine erişmesini sağlamak için rotalar tanımlamanız gerekir. Rotlar, routes/web.php dosyasında tanımlanır.
PostController için kaynak odaklı bir rota tanımlayalım:
// routes/web.php
use App\Http\Controllers\PostController;
use Illuminate\Support\Facades\Route;
Route::resource('posts', PostController::class);
Bu tek satır, posts kaynağı için index, create, store, show, edit, update ve destroy gibi yedi farklı rotayı otomatik olarak tanımlar.
Laravel, View’lar için güçlü Blade şablon motorunu kullanır. Blade, PHP kodunu HTML ile sorunsuz bir şekilde birleştirmenizi sağlar. resources/views dizininde yeni bir posts klasörü oluşturun ve içine index.blade.php, create.blade.php, show.blade.php ve edit.blade.php gibi dosyalar ekleyin.
Örnek bir index.blade.php dosyası:
Gönderiler
Yeni Gönderi Ekle
@foreach ($posts as $post)
-
{{ $post->title }}
Düzenle
@endforeach
2.5. Örnek Bir CRUD Akışı
Yukarıdaki adımlarla temel bir CRUD (Create, Read, Update, Delete) uygulamasının iskeletini oluşturduk. Şimdi PostController içindeki metodları doldurarak bu akışı tamamlayalım:
// app/Http/Controllers/PostController.php
namespace App\Http\Controllers;
use App\Models\Post;
use Illuminate\Http\Request;
class PostController extends Controller
{
public function index()
{
$posts = Post::all(); // Tüm gönderileri veritabanından çek
return view('posts.index', compact('posts')); // View'a gönder
}
public function create()
{
return view('posts.create'); // Yeni gönderi oluşturma formunu göster
}
public function store(Request $request)
{
// Gelen verileri doğrula
$request->validate([
'title' => 'required|max:255',
'content' => 'required',
]);
Post::create($request->all()); // Yeni gönderiyi oluştur ve kaydet
return redirect()->route('posts.index')->with('success', 'Gönderi başarıyla oluşturuldu!');
}
public function show(Post $post)
{
return view('posts.show', compact('post')); // Belirli bir gönderiyi göster
}
public function edit(Post $post)
{
return view('posts.edit', compact('post')); // Gönderiyi düzenleme formunu göster
}
public function update(Request $request, Post $post)
{
$request->validate([
'title' => 'required|max:255',
'content' => 'required',
]);
$post->update($request->all()); // Gönderiyi güncelle
return redirect()->route('posts.index')->with('success', 'Gönderi başarıyla güncellendi!');
}
public function destroy(Post $post)
{
$post->delete(); // Gönderiyi sil
return redirect()->route('posts.index')->with('success', 'Gönderi başarıyla silindi!');
}
}
Bu kod parçacığı, Laravel’in Eloquent ORM’sini kullanarak veritabanı etkileşimlerini, Request objesini kullanarak gelen verileri ve redirect() helper’ını kullanarak yönlendirmeleri nasıl yönettiğini göstermektedir. Formlar için CSRF (Cross-Site Request Forgery) korumasını sağlamak amacıyla @csrf direktifini kullanmayı unutmayın.
3. Laravel Geliştirme Sürecinde Önemli Konular
Laravel, sadece temel CRUD işlemleri için değil, karmaşık uygulamalar geliştirmek için de birçok güçlü özellik sunar.
3.1. Eloquent ORM ve Veritabanı İşlemleri
Eloquent ORM (Object-Relational Mapper), veritabanı tablolarınızı PHP sınıfları olarak temsil etmenizi sağlar. Bu, SQL sorguları yazmak yerine nesne odaklı bir yaklaşımla veritabanı etkileşimi kurmanıza olanak tanır.
* İlişkiler: Eloquent, hasOne, hasMany, belongsTo, belongsToMany gibi yöntemlerle modeller arası ilişkileri tanımlamanıza olanak tanır.
* Sorgu Oluşturucu: Eloquent’in yanı sıra, Laravel’in sorgu oluşturucusu da ham SQL yazmadan karmaşık sorgular oluşturmak için güçlü bir araçtır.
* Seeders: Veritabanınızı test verileriyle doldurmak için seeders kullanabilirsiniz. php artisan make:seeder PostSeeder ile seeder oluşturulur, php artisan db:seed ile çalıştırılır.
3.2. Kimlik Doğrulama (Authentication) ve Yetkilendirme (Authorization)
Laravel, kimlik doğrulama ve yetkilendirme süreçlerini kolaylaştıran yerleşik özelliklere sahiptir.
* Laravel Breeze/Jetstream: Hızlıca bir kimlik doğrulama iskelesi (kayıt, giriş, şifre sıfırlama, e-posta doğrulama) kurmak için Laravel Breeze veya Jetstream paketlerini kullanabilirsiniz.
* Gates ve Policies: Yetkilendirme için Laravel, Gates (basit izin kontrolleri) ve Policies (bir modele özgü izin kontrolleri) sunar. Bu yapılar, kullanıcıların belirli eylemleri gerçekleştirme yetkilerini tanımlamanızı sağlar.
3.3. Form İşleme ve Validasyon
Laravel, formlardan gelen verileri doğrulamak için kapsamlı ve kullanımı kolay bir validasyon sistemi sunar.
* Request Nesnesi: Gelen tüm HTTP istek verilerine Illuminate\Http\Request nesnesi aracılığıyla erişilir.
* validate() Metodu: Controller’da request()->validate() veya $request->validate() metodunu kullanarak verileri kolayca doğrulayabilirsiniz. Başarısız olursa otomatik olarak hata mesajlarıyla birlikte önceki sayfaya yönlendirilir.
* Form Request Sınıfları: Daha karmaşık validasyon kuralları ve yetkilendirme kontrolleri için özel Form Request sınıfları oluşturabilirsiniz (php artisan make:request StorePostRequest).
3.4. Frontend Geliştirme (Vite, Tailwind CSS, Alpine.js)
Laravel’in modern uygulamalar için önerdiği frontend stack’i (genellikle “TALL” stack olarak adlandırılır: Tailwind CSS, Alpine.js, Livewire, Laravel) oldukça popülerdir.
* Vite: Laravel Mix’in yerini alan Vite, JavaScript ve CSS varlıklarını derlemek ve optimize etmek için kullanılan hızlı bir build aracıdır.
* Tailwind CSS: Utility-first bir CSS framework’üdür. Hızlı ve özelleştirilebilir arayüzler oluşturmanızı sağlar.
* Alpine.js: JavaScript’in jQuery’ye benzer, hafif bir alternatifidir. Minimalist bir yaklaşımla reaktif arayüzler oluşturmanıza olanak tanır.
* Livewire: PHP ile dinamik, reaktif arayüzler oluşturmanızı sağlayan tam yığın bir framework’tür. JavaScript yazmaya gerek kalmadan zengin kullanıcı deneyimleri sunar.
3.5. Test Etme
Laravel, uygulamanızın güvenilirliğini sağlamak için kapsamlı bir test altyapısı sunar.
* PHPUnit: Laravel, kutudan çıktığı gibi PHPUnit ile entegre gelir. Birim testleri, özellik testleri ve entegrasyon testleri yazabilirsiniz.
* Dusk: Laravel Dusk, tarayıcı otomasyonu ve uçtan uca testler için bir API sağlar. Gerçek bir tarayıcıda uygulamanızla etkileşim kurarak testler yazmanıza olanak tanır.
3.6. Önbellekleme, Kuyruklar ve Olaylar
* Önbellekleme (Caching): Laravel, Redis, Memcached veya dosya tabanlı önbellekleme sürücülerini destekler. Sık erişilen verileri önbelleğe alarak uygulamanızın performansını artırabilirsiniz.
* Kuyruklar (Queues): E-posta gönderme, resim işleme gibi zaman alıcı görevleri arka planda asenkron olarak çalıştırmak için kuyrukları kullanabilirsiniz. Bu, web isteklerinin hızlı bir şekilde yanıtlanmasını sağlar.
* Olaylar (Events) ve Dinleyiciler (Listeners): Uygulamanızda belirli olaylar (örneğin, bir kullanıcı kaydolduğunda) tanımlayabilir ve bu olaylar tetiklendiğinde çalışacak dinleyiciler oluşturabilirsiniz. Bu, uygulamanızın farklı bölümleri arasında ayrışmış bir iletişim sağlar.
4. Laravel Uygulamasını Dağıtma (Deployment)
Uygulamanız geliştirme aşamasını tamamladığında, onu canlı bir sunucuya dağıtmanız gerekir. Dağıtım, geliştirme ortamından farklı olarak bazı özel adımlar gerektirir.
4.1. Sunucu Seçimi ve Hazırlığı
* VPS (Virtual Private Server): DigitalOcean, AWS EC2, Linode, Vultr gibi sağlayıcılardan sanal özel sunucu kiralayabilirsiniz. Bu, size sunucu üzerinde tam kontrol sağlar.
* PaaS (Platform as a Service): Laravel Forge, Envoyer gibi araçlar, sunucu yönetimi ve dağıtım süreçlerini otomatize ederek işinizi büyük ölçüde kolaylaştırır. Heroku, Vercel (frontend için) gibi genel PaaS çözümleri de kullanılabilir.
* Paylaşımlı Hosting: Bazı paylaşımlı hosting sağlayıcıları Laravel’i desteklese de, genellikle performans ve esneklik açısından VPS veya PaaS çözümleri tercih edilir.
Sunucunuzda PHP, Composer, Node.js, NPM ve bir veritabanı sunucusu (MySQL/PostgreSQL) kurulu ve yapılandırılmış olmalıdır. Ayrıca, bir web sunucusu (Nginx veya Apache) da gereklidir.
4.2. Ortam Değişkenleri ve Güvenlik
Dağıtım ortamında .env dosyası, geliştirme ortamından farklı değerler içermelidir. Özellikle APP_ENV=production olarak ayarlanmalı ve APP_DEBUG=false olmalıdır. Veritabanı kimlik bilgileri, API anahtarları gibi hassas bilgileri doğru ve güvenli bir şekilde yapılandırın. .env dosyasını asla versiyon kontrol sisteminize (Git) yüklemeyin.
4.3. Bağımlılıkların Kurulumu ve Veritabanı Migrasyonları
Uygulama kodunuzu sunucuya aktardıktan sonra (Git ile çekmek en yaygın yöntemdir):
1. Composer Bağımlılıkları: Proje dizininde composer install --optimize-autoloader --no-dev komutunu çalıştırarak tüm PHP bağımlılıklarını kurun. --no-dev bayrağı sadece üretim için gerekli bağımlılıkları kurar.
2. Node.js Bağımlılıkları: Eğer frontend varlıklarınız varsa, npm install veya yarn install komutunu çalıştırın.
3. Frontend Varlıklarını Derleme: npm run build veya yarn build komutunu çalıştırarak JavaScript ve CSS dosyalarını derleyin ve optimize edin.
4. Veritabanı Migrasyonları: Veritabanı şemasını oluşturmak veya güncellemek için php artisan migrate --force komutunu çalıştırın. --force bayrağı, üretim ortamında migration’ların çalıştırılması için onay ister.
5. Önbellek Temizleme ve Optimizasyon: Laravel’in önbelleğini temizlemek ve uygulama performansını optimize etmek için aşağıdaki komutları çalıştırın:
php artisan optimize:clear
php artisan config:cache
php artisan route:cache
php artisan view:cache
4.4. Web Sunucusu Yapılandırması (Nginx/Apache)
Web sunucunuzu (Nginx veya Apache) Laravel uygulamanızı sunacak şekilde yapılandırmanız gerekir. Önemli olan, web sunucusunun belge kökünü (document root) Laravel projenizin public dizinine işaret etmesidir.
Nginx Örneği:
server {
listen 80;
server_name your_domain.com www.your_domain.com;
root /var/www/html/benim-uygulamam/public; # Proje yolunuza göre ayarlayın
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
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 soket yolunuza göre ayarlayın
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, tüm istekleri public/index.php dosyasına yönlendirir ve Laravel’in yönlendirme mekanizmasını kullanmasını sağlar.
4.5. SSL/TLS Kurulumu
Uygulamanızın güvenliği için HTTPS kullanmak zorunludur. Let’s Encrypt gibi ücretsiz sertifika sağlayıcıları ile kolayca SSL/TLS sertifikası kurabilirsiniz. Certbot aracı, bu süreci otomatikleştirir.
4.6. Sürekli Entegrasyon ve Dağıtım (CI/CD)
Daha büyük projelerde veya sık güncelleme yapılan uygulamalarda, CI/CD boru hatları (pipelines) dağıtım sürecini otomatikleştirir.
* GitHub Actions, GitLab CI/CD, Bitbucket Pipelines: Bu araçlar, kodunuzu bir depoya ittiğinizde otomatik olarak testleri çalıştırma, frontend varlıklarını derleme ve uygulamayı sunucuya dağıtma gibi görevleri gerçekleştirebilir. Bu, hataları erken yakalamanıza ve dağıtım sürecini hızlandırmanıza yardımcı olur.
4.7. Uygulama Bakımı ve İzleme
Uygulamanız canlıya alındıktan sonra da bakım ve izleme önemlidir:
* Loglar: Laravel’in storage/logs dizinindeki log dosyalarını düzenli olarak kontrol edin. Hata ayıklama ve sorun giderme için kritik öneme sahiptirler.
* Sunucu Kaynakları: CPU, bellek ve disk kullanımı gibi sunucu kaynaklarını izleyin. Yetersiz kaynaklar performans sorunlarına yol açabilir.
* Güvenlik Güncellemeleri: PHP, Laravel ve diğer tüm bağımlılıklarınızı düzenli olarak güncel tutun. Güvenlik açıkları, uygulamanızı riske atabilir.
* Yedeklemeler: Veritabanı ve uygulama dosyalarınızın düzenli yedeklerini aldığınızdan emin olun.
Sonuç
Bu rehberde, bir Laravel uygulamasının temel kurulumundan, geliştirme sürecindeki önemli konulara ve nihayetinde canlı bir sunucuya dağıtımına kadar olan süreci detaylı bir şekilde ele aldık. Laravel’in sunduğu güçlü araçlar ve zarif yapısıyla, modern ve ölçeklenebilir web uygulamaları geliştirmek artık çok daha erişilebilir.
Unutmayın ki web geliştirme sürekli evrilen bir alandır. Laravel’in dokümantasyonunu düzenli olarak takip etmek, toplulukla etkileşimde bulunmak ve yeni teknolojileri denemek, becerilerinizi sürekli güncel tutmanızı sağlayacaktır. Bu rehber, Laravel yolculuğunuzda sağlam bir başlangıç noktası sunmayı amaçlamaktadır. Şimdi, bu bilgileri kullanarak kendi harika Laravel uygulamanızı oluşturmaya ve dünyaya sunmaya hazırsınız!