Hallo,
Nachdem ich nun selbst etwas rumgetüftelt habe, habe ich nun ein Howto geschrieben, wie man PHP als FCGI laufen lassen kann im Zusammenspiel mit Confixx.
Grundlagen auf die ich mich stütze:
1.) Confixx mit fcgid • puzich.com :: I took the blue pill
2.) http://www.puzich.com/wp-content/sunlog/images/php-fcgi-starter_create.phps
3.) http://www.aaron-spettl.de/ubuntu/debian-etch-apache2-php5-fcgi-suexec.php
Step 1:
PHP FCGI und Konsorten installieren:
Danach will Debian / Ubuntu wahrscheinlich mod_php und den Prefork deinstallieren...das geht soweit in Ordnung
Step 2:
In den Confixx Scripts alles auf suPHP umstellen:
Dort unter Punkt 2, Webserver: mod_php ausschalten, suPHP anschalten.
Den Adminbereich verlassen.
Danach:
(das dauert was)
Step 3:
Apache2 anpassen:
Am Ende einfügen:
Die o.g. *.conf Datei erstellen:
Step 4:
PHP Fcgi Wrapper Scripte anpassen.
Wir nehman dazu das Script von dieser Seite:
http://www.puzich.com/wp-content/sunlog/images/php-fcgi-starter_create.phps
Wir kopieren also den Inhalt der Webseite in die Datei:
Für den Gebrauch mit Confixx hab ich die Datei etwas abgeändert:
Da bei mir alle Kunden unterhalb von /var/www liegen. Also /var/www/web1 etc.
Aus:
Wird:
Weil die Schleife sonst dort abricht, aber die Verzeichnisse bestehen ja schon.
Die darauffolgenden Zeilen kommentieren wir aus:
Dann, aus:
Wird:
Und aus:
wird:
Damit sind wir schon mit dem Bearbeiten des Scripts fertig. Somit liegen die Startscripte für den Wrapper jetzt in dieser Form vor:
Jetzt könnte man einweden: "Ja toll und was ist wenn ein Confixx Kunde per FTP die Datei löscht?" Antwort: Kann nichts passieren, da das Erstell-Scripte diese Dateien mit dem "immutable bit" sichert. Sprich: Die Datei gehört zwar dem jeweiligen User, aber sie und selbst der root können die Datei nicht löschen. (Lediglich der Root kann dieses Bit durch chattr -i ... wieder entziehen und dann löschen).
Soweit so gut...fertig für einen ersten Testlauf?
(oder halt neustarten, wenn er zuvor beendet wurde).
Jetzt sollte alles wieder laufen. Wenn dem so ist, müssen wir jetzt nur noch sicherstellen, dass bei der Erstellung eines neuen Users, auch die Wrapperscripte angelegt werden etc.
Das macht man am besten, indem man das Script per Cronjob aufruft. Sollte jemand hier an diesem Punkt einen besseren Vorschlag haben: Bitte immer her damit. Eigentlich braucht das Script ja lediglich bei dem Ereignis "on new confixx user" laufen
Anmerkung: Wir müssen das Script umändern, so dass die Wrapperscripte unterhalb des jeweiligen Confixxusers liegen, weil es sonst zu dem suEXEC Fehler kommt: "cannot get docroot information (/var/www)", da /var/www und andere Sachen nicht dem jeweiligen User gehören die gerade das Script ausführen wollen sondern root oder sonst wem.
Verbesserungsvorschläge sind jederzeit willkommen.
Nachdem ich nun selbst etwas rumgetüftelt habe, habe ich nun ein Howto geschrieben, wie man PHP als FCGI laufen lassen kann im Zusammenspiel mit Confixx.
Grundlagen auf die ich mich stütze:
1.) Confixx mit fcgid • puzich.com :: I took the blue pill
2.) http://www.puzich.com/wp-content/sunlog/images/php-fcgi-starter_create.phps
3.) http://www.aaron-spettl.de/ubuntu/debian-etch-apache2-php5-fcgi-suexec.php
Step 1:
PHP FCGI und Konsorten installieren:
Code:
apt-get install php5-cgi apache2-mpm-worker libapache2-mod-fcgid
Step 2:
In den Confixx Scripts alles auf suPHP umstellen:
Code:
/pfad/zu/confixx/admin/admin.pl
Den Adminbereich verlassen.
Danach:
Code:
/pfad/zu/confixx/admin/updates/update_3x.pl
Step 3:
Apache2 anpassen:
Code:
vim /etc/apache2/apache2.conf
Code:
Include /etc/apache2/confixx_special_vhost.conf
AddHandler fcgid-script .php
AddHandler fcgid-script .php4
AddHandler fcgid-script .php5
AddHandler fcgid-script .phtml
Die o.g. *.conf Datei erstellen:
Code:
touch /etc/apache2/confixx_special_vhost.conf
Step 4:
PHP Fcgi Wrapper Scripte anpassen.
Wir nehman dazu das Script von dieser Seite:
http://www.puzich.com/wp-content/sunlog/images/php-fcgi-starter_create.phps
Wir kopieren also den Inhalt der Webseite in die Datei:
Code:
/usr/local/bin/confixx_fcgi.php
Für den Gebrauch mit Confixx hab ich die Datei etwas abgeändert:
Code:
$conf_path = '/var/www/';
Aus:
Code:
// user-dir exists?
if ( !file_exists($user_path) ) {
Code:
// user-dir exists?
if ( file_exists($user_path) ) {
Die darauffolgenden Zeilen kommentieren wir aus:
Code:
// mkdir($user_path);
// chown($user_path, $data['kunde']);
// chgrp($user_path, $data['kunde']);
// chmod($user_path, 0755);
Dann, aus:
Code:
fwrite($fh, '<Directory "/home/httpd/htdocs/' . $data['kunde'] . '/html">'."\n");
Code:
fwrite($fh, '<Directory "/var/www/' . $data['kunde'] . '/html">'."\n");
Code:
fwrite($fh, ' FCGIWrapper /home/httpd/php-fcgi-scripts/' . $data['kunde'] . '/php5-fcgi-starter .php'."\n");
Code:
fwrite($fh, ' FCGIWrapper /var/www/' . $data['kunde'] . '/php5-fcgi-starter .php'."\n");
Damit sind wir schon mit dem Bearbeiten des Scripts fertig. Somit liegen die Startscripte für den Wrapper jetzt in dieser Form vor:
Code:
/var/www/web1/php5-fcgi-starter
Soweit so gut...fertig für einen ersten Testlauf?
Code:
php /usr/local/bin/confixx_fcgi.php
/etc/init.d/apache2 force-reload
Jetzt sollte alles wieder laufen. Wenn dem so ist, müssen wir jetzt nur noch sicherstellen, dass bei der Erstellung eines neuen Users, auch die Wrapperscripte angelegt werden etc.
Das macht man am besten, indem man das Script per Cronjob aufruft. Sollte jemand hier an diesem Punkt einen besseren Vorschlag haben: Bitte immer her damit. Eigentlich braucht das Script ja lediglich bei dem Ereignis "on new confixx user" laufen
Anmerkung: Wir müssen das Script umändern, so dass die Wrapperscripte unterhalb des jeweiligen Confixxusers liegen, weil es sonst zu dem suEXEC Fehler kommt: "cannot get docroot information (/var/www)", da /var/www und andere Sachen nicht dem jeweiligen User gehören die gerade das Script ausführen wollen sondern root oder sonst wem.
Verbesserungsvorschläge sind jederzeit willkommen.