Bu sayfa topluluk tarafından çevrilmiştir ve güncel olmayabilir. Referans versiyonuna (İngilizce) bakın.

Bu sayfa topluluk tarafından çevrilmiştir ve güncel olmayabilir. Referans versiyonuna (İngilizce) bakın.

Bu sayfa topluluk tarafından çevrilmiştir ve güncel olmayabilir. Referans versiyonuna (İngilizce) bakın.

Tarafından desteklenmektedir
Nginx/PHP-FPM'den geçiş

Nginx/PHP-FPM’den geçiş

FrankenPHP hem web sunucunuzu (Nginx, Apache) hem PHP-FPM’i tek bir ikili dosyayla değiştirir. Bu kılavuz tipik bir PHP uygulaması için temel geçişi kapsar.

# Temel farklar

PHP-FPM kurulumuFrankenPHP karşılığı
Nginx/Apache + PHP-FPMTek frankenphp ikili dosyası
php-fpm.conf havuz ayarlarıfrankenphp genel seçeneği
Nginx server {} bloğuCaddyfile site bloğu
php_value / php_admin_valuephp_ini Caddyfile yönergesi
pm = static / pm.max_childrennum_threads
pm = dynamicmax_threads auto
Web sunucusu istek süzmeCaddy route’ları ve eşleştiriciler

# HTTP istek süzme

Stok bir Nginx veya Apache paketinden geçiş yaparken, PHP-FPM isteği almadan önce web sunucusunun uyguladığı istek süzmeyi kontrol edin. FrankenPHP Caddy üzerine kuruludur; geçerli HTTP metodları ve başlıkları, Caddyfile‘ınız veya başka bir vekil onları önce reddetmedikçe Caddy’nin olağan yönlendirmesinden geçer.

Örneğin bazı web sunucuları TRACE isteklerini varsayılan olarak reddeder. Uygulamanız bu davranışı korumalıysa php_server öncesine açık bir eşleştirici ekleyin:

example.com {
    @trace method TRACE
    respond @trace 405

    root /var/www/app/public
    php_server
}

Önceki web sunucunuzun uyguladığı daha katı metod veya başlık politikalarına aynı yaklaşımı uygulayın. Aynı durum istek başlık adları için de geçerlidir: bazı web sunucuları veya vekiller geçerli ama alışılmadık HTTP alan adlarını PHP-FPM görmeden reddeder veya düşürür; FrankenPHP ise bunları PHP uygulamasına geçirebilir.

# 1. adım: web sunucusu yapılandırmasını değiştirin

Tipik bir Nginx + PHP-FPM yapılandırması:

# /etc/nginx/sites-available/example.com
server {
    listen 80;
    server_name example.com;
    root /var/www/app/public;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Tek bir Caddyfile olur:

example.com {
    root /var/www/app/public
    php_server
}

Bu kadar. php_server yönergesi PHP yönlendirmesini, try_files benzeri davranışı ve statik dosya sunumunu halleder.

# 2. adım: PHP yapılandırmasını taşıyın

Mevcut php.ini dosyanız olduğu gibi çalışır. Kurulum yöntemine göre nereye koyacağınız için Konfigürasyon belgesine bakın.

Yönergeleri doğrudan Caddyfile içinde de ayarlayabilirsiniz:

{
    frankenphp {
        php_ini memory_limit 256M
        php_ini max_execution_time 30
    }
}

example.com {
    root /var/www/app/public
    php_server
}

# 3. adım: havuz boyutunu ayarlayın

PHP-FPM’de worker süreç sayısını denetlemek için pm.max_children ayarlanır. FrankenPHP’de karşılığı num_threads‘tir:

{
    frankenphp {
        num_threads 16
    }
}

Varsayılan olarak FrankenPHP CPU başına 2 iş parçacığı başlatır. PHP-FPM’nin pm = dynamic ayarına benzer dinamik ölçekleme için:

{
    frankenphp {
        num_threads 4
        max_threads auto
    }
}

# 4. adım: Docker geçişi

Tipik bir PHP-FPM Docker kurulumu (Nginx + PHP-FPM, iki konteyner) tek bir konteynerle değiştirilebilir:

Önce:

# compose.yaml
services:
  nginx:
    image: nginx:1
    volumes:
      # Nginx yapılandırmasını konteynere bağlayın
      - ./config:/etc/nginx/conf.d
      - .:/var/www/app
    ports:
      - "80:80"
      - "443:443"

  php:
    image: php:8.5-fpm
    volumes:
      - .:/var/www/app

Sonra:

# compose.yaml
services:
  php:
    image: dunglas/frankenphp:1-php8.5
    volumes:
      - .:/var/www/app
      # Caddyfile'ı konteynere bağlayın
      - ./config:/etc/frankenphp
      - caddy_data:/data
      - caddy_config:/config
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"

volumes:
  caddy_data:
  caddy_config:

Ek PHP eklentilerine ihtiyacınız varsa özel Docker imajı oluşturma belgesine bakın.

Çerçeveye özel Docker kurulumları için Symfony Docker ve Laravel’i FrankenPHP Docker imajıyla çalıştırma belgelerine bakın.

# 5. adım: worker modunu değerlendirin (isteğe bağlı)

Klasik modda FrankenPHP PHP-FPM gibi çalışır: her istek uygulamayı sıfırdan başlatır. Geçiş için güvenli bir başlangıç noktasıdır.

Daha iyi performans için worker moduna geçebilirsiniz; bu mod uygulamayı bir kez başlatır ve bellekte tutar:

example.com {
    root /var/www/app/public
    php_server {
        root /var/www/app/public
        worker index.php 4
    }
}

Caution

Worker modu uygulamanızı istekler arasında bellekte tutar. Kodunuzun istekler arasında global durumun sıfırlanmasına dayanmadığından emin olun. Symfony, Laravel ve API Platform gibi çerçeveler bu modu yerel olarak destekler.

# Neleri kaldırabilirsiniz

Geçişten sonra şunlara artık ihtiyacınız yoktur:

  • Nginx veya Apache
  • PHP-FPM (php-fpm servisi/süreci)
  • FastCGI yapılandırması
  • Kendi yönettiğiniz TLS sertifikaları (Caddy bunları otomatik halleder)
Bu sayfayı düzenleyin