Ana içeriğe geç

Laravel Docker Kurulumu: Ubuntu 22.04 Üzerinde Docker Compose ile Laravel Ortamı

Bu rehberde ne öğreneceksiniz?

Bu rehber, Laravel uygulamasını Docker Compose ile çalıştırmayı öğretir.
Amaç, PHP, Nginx ve MySQL servislerini izole konteynerlerde yönetmektir.
Geliştirme ve üretim ortamlarını tutarlı hale getirmeyi öğrenirsiniz.


🧠 Teknik Özet

Bu rehber, Ubuntu 22.04 üzerinde Docker Compose ile Laravel kurulumu anlatır.
Amaç, “makinemde çalışıyor” sorununu ortadan kaldırmaktır.
Adımlar; proje indirme, .env ayarı, Dockerfile ve servis tanımlarıdır.


Neden Docker ile Laravel?

Docker, uygulamayı bağımlılıklarıyla birlikte çalıştırır.
Her geliştirici aynı ortamı kullanır.
Bakım, güncelleme ve taşıma süreçleri kolaylaşır.

Temel Kazanımlar

  • Servis ayrımı: PHP, MySQL ve Nginx ayrı konteynerlerde çalışır.
  • Esnek yapılandırma: .env ile ortam ayarları yönetilir.
  • Tekrarlanabilir kurulum: Aynı yapı her ortamda çalışır.
  • Geliştirme uyumu: Dosyalar host ile senkron kalır.

Ön Koşullar

  • Ubuntu 22.04 yüklü yerel veya uzak sunucu
  • Sudo yetkisine sahip kullanıcı
  • Docker kurulu
  • Docker Compose kurulu

1️⃣ Demo Laravel Projesini Alma

cd ~
curl -L https://github.com/do-community/travellist-laravel-demo/archive/tutorial-1.0.1.zip -o travellist.zip
  • Bu komut, örnek Laravel projesini indirir.


sudo apt update && sudo apt install unzip
unzip travellist.zip
mv travellist-laravel-demo-tutorial-1.0.1 travellist-demo
cd travellist-demo
  • Bu adımlar projeyi hazır hale getirir.

2️⃣ .env Dosyasını Yapılandırma


cp .env.example .env
nano .env
  • Bu komut, ortam yapılandırma dosyasını oluşturur.

Aşağıdaki alanları düzenleyin:


APP_ENV=dev
APP_DEBUG=true
APP_URL=http://localhost:8000

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=travellist
DB_USERNAME=travellist_user
DB_PASSWORD=password
  • Bu ayarlar, veritabanının Docker içinden erişilmesini sağlar.

3️⃣ Dockerfile Oluşturma


nano Dockerfile
  • Bu dosya, PHP-FPM tabanlı özel imaj oluşturur.


FROM php:7.4-fpm

ARG user
ARG uid

RUN apt-get update && apt-get install -y \
git curl zip unzip libpng-dev libonig-dev libxml2-dev \
&& docker-php-ext-install pdo_mysql mbstring bcmath gd

COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

RUN useradd -G www-data,root -u $uid -d /home/$user $user
WORKDIR /var/www
USER $user
  • Bu yapı, Laravel için gerekli PHP ortamını hazırlar.

4️⃣ Nginx ve MySQL Yapılandırmaları


mkdir -p docker-compose/nginx docker-compose/mysql
  • Bu dizinler, servis ayarlarını içerir.

Nginx Konfigürasyonu


nano docker-compose/nginx/travellist.conf

server {
listen 80;
root /var/www/public;
index index.php;

location ~ \.php$ {
fastcgi_pass app:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

location / {
try_files $uri $uri/ /index.php?$query_string;
}
}
  • Bu yapı, PHP isteklerini app servisine yönlendirir.

5️⃣ docker-compose.yml Oluşturma


nano docker-compose.yml

version: "3.9"

services:
app:
build:
args:
user: devuser
uid: 1000
context: .
volumes:
- ./:/var/www
networks:
- travellist

db:
image: mysql:8.0
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_USER: ${DB_USERNAME}
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
volumes:
- ./docker-compose/mysql:/docker-entrypoint-initdb.d
networks:
- travellist

nginx:
image: nginx:alpine
ports:
- "8000:80"
volumes:
- ./:/var/www
- ./docker-compose/nginx:/etc/nginx/conf.d
networks:
- travellist

networks:
travellist:
driver: bridge
  • Bu dosya, üç servisli Laravel ortamını tanımlar.

6️⃣ Ortamı Çalıştırma


docker compose build app
docker compose up -d
  • Bu komutlar, imajı oluşturur ve servisleri başlatır.


docker compose ps
  • Bu komut, çalışan servisleri listeler.

7️⃣ Laravel Kurulumunu Tamamlama


docker compose exec app composer install
  • Bu komut, PHP bağımlılıklarını kurar.


docker compose exec app php artisan key:generate
  • Bu komut, Laravel uygulama anahtarını üretir.

Tarayıcıdan erişin:


http://localhost:8000

Dosya İzinleri Sorunlarını Giderme


docker compose exec app chown -R devuser:devuser storage bootstrap/cache
docker compose exec app chmod -R 775 storage bootstrap/cache
  • Bu komutlar, Laravel yazılabilir dizinlerini düzeltir.

docker-compose.override.yml Ne İşe Yarar?

  • Override dosyası, ortama özel ayarları ayırır.
  • Geliştirme ve üretim yapılarını temiz tutar.
  • Yerel ortamda otomatik uygulanır.

Sıkça Sorulan Sorular (SSS)

1. Composer host makinede gerekli mi? Hayır. Composer konteyner içinde çalıştırılır.

2. Migration nasıl çalıştırılır? docker compose exec app php artisan migrate

3. Yeni PHP eklentisi eklenebilir mi? Evet. Dockerfile güncellenip imaj yeniden build edilir.

4. HTTPS nasıl eklenir? Nginx yapılandırması veya Traefik kullanılabilir.

5. Aynı yapı prod ortamda kullanılır mı? Evet. Bind mount yerine imaj bazlı çalıştırılır.


Sonuç

Docker Compose ile Laravel, taşınabilir ve tutarlı çalışır. Yerel kurulum karmaşası ortadan kalkar. Aynı yapı geliştirme ve üretimde kullanılabilir. Dilerseniz bu yapıyı Rabisu Bulut platformunda denebilir ve projelerinizi uçurabilirsiniz.