Jak zapewne wiecie (albo i nie) na Valhalli serwerem WWW jest NGiNX, a PHP działa jako PHP-FPM. Dlaczego taki a nie inny wybór to już mało istotna sprawa. Ważniejsze jest to, że niedawno musiałem zaorać cały serwer i stawiać wszystko od zera… No i tak sobie pomyślałem:

Dlaczego przy dodawaniu każdego vhosta muszę rzeźbić konfig od początku, dlaczego dla każdego vhosta muszę od początku rzeźbić nowego poola do PHP? 

Zaraz po tym naszła mnie kolejna myśl:

Czemu by tego nie zautomatyzować (i przy okazji nie podzielić się ze światem).

Zapytacie dlaczego dla każdego vhosta ustawiam osobnego poola? No cóż, staram się (na miarę własnych możliwości) postawić bezpieczne pudło (jak Valhalla żyje od ponad 4 lat na wordpressie tak do tej pory, odpukać, żaden syf się do niej nie dobrał). Osobne poole pozwalają m.in. na indywidualne ustawienia open_basedir, memory_limit, max_execution_time i innych. Wiadomo, ze webowy klient FTP będzie potrzebował innych ustawień niż wordpress czy phpmyadmin.

Wracając do PHP-FPM do niedawna działało to tak, że po uruchomieniu procesu master w pamięci non stop wisiało kilka procesów (minimum pm.start_servers * liczba zdefiniowanych pooli) PHP, nie zależnie od tego czy były aktualnie używane czy nie. Oczywiście wiązało się to z permanentnym zużyciem pamięci. O  ile mamy 1 czy 2 poole to nie ma problemu, ale wyobraźmy sobie sytuację, gdzie mamy 200 użytkowników, dla każdego (niezależnie od ilości domen)  jeden pool zajmujący kilkanaście MB pamięci RAM – nagle znika nam kilka GB RAMu… W tym miejscu przewagę pokazywało PHP uruchamiane jako fastcgi/fcgid. Ale na NGiNXie to za dużo rzeźbienia. Od którejś wersji (stosunkowo nowej) PHP-FPM ma możliwość działania jak fcgid – nieużywany proces jest zabijany (opcja pm = ondemand w definicji poola) – chwałą mu za to, ale musiałem przez to poprawić wszystkie poole. I znów rzeźba…

Na szczęście nie skończyło się na myśleniu. Kilka czteropaków, bash i perl do ręki, dwa czy trzy wolne wieczory i tak powstały 2 skrypty (z nadzieją na dalszy rozwój). Pierwszy z nich to bashowy poolcreator -jak sama nazwa wskazuje tworzy nowego poola dla PHP-FPM. Drugi, troszkę dłuższy i odrobinę bardziej skomplikowany, perlowy newvhost – pozwala na utworzenie nowego vhosta dla NGiNXa. Oba skryptypy dostępne są w repozytorium na 

https://valhalla.org.pl/svn/nginx-fpm-tools

Repozytorium jest dostępne dla każdego (w trybie do odczytu). Dorobiony jest jakiś tam changelog, jakieś readme też jest no i lista TODO. Chętnych zapraszam do odwiedzania, przeglądania (cz to przez przeglądarkę czy to po checkoucie na lokalnego kompa) i testowania (u siebie sprawdzałem, działa). Kilka vhostów w ten sposób utworzyłem.  Szczegóły użytkowania dostępne są w pliku README.

Jeśli Ci się nudzi, masz czas i ochotę pomóc pisz na maila/xmpp. Wszelkie sugestie i poprawki również proszę zgłaszać mailowo/via xmpp

WykopShare