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
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üphanelerEMBED
: 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