Bu sayfa topluluk tarafından çevrilmiştir ve güncel olmayabilir. Referans versiyonuna (İngilizce) bakın.

Bu sayfa topluluk tarafından çevrilmiştir ve güncel olmayabilir. Referans versiyonuna (İngilizce) bakın.

Bu sayfa topluluk tarafından çevrilmiştir ve güncel olmayabilir. Referans versiyonuna (İngilizce) bakın.

Tarafından desteklenmektedir
Symfony

Symfony

# Symfony’yi Symfony Docker ile çalıştırma

Symfony projeleri için FrankenPHP’nin yazarı tarafından bakımı yapılan resmi Symfony Docker kurulumu olan Symfony Docker‘ı öneririz. FrankenPHP, otomatik HTTPS, HTTP/2, HTTP/3 ve worker modu desteğiyle kutudan çıkar çıkmaz eksiksiz bir Docker tabanlı ortam sağlar.

# Symfony’yi FrankenPHP ile yerel kurma

Alternatif olarak Symfony projelerinizi FrankenPHP ile yerel makinenizden çalıştırabilirsiniz:

  1. FrankenPHP’yi kurun

  2. Aşağıdaki yapılandırmayı Symfony projenizin kök dizinindeki Caddyfile adlı bir dosyaya ekleyin:

    # Caddyfile
    # Sunucunuzun alan adı
    localhost
    
    root public/
    php_server {
    	# İsteğe bağlı: daha iyi performans için worker modunu etkinleştirin
    	worker ./public/index.php
    }
    

    Daha fazla iyileştirme için performans belgelerine bakın.

  3. FrankenPHP’yi Symfony projenizin kök dizininden başlatın: frankenphp run

# FrankenPHP ile Symfony worker modu

Symfony 7.4’ten itibaren FrankenPHP worker modu yerel olarak desteklenir.

Daha eski sürümler için PHP Runtime FrankenPHP paketini kurun:

composer require runtime/frankenphp-symfony

FrankenPHP Symfony Runtime’ını kullanmak için APP_RUNTIME ortam değişkenini tanımlayarak uygulama sunucunuzu başlatın:

docker run \
    -e FRANKENPHP_CONFIG="worker ./public/index.php" \
    -e APP_RUNTIME=Runtime\\FrankenPhpSymfony\\Runtime \
    -v $PWD:/app \
    -p 80:80 -p 443:443 -p 443:443/udp \
    dunglas/frankenphp

Worker modu hakkında daha fazla bilgi edinin.

# Worker uyumluluğunu denetleme

Igor PHP, Symfony projelerini üretimde sorun çıkmadan önce durum sızıntılarına karşı tarayan statik bir linter’dır: ResetInterface eksik servisler, sıfırlanmayan durumlu özellikler, değiştirilebilir yerel static’ler, exit()/die() çağrıları ve süper küresel yazmaları. Hem uygulama kodunuzu hem vendor/ içinde bildirilen servisleri denetler.

composer require --dev igor-php/igor-php
vendor/bin/igor-php .

# Symfony için sıcak yeniden yükleme

Sıcak yeniden yükleme Symfony Docker içinde varsayılan olarak etkindir.

Sıcak yeniden yükleme özelliğini Symfony Docker olmadan kullanmak için Mercure‘ü etkinleştirin ve Caddyfile‘ınızdaki php_server yönergesine hot_reload alt yönergesini ekleyin:

localhost

mercure {
	anonymous
}

root public/
php_server {
	hot_reload
	worker ./public/index.php
}

Ardından aşağıdaki kodu templates/base.html.twig dosyanıza ekleyin:

