FrankenPHP, Caddy'nin yanı sıra Mercure ve Vulcain modülleri Caddy tarafından desteklenen formatlar kullanılarak yapılandırılabilir.
Docker imajında, Caddyfile
/etc/caddy/Caddyfile
dosyası olarak bulunur.
PHP'yi her zamanki gibi php.ini
kullanarak da yapılandırabilirsiniz.
Docker imajında php.ini
dosyası mevcut değildir, elle oluşturabilir veya resmi bir şablonu kopyalayabilirsiniz:
FROM dunglas/frankenphp
# Developement:
RUN cp $PHP_INI_DIR/php.ini-development $PHP_INI_DIR/php.ini
# Veya production:
RUN cp $PHP_INI_DIR/php.ini-production $PHP_INI_DIR/php.ini
FrankenPHP yürütücüsünü kaydetmek için frankenphp
global seçenek ayarlanmalıdır, ardından PHP uygulamanızı sunmak için site blokları içinde php_server
veya php
HTTP yönergeleri kullanılabilir.
Minimal örnek:
{
# FrankenPHP'yi aktif et
frankenphp
# Yönergenin ne zaman yürütülmesi gerektiğini yapılandırma
order php_server before file_server
}
localhost {
# Sıkıştırmayı etkinleştir (isteğe bağlı)
encode zstd br gzip
# Geçerli dizindeki PHP dosyalarını çalıştırın ve varlıkları sunun
php_server
}
İsteğe bağlı olarak, oluşturulacak iş parçacığı sayısı ve sunucuyla birlikte başlatılacak işçi betikleri global seçenek altında belirtilebilir.
{
frankenphp {
num_threads <num_threads> # Başlatılacak PHP iş parçacığı sayısını ayarlar. Varsayılan: Mevcut CPU çekirdek sayısının 2 katı.
worker {
file <path> # Çalışan komut dosyasının yolunu ayarlar.
num <num> # Başlatılacak PHP iş parçacığı sayısını ayarlar, varsayılan değer mevcut CPU çekirdek sayısının 2 katıdır.
env <key> <value> # Ek bir ortam değişkenini verilen değere ayarlar. Birden fazla ortam değişkeni için birden fazla kez belirtilebilir.
}
}
}
# ...
Alternatif olarak, worker
seçeneğinin tek satırlık kısa formunu kullanabilirsiniz:
{
frankenphp {
worker <file> <num>
}
}
# ...
Aynı sunucuda birden fazla uygulamaya hizmet veriyorsanız birden fazla işçi de tanımlayabilirsiniz:
{
frankenphp {
worker /path/to/app/public/index.php <num>
worker /path/to/other/public/index.php <num>
}
}
app.example.com {
root * /path/to/app/public
php_server
}
other.example.com {
root * /path/to/other/public
php_server
}
# ...
Genellikle ihtiyacınız olan şey php_server
yönergesini kullanmaktır,
ancak tam kontrole ihtiyacınız varsa, daha düşük seviyeli php
yönergesini kullanabilirsiniz:
php_server` yönergesini kullanmak bu yapılandırmay ile aynıdır:
route {
# Dizin istekleri için sondaki eğik çizgiyi, diğer adıyla taksim işaretini ekleyin
@canonicalPath {
file {path}/index.php
not path */
}
redir @canonicalPath {path}/ 308
# İstenen dosya mevcut değilse, dizin dosyalarını deneyin
@indexFiles file {
try_files {path} {path}/index.php index.php
split_path .php
}
rewrite @indexFiles {http.matchers.file.relative}
# FrankenPHP!
@phpFiles path *.php
php @phpFiles
file_server
}
php_serverve
php` yönergeleri aşağıdaki seçeneklere sahiptir:
php_server [<matcher>] {
root <directory> # Sitenin kök klasörünü ayarlar. Öntanımlı: `root` yönergesi.
split_path <delim...> # URI'yi iki parçaya bölmek için alt dizgeleri ayarlar. İlk eşleşen alt dizge "yol bilgisini" yoldan ayırmak için kullanılır. İlk parça eşleşen alt dizeyle sonlandırılır ve gerçek kaynak (CGI betiği) adı olarak kabul edilir. İkinci parça betiğin kullanması için PATH_INFO olarak ayarlanacaktır. Varsayılan: `.php`
resolve_root_symlink false # Varsa, sembolik bir bağlantıyı değerlendirerek `root` dizininin gerçek değerine çözümlenmesini devre dışı bırakır (varsayılan olarak etkindir).
env <key> <value> # Ek bir ortam değişkenini verilen değere ayarlar. Birden fazla ortam değişkeni için birden fazla kez belirtilebilir.
}
Aşağıdaki ortam değişkenleri Caddyfile
içinde değişiklik yapmadan Caddy yönergelerini entegre etmek için kullanılabilir:
SERVER_NAME
: değiştirin dinlenecek adresleri, sağlanan ana bilgisayar adları oluşturulan TLS sertifikası için de kullanılacaktırCADDY_GLOBAL_OPTIONS
: entegre edin global seçeneklerFRANKENPHP_CONFIG
: frankenphp
yönergesi altına yapılandırma entegre edinFPM ve CLI SAPI'lerinde olduğu gibi, ortam değişkenleri varsayılan olarak $_SERVER
süper globalinde gösterilir.
variables_order
'a ait PHP yönergesinin S
değeri bu yönergede E
'nin başka bir yere yerleştirilmesinden bağımsız olarak her zaman ES
ile eş değerdir.
Ek olarak PHP yapılandırma dosyalarını yüklemek için
PHP_INI_SCAN_DIR
ortam değişkeni kullanılabilir.
Ayarlandığında, PHP verilen dizinlerde bulunan .ini
uzantılı tüm dosyaları yükleyecektir.
Docker imajını kullanırken, hata ayıklama modunu etkinleştirmek için CADDY_GLOBAL_OPTIONS
ortam değişkenini debug
olarak ayarlayın:
docker run -v $PWD:/app/public \
-e CADDY_GLOBAL_OPTIONS=debug \
-p 80:80 -p 443:443 -p 443:443/udp \
dunglas/frankenphp