İki deploy yolu
Bir Laravel uygulaması, bir Git deposu ve bir cdn.com.tr hesabı gerekir. İki yol var, istediğini seç. Yönetilen PHP platformu Laravel uygulamanı modern bir PHP 8 runtime'ında yönetilen veritabanı, Redis, otomatik SSL ve WAF ile çalıştırır — Dockerfile yazmadan. Container yolu tam kontrol verir: bir Dockerfile sağlarsın, platform onu derleyip yönetilen bir container app olarak çalıştırır. İkisi de CDN edge arkasındadır. Bu rehber container yolunu detaylı anlatır ve daha basit olduğu yerde yönetilen platforma yönlendirir.
Yapılandırma ve sırlar
.env dosyanı imaja gömme veya sırları Git'e commit'leme. Bunun yerine Laravel yapılandırmanı platformda ortam değişkeni (ve secret) olarak ayarla ki aynı imaj üretimde güvenle çalışsın. En azından uygulama anahtarını, ortamı ve yönetilen veritabanı ile Redis bağlantılarını ayarlarsın.
Platformda ayarlanacak ortam değerleri
APP_ENV=production
APP_KEY=base64:... # php artisan key:generate --show
APP_DEBUG=false
APP_URL=https://app.example.com
DB_CONNECTION=mysql
DB_HOST=<managed-db-host>
DB_DATABASE=<db>
DB_USERNAME=<user>
DB_PASSWORD=<secret>
CACHE_STORE=redis
SESSION_DRIVER=redis
REDIS_HOST=<managed-redis-host>
Bir Dockerfile ekle
Deponun köküne bir Dockerfile ekle. Bu örnek Composer bağımlılıklarını kurar ve uygulamayı 8000 portunda sunar. Laravel'in yerleşik sunucusu örneği basit tutar; yüksek trafik için son satırı Laravel Octane (FrankenPHP veya Swoole) ile değiştir ya da yönetilen PHP platformunu kullan.
Dockerfile
FROM php:8.2-cli
# Laravel'in sik kullandigi PHP eklentileri
RUN apt-get update && apt-get install -y libzip-dev \
&& docker-php-ext-install pdo_mysql zip opcache
# Composer
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
WORKDIR /app
COPY . .
RUN composer install --no-dev --optimize-autoloader --no-interaction
EXPOSE 8000
CMD ["php", "artisan", "serve", "--host=0.0.0.0", "--port=8000"]
Git ile deploy
cdn.com.tr panelinde bir container app oluştur ve Git deponu bağla. Platform Dockerfile'ını okur, imajı derler ve container'ı çalıştırır. Ondan sonra deploy sadece branch'ine push etmektir — her push taze bir imaj derler ve sıfır kesintiyle yayına alır.
Bir değişikliği yayına al
git add .
git commit -m "Fatura sayfasini ekle"
git push origin main
# cdn.com.tr imaji derler ve otomatik yayina alir
Yönetilen veritabanı, Redis ve migration'lar
Yönetilen bir veritabanı ve Redis'i birer cdnctl komutuyla ekle — bağlantıyı uygulamana ortam değişkeni olarak bağlarlar, yani 2. adımdaki .env değerleri senin için ayarlanır. Redis Laravel'e hızlı bir cache ve session deposu verir; yönetilen veritabanı yedeklenir ve uygulamadan erişilebilir. Sonra şemanın senkron kalması için migration'larını deploy'un parçası olarak buna karşı çalıştır.
cdnctl accounts use <account_uuid>
cdnctl container addons enable-database --app <app_uuid> --url-scheme mysql
cdnctl container addons enable-redis --app <app_uuid> --env-prefix REDIS
# migration'lari yonetilen veritabanina karsi calistir
php artisan migrate --force
Alan adı, HTTPS ve edge
Alan adını uygulamaya yönlendir; cdn.com.tr SSL'i otomatik alır ve yeniler. Laravel uygulaman artık CDN edge arkasında çalışır: statik varlıklar önbelleklenip ziyaretçilere yakın sunulur, WAF kötü niyetli trafiği filtreler ve ani trafik edge'de karşılanır. Hiç Dockerfile yönetmek istemiyorsan yönetilen PHP platformu aynı sonucu verir — PHP 8 runtime, yönetilen DB ve Redis, otomatik HTTPS ve WAF — imaj derlemeden.
İyi uyan senaryolar
Laravel'i yönetilen veritabanı ve Redis, otomatik HTTPS ve WAF ile, doğrudan Git'ten deploy ederek çalıştır.
Eski bir PHP uygulamasını yeniden mimarlamadan, yönetilen platformda PHP 8'e taşı; CDN ve WAF arkasına al.
Laravel API route'larını healthcheck, secret ve önündeki edge yönlendirmesiyle yönetilen bir container olarak sun.
Laravel deploy — sık sorulanlar
Docker gerekli mi, yoksa yönetilen platformu mu kullanayım?
İkisi de olur. Yönetilen PHP platformu Laravel'i Dockerfile olmadan çalıştırır — yönetilen veritabanı, Redis, HTTPS ve WAF ile bir PHP 8 runtime'ı alırsın. Container yolu imaj üzerinde tam kontrol isteyen ekipler içindir; ikisi de edge arkasında çalışır.
Queue'lar ve scheduler nerede çalışır?
Laravel scheduler'ını ve queue worker'larını uygulamanın yanında zamanlanmış veya uzun-çalışan işler olarak, aynı yönetilen Redis/veritabanına yönlendirilmiş şekilde çalıştır. Sırları ortam değişkenlerinde tut ki her süreç tek bir yapılandırmayı paylaşsın.
Deploy'da veritabanı migration'ları nasıl çalışır?
Deploy'un parçası olarak yönetilen veritabanına karşı 'php artisan migrate --force' çalıştır. Başarısız bir build önceki sürümü ayakta tuttuğu için ileri doğru güvenle geçer ve şeman kodla senkron kalır.