{# templates/base.html.twig #}
{% if app.request.server.has('FRANKENPHP_HOT_RELOAD') %}
    <meta name="frankenphp-hot-reload:url" content="{{ app.request.server.get('FRANKENPHP_HOT_RELOAD') }}">
    <script src="https://cdn.jsdelivr.net/npm/idiomorph/dist/idiomorph.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/frankenphp-hot-reload/+esm" type="module"></script>
{% endif %}

Son olarak Symfony projenizin kök dizininden frankenphp run çalıştırın.

# Varlıkları önceden sıkıştırma

Symfony’nin AssetMapper bileşeni dağıtım sırasında varlıkları Brotli ve Zstandard ile önceden sıkıştırabilir. FrankenPHP (Caddy’nin file_server‘ı aracılığıyla) bu önceden sıkıştırılmış dosyaları doğrudan sunabilir ve anlık sıkıştırma yükünü ortadan kaldırır.

  1. Varlıklarınızı derleyin ve sıkıştırın:

    php bin/console asset-map:compile
    
  2. Önceden sıkıştırılmış varlıkları sunmak için Caddyfile‘ınızı güncelleyin:

    # Caddyfile
    localhost
    
    @assets path /assets/*
    file_server @assets {
    	precompressed zstd br gzip
    }
    
    root public/
    php_server {
    	worker ./public/index.php
    }
    

precompressed yönergesi Caddy’ye istenen dosyanın önceden sıkıştırılmış sürümlerini (ör. app.css.zst, app.css.br) aramasını ve istemci destekliyorsa bunları doğrudan sunmasını söyler.

# Büyük statik dosyaları sunma (X-Sendfile)

FrankenPHP, PHP kodunu çalıştırdıktan sonra büyük statik dosyaları verimli sunmayı destekler (erişim denetimi, istatistikler vb. için).

Symfony HttpFoundation bu özelliği yerel olarak destekler. Caddyfile‘ınızı yapılandırdıktan sonra X-Accel-Redirect başlığı için doğru değeri otomatik belirler ve yanıta ekler:

use Symfony\Component\HttpFoundation\BinaryFileResponse;

BinaryFileResponse::trustXSendfileTypeHeader();
$response = new BinaryFileResponse(__DIR__.'/../private-files/file.txt');

// ...

# Symfony uygulamalarını bağımsız ikili dosyalar olarak dağıtma

FrankenPHP’nin uygulama gömme özelliğini kullanarak Symfony uygulamalarını bağımsız ikili dosyalar olarak dağıtmak mümkündür.

Symfony uygulamanızı hazırlamak ve paketlemek için şu adımları izleyin:

  1. Uygulamanızı hazırlayın:

    # .git/ vb. dosyalarından kurtulmak için projeyi dışa aktarın
    mkdir $TMPDIR/my-prepared-app
    git archive HEAD | tar -x -C $TMPDIR/my-prepared-app
    cd $TMPDIR/my-prepared-app
    
    # Uygun ortam değişkenlerini ayarlayın
    echo APP_ENV=prod > .env.local
    echo APP_DEBUG=0 >> .env.local
    
    # Yer kazanmak için testleri ve diğer gereksiz dosyaları kaldırın
    # Alternatif olarak bu dosyaları .gitattributes dosyanızda export-ignore özniteliğiyle ekleyin
    rm -Rf tests/
    
    # Bağımlılıkları yükleyin
    composer install --ignore-platform-reqs --no-dev -a
    
    # .env'yi optimize edin
    composer dump-env prod
    
  2. Uygulamanızın deposunda static-build.Dockerfile adlı bir dosya oluşturun:

    # static-build.Dockerfile
    FROM --platform=linux/amd64 dunglas/frankenphp:static-builder-gnu
    # İkili dosyayı musl-libc sistemlerinde çalıştırmayı düşünüyorsanız bunun yerine static-builder-musl kullanın
    
    # Uygulamanızı kopyalayın
    WORKDIR /go/src/app/dist/app
    COPY . .
    
    # Statik ikili dosyayı derleyin
    WORKDIR /go/src/app/
    RUN EMBED=dist/app/ ./build-static.sh
    

    Caution

    Bazı .dockerignore dosyaları (ör. varsayılan Symfony Docker .dockerignore) vendor/ dizinini ve .env dosyalarını yok sayar. Derlemeden önce .dockerignore dosyasını ayarladığınızdan veya kaldırdığınızdan emin olun.

  3. Derleyin:

    docker build -t static-symfony-app -f static-build.Dockerfile .
    
  4. İkili dosyayı çıkarın:

    docker cp $(docker create --name static-symfony-app-tmp static-symfony-app):/go/src/app/dist/frankenphp-linux-x86_64 my-app ; docker rm static-symfony-app-tmp
    
  5. Sunucuyu başlatın:

    ./my-app php-server
    

Kullanılabilir seçenekler ve diğer işletim sistemleri için ikili dosya derleme hakkında daha fazla bilgiyi uygulama gömme belgelerinde bulabilirsiniz.

Bu sayfayı düzenleyin