Skip to main content

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 .env dosyası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=db değ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! 🌩️