Dziś jest poniedziałek, 8 lutego 2010 roku (z kalendarza...)

Arch PHP Webdevelopment Platform

Icon

03.07.2009, 22:02

Arch Linux

Komentarze (2)

Powrót

Jakiś miesiąc temu popełniłem na Zyxist.com wpis o nazwie "Pakowanie PHP", w którym zapowiadałem stworzenie zestawu pakietów dla programistów PHP korzystających z systemu Arch Linux będącego niczym innym, jak spakowanym moim środowiskiem programistycznym, umożliwiającym testowanie skryptów na różnych wersjach PHP z wykorzystaniem mechanizmu FastCGI. Teraz chciałbym podać więcej szczegółów.

Sesja się skończyła, wróciłem do domu i okazało się, że laptopowe środowisko programistyczne jakimś cudem zdołało się rozwalić na tyle, że straciło swoje podstawowe właściwości. Ponieważ trzeba je było szybko przywrócić do życia, postanowiłem od razu wziąć się za zapowiadany projekt i wszystko ładnie zapakować w pakiety Arch Linuksa. Po tygodniu siedzenia i dziesiątkach kompilacji projekt ma już ręce i nogi, a uzyskane efekty są więcej niż obiecujące. Uzyskane środowisko wyznacza zupełnie inny kierunek, niż ten, do którego przyzwyczaiły nas windowsowe kombajny. Przede wszystkim udało mi się rozwiązać odwieczny problem, jak przetestować ten sam skrypt na różnych wersjach PHP bez stwarzania zagrożenia zdrowia i życia.

Projekt

Całe środowisko będzie udostępnione jako zestaw pakietów dla dystrybucji Arch Linux i tylko dla niej (niestety). W jego skład wchodzi PHP, Lighttpd, PEAR oraz rozmaite skrypty narzędziowe przydatne dla programistów (w tej chwili: PHPUnit, phpMyAdmin, phpPgAdmin, phpDocumentor, TypeFriendly, dokumentacje offline), wszystkie odpowiednio skonfigurowane i gotowe prawie od razu do użycia. W tej chwili gotowe są następujące pakiety:

  1. webdev-base - podstawowe skrypty i struktury.
  2. webdev-lighttpd - serwer Lighttpd z uaktywnionym FastCGI i przystosowany do podłączania dodatkowych wersji PHP.
  3. webdev-php-runnable - wersja PHP przystosowana do uruchamiania skryptów narzędziowych, zawierająca jedynie to, co jest potrzebne do prawidłowego ich działania.
  4. webdev-php52 - gałąź PHP 5.2.x z dużą liczbą dynamicznie ładowanych modułów i skonfigurowana pod kątem tego, by tworzone skrypty nie miały problemów z kompatybilnością na przyszłych wersjach. Innymi słowy, można zapomnieć tutaj o magic quotes, register globals i innych anachronizmach.
  5. webdev-php53 - to samo, co powyżej, tyle że dotyczące gałęzi PHP 5.3.
  6. webdev-php52-xdebug - XDebug dla webdev-php52.

W przygotowaniu jest XDebug dla PHP 5.3 oraz paczka webdev-php60 z jednym z ostatnich snapshotów PHP6. W dalszej kolejności zajmę się PEAR-em i skryptami narzędziowymi tak, aby programista miał dostęp do wszystkiego, co jest potrzebne.

Zasadniczą cechą systemu jest to, że PHP 5.2, 5.3 i 6.0 mogą zupełnie bezkonfliktowo pracować równocześnie i być podłączone do jednego serwera WWW, a jednocześnie sami decydujemy, które mają pracować cały czas, a które będziemy włączać w razie potrzeby. Nie ma tu żadnych magicznych przełączników w tray-u dzięki wykorzystaniu dobrodziejstw FastCGI. W celu prawidłowego działania system musi narzucić pewną strukturę organizacyjną dla projektów, ale jest ona bardzo elastyczna i powinna wielu osobom przypaść do gustu. Otóż po zainstalowaniu pakietów musimy zamontować jeden lub więcej katalogów na projekty w naszym folderze domowym. Ułatwia nam to skrypt webdev-bind, np.

$ webdev-bind projects /home/zyxist/Projekty

Po restarcie podstawowego demona webdev w katalogu, "Projekty" będziemy mogli umieszczać własne projekty jako kolejne podkatalogi. Ich podłączenie do systemu realizuje drugi skrypt, webdev-domain. Jego zadaniem jest automatyczna konfiguracja wirtualnego hosta i zarejestrowanie odpowiednich subdomen w /etc/hosts:

$ webdev-domain opt.trunk projects Opt_trunk

Tutaj opt.trunk to początkowa część domeny, projects to identyfikator katalogu z projektami, a Opt_trunk to nazwa katalogu z projektem w /home/zyxist/Projekty. Teraz wystarczy tylko uruchomić ponownie Lighttpd i będzie można zacząć testy.

Przełączanie się między wersjami PHP realizowane jest przez subdomeny, jak zresztą wspominałem wyżej. W powyższym przykładzie nasz projekt dostanie trzy lokalne subdomeny: opt.trunk.projects.php52.lh, opt.trunk.projects.php53.lh i opt.trunk.projects.php60.lh. Zależnie od tego, jaką z nich wpiszemy w przeglądarce, przetworzenie strony zostanie skierowane do odpowiedniej wersji PHP, zaś my zyskujemy możliwość prostego testowania naszego skryptu na różnych wydaniach. Myślę jeszcze nad systemem podpinania kilku subdomen pod jeden projekt, choć to akurat nie powinno sprawić większych trudności.

