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.
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.
Alternatif olarak Symfony projelerinizi FrankenPHP ile yerel makinenizden çalıştırabilirsiniz:
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.
FrankenPHP’yi Symfony projenizin kök dizininden başlatın: frankenphp run
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.
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 .
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.
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.
Varlıklarınızı derleyin ve sıkıştırın:
php bin/console asset-map:compile
Ö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.
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');
// ...
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:
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
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ı
.dockerignoredosyaları (ör. varsayılan Symfony Docker.dockerignore)vendor/dizinini ve.envdosyalarını yok sayar. Derlemeden önce.dockerignoredosyasını ayarladığınızdan veya kaldırdığınızdan emin olun.
Derleyin:
docker build -t static-symfony-app -f static-build.Dockerfile .
İ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
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