Generator konfiguracji hostingu
Server block Nginx z HTTPS, pula PHP-FPM i deploy.sh z certbotem dla Laravela, WordPressa lub strony statycznej
-
1Wprowadź dane
Wpisz treść, wklej tekst lub załaduj plik z dysku. -
2Kliknij przycisk
Narzędzie natychmiast przetworzy Twoje dane w przeglądarce. -
3Pobierz wynik
Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
return "Wynik gotowy w 0.1s";
}
Bez http:// i www. Wersję z www dodasz zaznaczeniem poniżej.
Dla Laravela katalog public projektu.
Maks. liczba procesów PHP.
Na jeden proces, np. 256M lub 1G.
Zmieniono dane. Kliknij „Generuj konfigurację”, aby odświeżyć pliki.
Dobierz pm.max_children do RAM serwera
w GB
w GB
w MB (RSS)
Gotowa konfiguracja dla example.com (Laravel / PHP): 3 pliki do skopiowania na serwer.
Pliki
Wersja PHP
Domeny w certyfikacie
Pamięć PHP przy pełnym obciążeniu
Górna granica: 20 × 256M ≈ 5,0 GB
/etc/nginx/sites-available/example.com
/etc/php/8.3/fpm/pool.d/example.com.conf
deploy.sh
Zapisz pliki pod ścieżkami z nagłówków, a potem wykonaj polecenia z deploy.sh po kolei. Przed uzyskaniem certyfikatu rekordy DNS (A/AAAA) domeny muszą już wskazywać na serwer. Ścieżki snippets/fastcgi-php.conf i /run/php/ pochodzą z Debiana i Ubuntu.
Ściąga: pm.max_children a pamięć serwera
Liczone dla rezerwy 1 GB na system i bazę oraz średniego procesu PHP-FPM 64 MB (zmienisz je w pomocniku „Dobierz pm.max_children”).
| RAM serwera | Pamięć dla PHP-FPM | pm.max_children |
|---|---|---|
| 1 GB | — | za mało pamięci |
| 2 GB | 1 GB | 16 |
| 4 GB | 3 GB | 48 |
| 8 GB | 7 GB | 112 |
| 16 GB | 15 GB | 240 |
| 32 GB | 31 GB | 496 |
| 64 GB | 63 GB | 1 008 |
Jak liczymy pm.max_children
pm.max_children = (RAM − rezerwa) × 1024 ÷ średnia pamięć procesu w MB. Przykład: (4 GB − 1 GB) × 1024 ÷ 64 MB = 48. Średni rozmiar procesu zmierzysz poleceniem ps -ylC php-fpm8.3 --sort:rss (kolumna RSS w KB). Iloczyn max_children × memory_limit to tylko górna granica: procesy zwykle zużywają mniej.
Dlaczego certyfikat przed włączeniem strony
Konfiguracja Nginx wskazuje pliki z /etc/letsencrypt/live/. Jeśli ich jeszcze nie ma, nginx -t zgłosi błąd i przeładowanie się nie uda. Dlatego skrypt najpierw pobiera certyfikat (certbot certonly --nginx), a dopiero potem włącza stronę. Odnawianie sprawdzisz poleceniem certbot renew --dry-run.
HSTS i nagłówki: na co uważać
HSTS z max-age=31536000 każe przeglądarkom przez rok łączyć się z domeną tylko po HTTPS, a includeSubDomains obejmuje też wszystkie subdomeny. Włącz je dopiero, gdy każda subdomena ma działający certyfikat. X-Frame-Options: SAMEORIGIN blokuje osadzanie strony w ramkach na innych domenach.
Typowe pułapki
Nginx domyślnie przyjmuje żądania do 1 MB, dlatego dla PHP dodajemy client_max_body_size 64M, zgodnie z limitem uploadu w puli. Od nginx 1.25.1 zapis listen 443 ssl http2 jest przestarzały: zaznacz opcję http2 on;. Certbot z pakietu snap używa timera snap.certbot.renew.timer zamiast certbot.timer.
Oceń to narzędzie:
Powiązane narzędzia
Inne narzędzia, które mogą Ci się przydaćGenerator konfiguracji hostingu
Wdrożenie aplikacji PHP na własnym serwerze wymaga trzech elementów: konfiguracji Nginx, puli PHP-FPM i certyfikatu SSL. Generator konfiguracji hostingu tworzy komplet gotowy do wklejenia na serwer z Debianem lub Ubuntu, w wariancie dla Laravela, WordPressa albo strony statycznej (wtedy bez PHP-FPM).
Co zawiera pakiet
| Plik | Zawartość |
|---|---|
/etc/nginx/sites-available/domena | przekierowanie 301 z HTTP na HTTPS i z www na adres bez www, TLS 1.2 i 1.3, opcjonalnie gzip, cache plików statycznych na 30 dni i nagłówki bezpieczeństwa, try_files dopasowane do typu aplikacji, blokada plików ukrytych (poza .well-known) |
/etc/php/8.3/fpm/pool.d/domena.conf | osobna pula z własnym socketem, pm = dynamic, pm.max_children, memory_limit, upload do 64 MB i log błędów w /var/log/php/ |
deploy.sh | katalogi, restart PHP-FPM, certyfikat Let's Encrypt, symlink, test nginx -t, przeładowanie i automatyczne odnawianie |
Dla strony statycznej powstają dwa pliki: konfiguracja Nginx i deploy.sh. Wersję PHP wybierasz z listy od 7.4 do 8.5; od niej zależą ścieżka puli i socket, np. /run/php/php8.3-fpm.sock. Opcja http2 on; przełącza zapis HTTP/2 na składnię wymaganą od nginx 1.25.1.
Dobre praktyki
- root wskazuje na katalog
public/, nie na cały projekt: plik.env, konfiguracja i logi nie są wtedy dostępne z przeglądarki, - wymuś HTTPS przekierowaniem 301,
- ustaw HSTS dopiero, gdy SSL działa poprawnie; przy pierwszym wdrożeniu możesz odznaczyć nagłówki bezpieczeństwa i dodać je po sprawdzeniu,
- dopasuj
pm.max_childrendo RAM serwera (typowy proces PHP zajmuje 40–80 MB), - logi błędów PHP trzymaj poza publicznym katalogiem; generator kieruje je do
/var/log/php/domena-error.log.
Wdrożenie
Kolejność w deploy.sh ma znaczenie: certyfikat powstaje przed włączeniem strony, bo blok server odwołuje się do plików z /etc/letsencrypt/live/. Gdyby ich nie było, nginx -t zgłosiłby błąd i przeładowanie by się nie udało.
- Rekordy DNS A/AAAA domeny (i wersji www) muszą już wskazywać na serwer.
- Zapisz pliki pod ścieżkami z nagłówków wyniku.
sudo systemctl restart php8.3-fpmuruchamia nową pulę.sudo certbot certonly --nginx -d domena -d www.domena --email adres --agree-tos --no-eff-emailpobiera certyfikat.sudo ln -s /etc/nginx/sites-available/domena /etc/nginx/sites-enabled/, a potemsudo nginx -t && sudo systemctl reload nginx.sudo systemctl enable --now certbot.timerisudo certbot renew --dry-runwłączają i sprawdzają odnawianie.
Jak działa generator konfiguracji hostingu
Generator wypełnia szablony danymi z formularza: typem aplikacji, domeną, katalogiem, wersją PHP, adresem e-mail do Let's Encrypt, liczbą procesów i memory_limit. Socket oraz ścieżki puli, certyfikatu i logów wynikają z domeny i wersji PHP, więc trzy pliki są ze sobą spójne. Wartości pm.start_servers, pm.min_spare_servers i pm.max_spare_servers są dobierane tak, by nie przekraczały pm.max_children (przy 20 procesach: 4, 2 i 8). Gdyby je przekroczyły, PHP-FPM by nie wystartował.
Sedno to limit procesów PHP. Pomocnik „Dobierz pm.max_children do RAM serwera” liczy: pm.max_children = (RAM − rezerwa) × 1024 ÷ średnia pamięć procesu w MB, przy czym RAM i rezerwę podajesz w GB. Wynik zaokrągla w dół i wstawia do pola (najwyżej 1000). Zaokrąglenie w dół jest celowe: przekroczenie pamięci kończy się swapem, a wtedy czas odpowiedzi rośnie skokowo.
Kafelek „Pamięć PHP przy pełnym obciążeniu” pokazuje iloczyn pm.max_children × memory_limit, np. 20 × 256M = 5120 MB. To górna granica, a nie realne zużycie: memory_limit ogranicza pojedyncze żądanie, a typowy proces zajmuje znacznie mniej.
Pliki .php trafiają przez FastCGI do socketa puli, a SCRIPT_FILENAME korzysta z $realpath_root. Dzięki temu konfiguracja działa także przy wdrożeniach, w których katalog aplikacji jest symlinkiem do bieżącego wydania.
Przykład: serwer z 4 GB RAM krok po kroku
- Serwer ma 4 GB RAM, działa na nim jedna aplikacja Laravel i lokalna baza danych.
- Rezerwujesz 1 GB na system, bazę i procesy pomocnicze. Dla PHP-FPM zostaje (4 − 1) × 1024 = 3072 MB.
- Przyjmujesz średni proces 64 MB (domyślna wartość pomocnika): 3072 ÷ 64 = 48, czyli pm.max_children = 48.
- Sprawdzasz wariant pesymistyczny: przy procesach po 80 MB wychodzi 3072 ÷ 80 = 38,4, czyli 38. Tę wartość wybierasz, gdy aplikacja ładuje dużo bibliotek albo przetwarza obrazy.
- Typ „Laravel / PHP” podpowiada root
/var/www/app/publici regułętry_files $uri $uri/ /index.php?$query_string. - Skrypt
deploy.shpobiera certyfikat dla domeny i www, a dopiero potem tworzy symlink wsites-enabledi przeładowuje Nginx.
Tabela referencyjna: pamięć RAM a pm.max_children
Wartości policzone wzorem z pomocnika, z rezerwą rosnącą razem z serwerem. Ściąga pod narzędziem używa jednej rezerwy, którą ustawiasz w pomocniku.
| RAM serwera | Rezerwa | Pamięć dla PHP-FPM | 64 MB na proces | 80 MB na proces |
|---|---|---|---|---|
| 1 GB | 0,5 GB | 512 MB | 8 | 6 |
| 2 GB | 0,5 GB | 1536 MB | 24 | 19 |
| 4 GB | 1 GB | 3072 MB | 48 | 38 |
| 8 GB | 2 GB | 6144 MB | 96 | 76 |
| 16 GB | 4 GB | 12288 MB | 192 | 153 |
| 32 GB | 8 GB | 24576 MB | 384 | 307 |
Praktyczne wskazówki
- Zmierz realne zużycie zamiast zgadywać. Polecenie
ps -ylC php-fpm8.3 --sort:rsspokazuje kolumnę RSS w KB; średnią podziel przez 1024 i wpisz do pomocnika w miejsce 64 MB. - Nie planuj pamięci do zera. Bez rezerwy na system i bazę nawet poprawnie policzony limit skończy się swapem przy pierwszym skoku ruchu.
- Reguła
try_fileszależy od typu aplikacji: Laravel przekazuje$query_string, WordPress$args, a strona statyczna zwraca 404 dla brakujących plików. Przy nietypowej strukturze katalogów dopisz własne bloki location. nginx -turuchamiaj przed każdym przeładowaniem. Błędny plik przyreloadzostawia starą konfigurację, ale porestartalbo restarcie serwera Nginx w ogóle nie wstanie.
Czego narzędzie nie uwzględnia
- Realnego profilu pamięci aplikacji: 64 MB to wartość przykładowa, a aplikacja z ciężkimi bibliotekami może zużywać więcej. Wtedy limit trzeba obniżyć.
- Innych usług na tym samym serwerze. Gdy obok PHP działają Node, Redis, kolejne pule PHP-FPM albo kontenery Docker, zwiększ rezerwę, a wyliczony pm.max_children traktuj jako górną granicę.
- Warstwy przed serwerem. Proxy, CDN i load balancer nie są częścią wyniku; przy nich przekierowanie na HTTPS i nagłówki bezpieczeństwa mogą się dublować albo zapętlać.
- Systemów spoza rodziny Debian/Ubuntu. Ścieżki
snippets/fastcgi-php.conf,/run/php/i użytkownikwww-datapochodzą z tych dystrybucji; na Rocky Linux czy AlmaLinux trzeba je zmienić. - Pozostałych wymagań frameworka, takich jak rozszerzenia PHP, kolejki czy harmonogram zadań. Limit uploadu to 64 MB w Nginx i w puli; większy zmień w obu miejscach.
Najczęstsze pytania
Ile procesów PHP-FPM ustawić?
Odejmij od RAM rezerwę na system i bazę, pomnóż przez 1024 i podziel przez średnią pamięć procesu w MB. Przy 2 GB RAM, rezerwie 0,5 GB i procesie 64 MB wychodzi 24.
Czy certbot przerywa działanie strony?
Nie. certbot certonly --nginx na chwilę dodaje regułę do walidacji HTTP-01 i przeładowuje Nginx bez zatrzymywania go. Odnawianie działa w tle przez certbot.timer, a w instalacji ze snapa przez snap.certbot.renew.timer.
Czy konfiguracja zadziała dla WordPressa?
Tak. Typ „WordPress” ustawia try_files $uri $uri/ /index.php?$args, co obsługuje przyjazne odnośniki (permalinki). Jako root podaj katalog instalacji, np. /var/www/blog.
Czy jedna konfiguracja obsłuży kilka domen?
Generuj osobny zestaw dla każdej domeny: każda dostaje własny plik w sites-available i własną pulę PHP-FPM. Wspólna pula dla kilku serwisów utrudnia rozliczenie pamięci, bo pm.max_children obowiązuje całą pulę.
Jak sprawdzić SSL przed włączeniem HSTS?
Otwórz stronę i upewnij się, że przeglądarka nie zgłasza ostrzeżeń i żaden zasób nie ładuje się po HTTP. Generowany nagłówek ma max-age=31536000 (rok) i includeSubDomains, więc każda subdomena też musi mieć działający certyfikat.
Czy narzędzie wygeneruje konfigurację dla Apache?
Nie, tworzy pliki dla Nginx, PHP-FPM i certbota. Do Apache użyj generatora Apache VirtualHost.