PEAR

Następny w kolejności do zapakowania jest PEAR - chociaż z samego repozytorium nie wszyscy korzystają, przydatny może być instalator umożliwiający ściągnięcie i kompilację rozszerzeń z PECL. Ponadto warto zauważyć, że swoje kanały PEAR posiada mnóstwo projektów, również tych zupełnie niezwiązanych z "oficjalnymi" paczkami. Możliwość ich instalacji jednym poleceniem z pewnością przyda się wielu osobom. Problem w tym, że dotychczasowy instalator PEAR był po prostu masakryczny. Pisany jeszcze na PHP4, praktycznie nie da się zmusić do ustawienia w konfiguracji innych ścieżek, niż te, które się podało przy instalacji (a przecież tak właśnie trzeba postąpić, przygotowując pakiet). Na szczęście właśnie ukazało się PHP 5.3.0, wraz z nim PHAR, a wraz z nim zupełnie nowy instalator o nazwie Pyrus. Pozostaje jedynie do pakietu php-runnable wybrać wersję 5.3.0 i można się bawić.

Gdzie to będzie udostępnione?

Warunki i miejsce publikacji to na razie niewiadoma. Pomoc techniczną itd. najprawdopodobniej będę świadczyć w ramach grupy Invenzzia, bo przecież nie po to powstawała cała infrastruktura sieciowa, by wszystko leżało odłogiem, zaś co do repozytorium, spróbuję pewnie dogadać się z ludźmi z repo.archlinux.pl - jeśli ta inicjatywa nadal działa, możliwe, że pakiety pojawią się właśnie tam, a jak nie, to po prostu założę własne repozytorium - w przypadku Arch Linuksa jest to kwestia wydania paru poleceń i skopiowania wszystkiego na FTP.

Zakończenie

Pakiety zostaną opublikowane dość szybko. Cały zestaw muszę skończyć w rozsądnym czasie, ponieważ zaszedłem już dość daleko i po prostu potrzebuję tego do pracy, gdyż na razie jestem pozbawiony możliwości testowania skryptów (no, powiedzmy, że od dzisiaj już niezupełnie, bo podstawowe pakiety są i nawet udało mi się to i owo uruchomić). Mam nadzieję, że zestaw paczek spodoba się innym - w sumie prędzej czy później i tak bym to dla wygody zapakował (prostota aktualizacji), a skoro już się za to biorę, to nic mi przecież nie szkodzi udostępnienie tego innym.

Powrót

Komentarze

Napisał usagiaddict w piątek, 3 lipca 2009 o 22:35

A nie można było tego zrobić za pomocą przekierowań na porty na których pracują poszczególne wersje PHP?
Mniej spektakularna metoda niż Twoja ale również się sprawdza.

Napisał Zyx w sobotę, 4 lipca 2009 o 08:32

Według mnie, nie. Wprawdzie oparcie tego na subdomenach wymaga więcej wpisów w /etc/hosts, ale nadrabia funkcjonalnością w konfiguracji serwera WWW. W tej chwili pojedynczy projekt opisany jest w pliku z hostami Lighttpd pojedynczym wyrażeniem regularnym:

$HTTP["host"] =~ "opt\.20\.projects\.(php52|php53|php60)\.lh" {
	server.document-root="/srv/http/wb_projects/Opt_20/"
}
 


Lighttpd umożliwia dopasowywanie wirtualnych hostów również do parametrów socketu (ip:port), ale obsługiwany jest tam wyłącznie operator równości: ==. Tymczasem programiści mogą chcieć skonfigurować sobie taki projekt - w przypadku Lighttpd i mod_rewrite to nawet jedyna droga do skonfigurowania tego, bo nie ma tu czegoś takiego, jak .htaccess. Bez wyrażeń regularnych musieliby kopiować tę samą konfigurację trzykrotnie. Pomijam już fakt, że dopasowanie robione jest po adresie IP, a nie po hoście, więc użycie jakichkolwiek subdomen odpada... :)

PS. Przypominam, że pole Blog przy dodawaniu komentarzy służy do podawania adresów blogów i proszę się następnym razem do tego stosować.

Pamiętaj, dbaj o kulturę wypowiedzi oraz dyskusji w sieci.

Skomentuj

NickInformacja
E-mailNa wypadek potrzeby kontaktu z autorem (niepublikowany)
BlogNie zapomnij o http://
LayoutNapisz tu, czy widzisz dzienny czy nocny layout.
WpisFormatowanie wiki

Na Zyxist.com panuje swoboda wyrażania opinii oraz krytyki pod dowolnym adresem. Jedyny warunek: musi być ona kulturalna i rzeczowa. Na chamstwo, prostactwo lub jawne obrażanie kogokolwiek nie ma tu miejsca i takie komentarze są bardzo szybko usuwane. Jeśli zamierzasz polemizować z treścią wpisu, wpierw uważnie ją przeczytaj.

© Tomasz "Zyx" Jędrzejewski 2005 - 2010 | Wykonanych zapytań: 2 | Serwer wirtualny zapewnia