PHP kütüphanesinin yerel kurulumunu kullanmak yerine, harika static-php-cli projesi sayesinde FrankenPHP’nin statik bir yapısını oluşturmak mümkündür (adına rağmen, bu proje sadece CLI’yi değil, tüm SAPI’leri destekler).
Bu yöntemle, tek, taşınabilir bir ikili PHP yorumlayıcısını, Caddy web sunucusunu ve FrankenPHP’yi içerecektir!
FrankenPHP ayrıca PHP uygulamasının statik binary gömülmesini destekler.
Linux statik binary dosyası oluşturmak için bir Docker imajı sağlıyoruz:
docker buildx bake --load static-builder
docker cp $(docker create --name static-builder dunglas/frankenphp:static-builder):/go/src/app/dist/frankenphp-linux-$(uname -m) frankenphp ; docker rm static-builder
Elde edilen statik binary frankenphp
olarak adlandırılır ve geçerli dizinde kullanılabilir.
Statik binary dosyasını Docker olmadan oluşturmak istiyorsanız, Linux için de çalışan macOS talimatlarına bir göz atın.
Varsayılan olarak, en popüler PHP eklentileri zaten derlenir.
Binary dosyanın boyutunu küçültmek ve saldırı yüzeyini azaltmak için PHP_EXTENSIONS
Docker ARG’sini kullanarak derlenecek eklentilerin listesini seçebilirsiniz.
Örneğin, yalnızca opcache
eklentisini derlemek için aşağıdaki komutu çalıştırın:
docker buildx bake --load --set static-builder.args.PHP_EXTENSIONS=opcache,pdo_sqlite static-builder
# ...
Etkinleştirdiğiniz eklentilere ek işlevler sağlayan kütüphaneler eklemek için PHP_EXTENSION_LIBS
Docker ARG’sini kullanabilirsiniz:
docker buildx bake \
--load \
--set static-builder.args.PHP_EXTENSIONS=gd \
--set static-builder.args.PHP_EXTENSION_LIBS=libjpeg,libwebp \
static-builder
Ekstra Caddy modülleri eklemek veya xcaddy adresine başka argümanlar iletmek için XCADDY_ARGS
Docker ARG’sini kullanın:
docker buildx bake \
--load \
--set static-builder.args.XCADDY_ARGS="--with github.com/darkweak/souin/plugins/caddy --with github.com/dunglas/caddy-cbrotli --with github.com/dunglas/mercure/caddy --with github.com/dunglas/vulcain/caddy" \
static-builder
Bu örnekte, Caddy için Souin HTTP önbellek modülünün yanı sıra cbrotli, Mercure ve Vulcain modüllerini ekliyoruz.
Tip
cbrotli, Mercure ve Vulcain modülleri,
XCADDY_ARGS
boşsa veya ayarlanmamışsa varsayılan olarak dahil edilir. EğerXCADDY_ARGS
değerini özelleştirirseniz, dahil edilmelerini istiyorsanız bunları açıkça dahil etmelisiniz.
Derlemeyi nasıl özelleştireceğinize de bakın.
GitHub API kullanım limitine ulaşırsanız, GITHUB_TOKEN
adlı bir ortam değişkeninde bir GitHub Personal Access Token ayarlayın:
GITHUB_TOKEN="xxx" docker --load buildx bake static-builder
# ...
macOS için statik bir binary oluşturmak için aşağıdaki betiği çalıştırın (Homebrew yüklü olmalıdır):
git clone https://github.com/dunglas/frankenphp
cd frankenphp
./build-static.sh
Not: Bu betik Linux’ta (ve muhtemelen diğer Unix’lerde) da çalışır ve sağladığımız Docker tabanlı statik derleyici tarafından dahili olarak kullanılır.
Aşağıdaki ortam değişkenleri docker build
ve build-static.sh
dosyalarına aktarılabilir
statik derlemeyi özelleştirmek için betik:
FRANKENPHP_VERSION
: kullanılacak FrankenPHP sürümüPHP_VERSION
: kullanılacak PHP sürümüPHP_EXTENSIONS
: oluşturulacak PHP eklentileri (desteklenen eklentiler listesi)PHP_EXTENSION_LIBS
: eklentilere özellikler ekleyen oluşturulacak ekstra kütüphanelerXCADDY_ARGS
: xcaddy adresine iletilecek argümanlar, örneğin ekstra Caddy modülleri eklemek içinEMBED
: binary dosyaya gömülecek PHP uygulamasının yoluCLEAN
: ayarlandığında, libphp ve tüm bağımlılıkları sıfırdan oluşturulur (önbellek yok)DEBUG_SYMBOLS
: ayarlandığında, hata ayıklama sembolleri ayıklanmayacak ve binary dosyaya eklenecektirRELEASE
: (yalnızca bakımcılar) ayarlandığında, ortaya çıkan binary dosya GitHub’a yüklenecektir