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-demoklasö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=dbolarak 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-netadlı 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! 🌩️