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:
.envile 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.