FrankenPHP, PHP uygulamalarının kaynak kodunu ve varlıklarını statik, kendi kendine yeten bir binary dosyaya yerleştirme yeteneğine sahiptir.
Bu özellik sayesinde PHP uygulamaları, uygulamanın kendisini, PHP yorumlayıcısını ve üretim düzeyinde bir web sunucusu olan Caddy’yi içeren bağımsız bir binary dosyalar olarak çıktısı alınabilir ve dağıtılabilir.
Bu özellik hakkında daha fazla bilgi almak için Kévin tarafından SymfonyCon 2023’te yapılan sunuma göz atabilirsiniz.
Bağımsız binary dosyayı oluşturmadan önce uygulamanızın gömülmeye hazır olduğundan emin olun.
Örneğin muhtemelen şunları yapmak istersiniz:
.git
veya testler gibi gerekli olmayan dosyaları çıkarınÖrneğin, bir Symfony uygulaması için aşağıdaki komutları kullanabilirsiniz:
# .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
# Testleri kaldırın
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
Bir Linux binary çıktısı almanın en kolay yolu, sağladığımız Docker tabanlı derleyiciyi kullanmaktır.
Hazırladığınız uygulamanın deposunda static-build.Dockerfile
adlı bir dosya oluşturun:
FROM --platform=linux/amd64 dunglas/frankenphp:static-builder
# Uygulamanızı kopyalayın
WORKDIR /go/src/app/dist/app
COPY . .
# Statik binary dosyasını oluşturun, yalnızca istediğiniz PHP eklentilerini seçtiğinizden emin olun
WORKDIR /go/src/app/
RUN EMBED=dist/app/ \
PHP_EXTENSIONS=ctype,iconv,pdo_sqlite \
./build-static.sh
Caution
Bazı
.dockerignore
dosyaları (örneğin varsayılan Symfony Docker.dockerignore
)vendor/
dizinini ve.env
dosyalarını yok sayacaktır. Derlemeden önce.dockerignore
dosyasını ayarladığınızdan veya kaldırdığınızdan emin olun.
Derleyin:
docker build -t static-app -f static-build.Dockerfile .
Binary dosyasını çıkarın:
docker cp $(docker create --name static-app-tmp static-app):/go/src/app/dist/frankenphp-linux-x86_64 my-app ; docker rm static-app-tmp
Elde edilen binary dosyası, geçerli dizindeki my-app
adlı dosyadır.
Docker kullanmak istemiyorsanız veya bir macOS binary dosyası oluşturmak istiyorsanız, sağladığımız kabuk betiğini kullanın:
git clone https://github.com/dunglas/frankenphp
cd frankenphp
EMBED=/path/to/your/app \
PHP_EXTENSIONS=ctype,iconv,pdo_sqlite \
./build-static.sh
Elde edilen binary dosyası dist/
dizinindeki frankenphp-<os>-<arch>
adlı dosyadır.
İşte bu kadar! my-app
dosyası (veya diğer işletim sistemlerinde dist/frankenphp-<os>-<arch>
) bağımsız uygulamanızı içerir!
Web uygulamasını başlatmak için çalıştırın:
./my-app php-server
Uygulamanız bir worker betiği içeriyorsa, worker’ı aşağıdaki gibi bir şeyle başlatın:
./my-app php-server --worker public/index.php
HTTPS (Let’s Encrypt sertifikası otomatik olarak oluşturulur), HTTP/2 ve HTTP/3’ü etkinleştirmek için kullanılacak alan adını belirtin:
./my-app php-server --domain localhost
Ayrıca binary dosyanıza gömülü PHP CLI betiklerini de çalıştırabilirsiniz:
./my-app php-cli bin/console
Binary dosyasının nasıl özelleştirileceğini (uzantılar, PHP sürümü…) görmek için Statik derleme dokümanını okuyun.
Linux’ta, oluşturulan ikili dosya UPX kullanılarak sıkıştırılır.
Mac’te, göndermeden önce dosyanın boyutunu küçültmek için sıkıştırabilirsiniz.
Biz xz
öneririz.