Docker Compose İle Laravel Uygulaması Nasıl Başlatılır ve Yapılandırılır? 🐳
💡 Bu Rehberde Ne Öğreneceksiniz
Bu rehberde, Docker Compose kullanarak Laravel uygulaması için tam bir LEMP (Linux, Nginx, MySQL, PHP) geliştirme ortamı kurmayı öğreneceksiniz. Bu yöntem sayesinde sisteminize PHP, MySQL veya Nginx kurmadan Laravel projenizi birkaç komutla çalıştırabilirsiniz.
🧠 Teknik Özet
- Konu: Docker Compose ile Laravel ortamı kurmak.
- Amaç: PHP, Nginx ve MySQL servislerini tek komutla ayağa kaldırmak.
- Çözüm: Dockerfile ve docker-compose.yml yapılandırmalarıyla tam teşekküllü bir LEMP ortamı oluşturmak.
🏗️ Adım 1: Proje Dizini ve Docker Ayarlarını Hazırlama
Projeniz için bir dizin oluşturun ve içine girin:
mkdir ~/rabisu-laravel
cd ~/rabisu-laravel
Bu dizin Laravel uygulamanızın temel klasörüdür.
Kullanıcı kimliğinizi (UID) öğrenin:
echo $UID
Bu değer (genellikle 1000), konteyner içinde aynı kullanıcı kimliğiyle eşleşerek dosya izin hatalarını önler.
⚙️ Adım 2: docker-compose.yml Dosyasını Oluşturma
nano docker-compose.yml
Aşağıdaki içeriği ekleyin:
version: "3.7"
services:
app:
build:
args:
user: rabisu-dev
uid: 1000
context: ./
dockerfile: Dockerfile
image: rabisu-app
restart: unless-stopped
working_dir: /var/www/
volumes:
- ./:/var/www
networks:
- rabisu-network
networks:
rabisu-network:
driver: bridge
Bu dosya, PHP-FPM ve Composer içeren özel bir konteyner tanımlar.
🧩 Adım 3: Dockerfile Oluşturma
nano Dockerfile
İçeriği şu şekilde ayarlayın:
FROM php:8.2-fpm
ARG user
ARG uid
RUN apt-get update && apt-get install -y \
git curl libpng-dev libonig-dev libxml2-dev zip unzip
RUN apt-get clean && rm -rf /var/lib/apt/lists/* \
&& docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
RUN useradd -G www-data,root -u $uid -d /home/$user $user && \
mkdir -p /home/$user/.composer && \
chown -R $user:$user /home/$user
WORKDIR /var/www
USER $user
Bu dosya PHP uzantılarını ve Composer’ı yükler, izin sorunlarını önler.
🚀 Adım 4: Ortamı Başlatma ve Laravel Kurulumu
Ortamı çalıştırın:
docker-compose up -d
Bu komut, PHP konteynerini arka planda çalıştırır.
Yeni Laravel uygulaması oluşturun:
docker-compose exec app composer create-project laravel/laravel --prefer-dist application
Laravel dosyalarını kök dizine taşıyın:
cp -rT application .
rm -rfv application
Bu adım
.envdosyasını kök dizine taşır.
🌐 Adım 5: Nginx ve MySQL Servislerini Eklemek
Nginx yapılandırma klasörünü oluşturun
mkdir -p docker-compose/nginx
Yapılandırma dosyasını oluşturun
nano docker-compose/nginx/rabisu-laravel.conf
İçerik:
server {
listen 80;
index index.php index.html;
root /var/www/public;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
gzip_static on;
}
}
Bu dosya, PHP isteklerini app servisine yönlendirir.
docker-compose.yml dosyasını güncelleyin
nginx:
image: nginx:alpine
restart: unless-stopped
ports:
- 8000:80
volumes:
- ./:/var/www
- ./docker-compose/nginx:/etc/nginx/conf.d/
networks:
- rabisu-network
db:
image: mysql:8
restart: unless-stopped
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_USER: ${DB_USERNAME}
networks:
- rabisu-network
Bu yapı, Laravel’in Nginx ve MySQL servisleriyle entegre şekilde çalışmasını sağlar.
⚡ Adım 6: Laravel .env Dosyasını Güncelleme
nano .env
APP_URL=http://localhost:8000
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=rabisu-db
DB_USERNAME=rabisu-user
DB_PASSWORD=dev-password
DB_HOST=dbdeğeri, Laravel’in MySQL servisine bağlanmasını sağlar.
🔁 Adım 7: Ortamı Yeniden Başlatma ve Test Etme
docker-compose down
docker-compose up -d
Tarayıcıdan şu adrese gidin:
http://localhost:8000
Laravel’in karşılama ekranını görüyorsanız kurulum tamamlanmıştır.
❓ Sıkça Sorulan Sorular (SSS)
1. $UID değişkeni neden önemli?
Konteyner içi kullanıcı ile yerel kullanıcıyı eşitleyerek dosya izin hatalarını önler.
2. volumes ne işe yarar?
Yerel kodlarınızı konteynerle senkronize eder, değişiklikler anında yansır.
3. ports: 8000:80 ne anlama gelir?
Tarayıcıdan localhost:8000 isteği, konteynerin 80 portuna yönlendirilir.
4. docker-compose up --build ne işe yarar?
Görüntüyü sıfırdan yeniden oluşturur. PHP veya Dockerfile değiştiğinde kullanılır.
5. MySQL verileri kaybolur mu?
Volume eklemediyseniz konteyner silindiğinde veriler silinir. Volume eklerseniz korunur.
🏁 Sonuç
Artık Laravel için tam teşekküllü bir Docker Compose tabanlı LEMP ortamı kurmayı öğrendiniz. Bu yapı, geliştirme sürecinizi hızlandırır, ortam farklarını ortadan kaldırır ve daha güvenli bir altyapı sunar.
Rabisu Bulut platformunda kendi Laravel ortamınızı oluşturup hemen deneyebilirsiniz! 🌩️