Ana içeriğe geç

Ubuntu 22.04 Üzerinde Docker Compose ile Laravel Kurulumu 🚀


💡 Bu Rehberde Ne Öğreneceksiniz​

Bu rehberde, Docker Compose kullanarak Laravel uygulamanızı PHP-FPM, MySQL ve Nginx servislerinden oluşan izole bir ortamda çalıştırmayı öğreneceksiniz. Bu yapı, hem yerel geliştirme hem de üretim öncesi test süreçlerinde taşınabilir, hızlı ve güvenli bir çözüm sunar.


🧠 Teknik Özet​

  • Konu: Docker Compose ile Ubuntu 22.04 üzerinde Laravel geliştirme ortamı oluşturma
  • Amaç: Laravel, PHP, Nginx ve MySQL bileşenlerini konteyner tabanlı çalıştırmak
  • Avantaj: Manuel kurulum gerekmeden, izole ve taşınabilir bir geliştirme ortamı

⚙️ Adım 1: Örnek Uygulamayı İndirme​

Örnek Laravel uygulamasını indirerek başlayalım:

cd ~
curl -L https://github.com/do-community/travellist-laravel-demo/archive/tutorial-1.0.1.zip -o gezilistesi.zip
sudo apt update && sudo apt install unzip -y
unzip gezilistesi.zip
mv travellist-laravel-demo-tutorial-1.0.1 gezilistesi-demo
cd gezilistesi-demo

Bu işlemler, uygulama dosyalarını gezilistesi-demo klasörüne çıkarır.


⚙️ Adım 2: Laravel .env Dosyasını Yapılandırma​

Ortam değişkenlerini Docker konteynerlerine uygun hale getirelim.

cp .env.example .env
nano .env

Aşağıdaki değişiklikleri yapın:

APP_NAME=Gezilistesi
APP_ENV=local
APP_URL=http://localhost:8000

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=gezilistesi
DB_USERNAME=gezilistesi_user
DB_PASSWORD=sifre123

DB_HOST=db olarak ayarlamak, Laravel'in Docker içindeki MySQL servisine bağlanmasını sağlar.


🐳 Adım 3: app Servisi İçin Dockerfile Oluşturma​

app servisi, PHP-FPM ve Composer’ı barındırır.

nano Dockerfile

İçeriği ekleyin:

FROM php:7.4-fpm
ARG user
ARG uid
RUN apt-get update && apt-get install -y \
git curl libpng-dev libonig-dev libxml2-dev zip unzip \
&& 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 yapı, PHP eklentilerini yükler, Composer ekler ve Artisan komutlarının düzgün çalışması için kullanıcı izinlerini ayarlar.


🌐 Adım 4: Nginx ve MySQL Yapılandırmaları​

Nginx için yapılandırma dizini oluşturun:

mkdir -p docker-compose/nginx
nano docker-compose/nginx/gezilistesi.conf

Aşağıdaki içeriği ekleyin:

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;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
gzip_static on;
}
}

MySQL için başlangıç verilerini oluşturun:

mkdir docker-compose/mysql
nano docker-compose/mysql/init_db.sql

İçeriği ekleyin:

CREATE TABLE yerler (
id bigint unsigned AUTO_INCREMENT PRIMARY KEY,
isim varchar(255) NOT NULL,
ziyaret_edildi tinyint(1) DEFAULT 0
);
INSERT INTO yerler (isim, ziyaret_edildi)
VALUES ('İstanbul',0),('İzmir',1),('Ankara',0);

Bu tablo, uygulama açıldığında örnek verilerle otomatik oluşturulur.


🧩 Adım 5: docker-compose.yml Dosyasını Oluşturma​

Tüm servisleri aynı ağda tanımlayalım:

nano docker-compose.yml

İçeriği ekleyin:

version: "3.7"
services:
app:
build:
context: ./
dockerfile: Dockerfile
args:
user: rabisu-dev
uid: 1000
image: gezilistesi-app
container_name: gezilistesi-app
restart: unless-stopped
working_dir: /var/www/
volumes:
- ./:/var/www
networks:
- gezilistesi-net

db:
image: mysql:8.0
container_name: gezilistesi-db
restart: unless-stopped
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_USER: ${DB_USERNAME}
volumes:
- ./docker-compose/mysql:/docker-entrypoint-initdb.d
networks:
- gezilistesi-net

nginx:
image: nginx:alpine
container_name: gezilistesi-nginx
restart: unless-stopped
ports:
- 8000:80
volumes:
- ./:/var/www
- ./docker-compose/nginx:/etc/nginx/conf.d/
networks:
- gezilistesi-net

networks:
gezilistesi-net:
driver: bridge

Üç konteyner de gezilistesi-net adlı köprü ağı üzerinde birbirine bağlıdır.


🧨 Adım 6: Uygulamayı Başlatma​

Docker ortamını oluşturup başlatın:

docker-compose build app
docker-compose up -d

Durumu kontrol edin:

docker-compose ps

Bağımlılıkları kurun:

docker-compose exec app composer install

Uygulama anahtarını oluşturun:

docker-compose exec app php artisan key:generate

Artık Laravel uygulamanız çalışmaya hazır!


🌍 Adım 7: Uygulamayı Test Etme​

Tarayıcıda şu adresi açın:

http://localhost:8000

Laravel karşılama sayfası görünüyorsa, ortam başarıyla yapılandırılmış demektir. 🎉


🧠 Adım 8: Docker Compose Yönetimi​

Servisleri duraklatın:

docker-compose pause

Devam ettirin:

docker-compose unpause

Tamamen durdurun:

docker-compose down

Bu komut konteynerleri, ağları ve hacimleri siler, ancak proje dosyalarınız korunur.


❓ Sıkça Sorulan Sorular (SSS)​

1. Neden üç konteyner kullanıyoruz?

Her servis kendi ortamında çalışır, bu da güvenlik, bakım ve ölçeklenebilirlik açısından avantaj sağlar.

2. Neden bind mounts kullanılıyor?

Yerel kod değişiklikleri anında konteynerde yansır; canlı geliştirme için idealdir.

3. docker-compose exec komutu ne işe yarar?

Konteyner içine girmeden komut çalıştırmanıza yarar (örneğin composer install, php artisan migrate).

4. -d parametresi ne anlama gelir?

Servisleri arka planda çalıştırır; terminalinizi meşgul etmez.

5. Veritabanı verileri silinir mi?

Hayır, docker-compose/mysql klasöründeki veri dosyaları volume olarak korunur.


🏁 Sonuç​

Bu rehberle, Ubuntu 22.04 üzerinde Docker Compose kullanarak Laravel uygulamasını başarıyla konteynerize ettiniz. Artık tüm bileşenler (PHP, MySQL, Nginx) izole ve taşınabilir bir ortamda çalışıyor.

💡 Geliştirme süreçlerinizi hızlandırmak ve aynı yapıyı buluta taşımak için Rabisu Bulut platformunda kendi sanal sunucunuzu oluşturabilir, Laravel projenizi dakikalar içinde ayağa kaldırabilirsiniz! 🌩️