* add ./create-rpm.sh file to build a "frankenphp" rpm package * also build a deb package * renamed to build-packages * linter... * add depends * linter again? * linter number 3 * linter number 4 * set default locations for ini file, conf files and extensions * set unified path for modules that should be ok on all dists * add default content into "package" folder * make file executable * worker is in public folder * what on earth did I do x) * use same FRANKENPHP_VERSION and make sure to let pr's run the rpm generation too (version 0.0.0) to see issues * install ruby, fpm and rpm-build * move to after changing base urls because it would fail with packages not found * ruby 3 build needs gcc 10 * rpm-build is necessary too... * and I forgot to link the package folder * create directories if they don't exist * copy out all frankenphp* files? * lint fix * only copy frankenphp-* files * only copy frankenphp-* files * the .deb file is name frankenphp_1.5.0... - create output folder instead and upload all things inside that will simplify things when later adding xdebug.so and ffi.so * update the last two steps to use the gh-output directory * add post install script to set frankenphp able to bind to port 80 for non-root users * dnf over yum, I think the yum alias was removed in RH 9.5 * newlines * newlines * add text what missing libcap means * copy php.ini-production from php-src, linter, update ruby version * move Caddyfile to /etc/frankenphp/Caddyfile * linter * fix a copy and paste error * better describe fallback to 0.0.0 * linter * copy installation scripts from official caddy packages, change user to frankenphp too * bombombom * make files executable * tabs * linter * linter again * use empty directory for three different destinations instead of keeping three empty local directories * caddy says the file is incorrectly formatted without these spaces * remove wildcard matcher from root directive * Apply suggestions from code review commit suggested changes to preinstall/postinstall scripts Co-authored-by: Kévin Dunglas <kevin@dunglas.fr> * Update dev.Dockerfile Co-authored-by: Kévin Dunglas <kevin@dunglas.fr> * remove misleading comment * update documentation for paths * update documentation for paths some more * fix musl opcache-jit issue * markdown linter * the damn tab * Apply suggestions from code review Co-authored-by: Kévin Dunglas <kevin@dunglas.fr> * drop dev.Dockerfile php location from config.md * add php config note to CONTRIBUTING.md * dashes instead of asterisks in chinese docs * fix package building * create frankenphp user in case it doesn't exist for deb packages * create users if they don't exist, delete them again if they didn't exist * satisfy linter * create the user with the same commands as the postinst/preinstall scripts * Removes toolchain requirements. * trigger * Removes explicit calls to go get * trigger * setcap by default * simplify example project * bring page more in line with the caddy / apache / nginx default page * update to html 5 * oopsies * revert style to original * remove https:// (caddy uses http:// on RHEL, :80 on Debian) --------- Co-authored-by: Kévin Dunglas <kevin@dunglas.fr> Co-authored-by: Alliballibaba <alliballibaba@gmail.com>
6.7 KiB
Konfigürasyon
FrankenPHP, Caddy'nin yanı sıra Mercure ve Vulcain modülleri Caddy tarafından desteklenen formatlar kullanılarak yapılandırılabilir.
Docker imajlarında] (docker.md), Caddyfile /etc/frankenphp/Caddyfile adresinde bulunur.
Statik ikili, başlatıldığı dizinde Caddyfile dosyasını arayacaktır.
PHP'nin kendisi bir php.ini dosyası kullanılarak yapılandırılabilir.
PHP yorumlayıcısı aşağıdaki konumlarda arama yapacaktır:
Docker:
- php.ini:
/usr/local/etc/php/php.iniVarsayılan olarak php.ini sağlanmaz. - ek yapılandırma dosyaları:
/usr/local/etc/php/conf.d/*.ini - php uzantıları:
/usr/local/lib/php/extensions/no-debug-zts-<YYYYMMDD>/ - PHP projesi tarafından sağlanan resmi bir şablonu kopyalamalısınız:
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 kurulumu (.rpm veya .deb):
- php.ini:
/etc/frankenphp/php.iniVarsayılan olarak üretim ön ayarlarına sahip bir php.ini dosyası sağlanır. - ek yapılandırma dosyaları:
/etc/frankenphp/php.d/*.ini - php uzantıları:
/usr/lib/frankenphp/modules/
Statik ikili:
- php.ini:
frankenphp runveyafrankenphp php-serverkomutunun çalıştırıldığı dizin, ardından/etc/frankenphp/php.ini - ek yapılandırma dosyaları:
/etc/frankenphp/php.d/*.ini - php uzantıları: yüklenemez
- PHP kaynak kodu ile birlikte verilen
php.ini-productionveyaphp.ini-developmentdosyalarından birini kopyalayın.
Caddyfile Konfigürasyonu
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
}
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] (worker.md) 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_servervephp` 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.
}
Ortam Değişkenleri
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:frankenphpyönergesi altına yapılandırma entegre edin
FPM 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.
PHP konfigürasyonu
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.
Hata Ayıklama Modunu Etkinleştirin
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