[HOW-TO] PHP5.2.3 mit suPHP, eaccelerator, automatische vhost.conf für PLESK

BlackPixel

New Member
Das How To bezieht sich auf einen 1&1 Root L64, Suse 10.1, der zum momentanen Stand Plesk 8.2.0 sowie alle Online Updates bekommen hat

PHP5.2.3 mit suPHP 0.6.2 und eaccelerator installieren und für einzelne, alle oder neu angelegte Vhosts automatisch aktivieren.


Code:
cd /srv/
mkdir software
cd software/

Code:
wget http://de3.php.net/get/php-5.2.3.tar.gz/from/this/mirror
wget http://www.suphp.org/download/suphp-0.6.2.tar.gz
wget http://bart.eaccelerator.net/source/0.9.5.1/eaccelerator-0.9.5.1.tar.bz2

Code:
tar xzf php-5.2.3.tar.gz
tar xzf suphp-0.6.2.tar.gz
bunzip2 eaccelerator-0.9.5.1.tar.bz2
tar xf eaccelerator-0.9.5.1.tar


Pakete über yast2 installieren:

Code:
Apache2-devel
Autoconf
Automake
Curl-devel
Cyrus-sasl-devel
Db42
Fontconfig-devel
Freetype2-devel
Gcc
Gcc-c++
Gd-devel
Glibc-devel
Gmp
Gmp-devel
Libapr1-devel
Libapr-util-devel
Libidn-devel
Libjpeg-devel
Libmcrypt-devel
Libpng-devel
Libstdc++-devel
Libxml2-devel
M4
Mhash
Mhash-devel
Mysql-devel
Openldap2
Openldap2-devel
Openssl-32bit-devel
Openssl-devel
Readline
Readline-devel
Xorg-x11-devel
Zlib-devel



Symlinks anlegen:

Code:
ln -s /usr/lib64/libjpeg.so.62 /usr/lib/libjpeg.so
ln -s /usr/lib64/libpng.so.3 /usr/lib/libpng.so
ln -s /usr/lib/libldap-2.3.so.0 /usr/lib/libldap.so


Header Files kopieren:

Code:
cp /usr/include/apr-1/*.h /usr/include/apache2/


PHP installieren:

Code:
cd php-5.2.3/

Code:
./configure --with-exec-dir=/opt/php5.2.3-fastcgi/bin --prefix=/opt/php5.2.3-fastcgi --includedir=/opt/php5.2.3-fastcgi/include --datadir=/opt/php5.2.3-fastcgi/lib --bindir=/opt/php5.2.3-fastcgi/bin  --without-pear --with-mime-magic --with-mhash --with-ldap --with-gmp --with-gettext --enable-track-vars --with-mcrypt --with-gd --with-curl --disable-cli --with-mysql=/usr/include/mysql --enable-magic-quotes --enable-zend-multibyte --enable-zip --enable-libxml --enable-sysvmsg --enable-sysvsem --with-zlib --with-openssl --with-bz2 --enable-sysvshm --enable-sockets --enable-soap --enable-shmop --enable-mbstring --enable-ftp --enable-exif --enable-dbase --enable-calendar --enable-bcmath --enable-memory-limit --enable-force-cgi-redirect --with-pcre-regex --without-sqlite --without-mm --enable-fastcgi --enable-mbstr-enc-trans --enable-track-vars --enable-trans-sid --enable-wddx --enable-yp --with-jpeg-dir=/usr --with-png-dir=/usr --with-tiff-dir=/usr --with-ttf --with-freetype-dir=yes --with-zlib=yes --with-gd

Code:
make
make install


suPHP installieren
Code:
cd ..
cd suphp-0.6.2/

Code:
./configure  --sysconfdir=/etc --with-apxs=/usr/sbin/apxs2 --with-min-uid=500 --with-min-gid=500 --with-apache-user=wwwrun --with-php=/opt/php5.2.3-fastcgi/bin/php --with-setid-mode=owner --with-logfile=/var/log/apache2/suPHP.log --with-apr=/usr/bin/apr-1-config --includedir=/usr/include/apr-1/


Code:
make
make install


Extension File in den Modules Ordner legen:
Code:
cp src/apache2/.libs/mod_suphp.so.0.0.0 /usr/lib64/apache2/mod_suphp.so


Code:
mod_suphp als zu ladendes Modul in der apache2 config angeben:
Code:
vi /etc/sysconfig/apache2


Im Abschnitt Apache_Modules den Eintrag hinzufügen
Code:
APACHE_MODULES="… suphp“


Logfile anlegen:
Code:
touch /var/log/apache2/suphp_log


Config anlegen:
Code:
touch /etc/suphp.conf

Die Config kann so aussehen:
Code:
[global]
logfile=/var/log/apache2/suphp_log
loglevel=info
webserver_user=wwwrun
docroot=/srv/www/vhosts
env_path=/bin:/usr/bin
umask=0030
min_uid=500
min_gid=500

; Security options
allow_file_group_writeable=false
allow_file_others_writeable=false
allow_directory_group_writeable=false
allow_directory_others_writeable=false

;Path to chroot() to before executing script
;chroot=/mychroot

;Check wheter script is within DOCUMENT_ROOT
check_vhost_docroot=true

;Send minor error messages to browser
errors_to_browser=false

[handlers]
;Handler for php-scripts
x-httpd-php=php:/opt/php5.2.3-fastcgi/bin/php-cgi

;Handler for CGI-scripts
x-suphp-cgi=execute:!self


eaccelerator installieren:
Code:
cd /srv/software/eaccelerator-0.9.5.1/
bunzip2 eaccelerator-0.9.5.1.tar.bz2
tar xf eaccelerator-0.9.5.1.tar
cd eaccelerator-0.9.5.1/
export PHP_PREFIX="/opt/php5.2.3-fastcgi/"
$PHP_PREFIX/bin/phpize
Code:
./configure --enable-eaccelerator=shared --with-php-config=$PHP_PREFIX/bin/php-config
Code:
make
make install


und in den php extension Ordner legen:
Code:
cp /opt/php5.2.3-fastcgi/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so /usr/lib64/php5/extensions/


php.ini bereitstellen und anpassen:

Code:
mkdir /etc/phpvirtual/php5-ini-std/
cp /etc/php5/apache2/php.ini /etc/phpvirtual/php5-ini-std/

vi /etc/phpvirtual/php5-ini-std/php.ini

eaccelerator config eintragen:
Code:
zend_extension="/usr/lib64/php5/extensions/eaccelerator.so"
eaccelerator.shm_size="128"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"


vhost skeleton anlegen: (für neue Webs!)
Code:
mkdir /srv/www/vhosts/.skel/0/conf/
touch /srv/www/vhosts/.skel/0/conf/vhost.conf



in die vhost.conf können wir folgende Konfiguration eintragen:
Code:
<Directory /srv/www/vhosts/@domain_name@/httpdocs>

	php_admin_flag engine off
	suPHP_Engine On
	suPHP_ConfigPath "/etc/phpvirtual/php5-ini-std"
	AddHandler x-httpd-php .php
	suPHP_AddHandler x-httpd-php

</Directory>

Für vorhandene vhosts die configuration 1:1 in die vhost.conf so übernehmen, lediglich den Platzhalter für Domainname ersetzen.

Configänderung an PSA mitteilen:
Code:
/usr/local/psa/admin/sbin/websrvmng -a -v


Webserver neu starten:
Code:
rcapache2 configtest
rcapache2 restart


Über die vhost.conf können dann alternative php.ini Pfade angegeben werden. Das ist ganz nützlich, um zB vhosts mit statischen Seiten anders zu konfigurieren als vhosts mit TYPO3 z.B. (memory_limt, register_globals und so weiter)

Überprüfen ob alles geklappt hat:

In einem VHost die Datei info.php anlegen:
Code:
su username-des-vhost
Code:
touch /srv/www/vhosts/domain.tld/httpdocs/info.php
vi /srv/www/vhosts/domain.tld/httpdocs/info.php

Inhalt:
Code:
<?php
phpinfo();
?>

Über den Browser die Datei aufrufen und folgendes Überprüfen:
Code:
PHP Version 5.2.3
Server API: 				CGI/FastCGI
Loaded Configuration File 		/etc/phpvirtual/php5-ini-std/php.ini



Am Ende der ersten Tabelle auf den Zend hinweis achten, der den eaccelerator beinhalten muss:

Code:
This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
    [B]with eAccelerator v0.9.5.1, Copyright (c) 2004-2006 eAccelerator, by eAccelerator[/B]

Viel Spass beim nachbasteln!
 
Hi,
hat hier jemand eine Ahnung warum obwohl ich --with-setid-mode=owner beim compilieren angeschaltet habe immernoch im paranoid modus lande? Ich brauche immer suPHP_UserGroup <user> <group> damit suphp laeuft.

ausserdem ist @domain_name@ der einzige platzhalter hier oder gibt es auch noch was fuer group und user sonst waers ja nich schlimm

gruss

ps: anfangs wars mal in paranoid compiliert kann es daran liegen das er es nimmer ueberschreibt?
 
Pfad zur phpinfo?

Anscheinend hast Du Dich nicht so ganz an meine Anleitung gehalten, oder lädst Du noch ein altes suphp.so im Apache? Hast Du ein aktuelles suphp, also das 062er genommen?

Was sagt die suphp.log wenn Du usergroup und user auskommentierst? Wir das Logfile aus meinem HOW-TO überhaupt geschrieben?

Wie seiht Dein configure von php sowie con suphp aus?
 
Ich muss Dich leider vertrösten, habe keine Messungen gemacht.
Es gibt zu diesem Thema allerdings ewig lange Diskussionen zwischen beiden Parteien.

Meiner Meinung nach ist suphp "a bissel" langsamer als mod_php. Aus sich der Serversicherheit nehme ich diesen minimalen Verlust aber gerne in kauf. Der eaccelerator allerdings reisst es wieder ein wenig aus.

Apropos zur Performance:

Ich habe in diesem tut den eaccelerator als Zend extension eingebunden. Dass war übrigens das einzigste was ich nachgemessen habe. Als PHP modul gingen die Zahlen von ab2 "dezent" zurück.

Gruß!
 
hab nochmal alles neu kompiliert und alles rumkopiert bekomme aber immernoch

[Thu Aug 09 18:53:52 2007] [error] [client 129.217.175.51] No user or group set - set suPHP_UserGroup, referer: http:/

das heisst doch das er nich im owner mode is oder?
 
Noch immer möchte ich einen Pfad zur php.info haben. Bitte bei dem host die Usergroup setzen.

Und bitte die anderen Fragen aus #7 auch beantworten. Würdest Du meine Anleitung so zu 100% befolgen, hättest Du das Problem nicht. Dein Problem deutet auf eine abweichung zu meinem Tutorial hin.

Wird denn überhaupt das php dass Du gerade kompiliert hast, verwendet?
Wenn alte Ordner von vorhergehenden Versuchen vorhanden sind, diese auf jeden Fall löschen. AUCH den Ordner mit den sourchen jeweils neu auspacken!
 
so ich nochmal also :-)

ich habe suphp nochmal geloescht neu entpackt und nun geht es auch im owner modus.

nun bleibt mit noch ein problem ich habe der einfachheithalber einfach php5-fastcgi aus yast genommen doch nun funktioniert z.b. bei joomla der backend login nich mehr der frontendlogin schon. ich weiss nich ob du joomla kennst aber ich log mit ein und sehe wieder den login screen. bei php dateiupload bekomme ich immer err_2 wenn ich mir mit print_R die variable $_FILES anschaue. ich benutze die php.ini aus /etc/php5/fastcgi

gruss

ps: den eaccelerator hab ich auch nich installiert
 
was sagt die errorlog des apachen, des vhost und hat die suphp.log auch einen Eintrag?

Du verwendest also ein Yast php, nicht das aus dem tutorial. Verwendest Du nun auch das suphp oder nicht?

Was ist mit sessions? Funktionieren die sessions? Was für eine php version hast Du nun, die alte 5.1.2?

Zeig bitte die Log auszüge!
 
Morgen,

so bin wieder in der Uni. Also ich habe nun mal weiter gebastelt und das Auslesen von Log files sollte ich mir mal angewoehnen :D

Wie dem auch sei weiss ich nun warum das alles nicht klappte. In der php.ini Datei muss
Code:
session.save_path = "/tmp"
noch gesetzt werden sonst koennen die sessions nicht richtig gespeichert werden. Bei mir war dort der Eintrag auf /var/lib/php5 gesetzt wo nicht suphp "clients" nicht drauf schreiben konnten.

Was vielleicht auch nicht schlecht ist fuer die die z.B. Joomla nutzen den erlaubten Speicherzugriff zu erhoehen
Code:
memory_limit = 32M

Danke fuer die Hilfe und super Howto!

ps: Jo ich nutze noch 5.1.2 . kannst du mir vielleicht sagen wie ich bei OpenSuSE 10.2 updateserver reinbekomme? Ich hatte vorher immer Gentoo und Debian und kome daher nich so recht mit Yast klar. Ausserdem waere ein Server mit Aktueller Software im groesseren Umfang nicht schlecht. Danke fuer die Hilfe nochmal.
 
Last edited by a moderator:
Hallo BlackPixel,

ich habe genau dieselbe Config wie Du vor mir (10.1 / 64er / Plesk 8.20)

Bei mir steigt er mit der Meldung bei make aus:

Code:
configure: error: Cannot find libmysqlclient under /usr.
Note that the MySQL client library is not bundled anymore!

Was hast Du evtl. anders angegeben für libmysqlclient ?
 
Eigenkorrektur - folgendes hat geholfen:

Hallo. Bei den 64-Bit-Versionen gibt es immer kleine Problemchen.
Diese sind aber auch recht leicht zu lösen.
Also, wie du es bereits gemacht hast: mysql-devel installieren.
Dann begibst du dich bitte nach /usr/include/mysql und dort erstellst du die Verzeichnisse "lib" und "include". Nun kopiere alle .h (header)-Files nach "include":
Code:

cp *.h ./include/

Dann begibst du dich nach /usr/lib64 und suchst dort nach libmysqlclient.so. Bitte beachten: dies ist auch nur ein Symlink auf eine ähnlich lautende Datei. Am besten du schaust dir die Geschichte mit dem Midnight Commander an:
Code:

mc

Dann siehst du gleich wohin der Symlink führt. Das "richtige" .so File kopierst du dann nach /usr/include/mysql/lib. Bitte beachte, dass die Datei gegebenenfalls in libmysqlclient.so umbenannt werden muss.

von server4downs
 
Mittels der Konfiguration im vhost.conf:

Code:
<Directory /srv/www/vhosts/@domain_name@/httpdocs>

	php_admin_flag engine off
	suPHP_Engine On
	suPHP_ConfigPath "/etc/phpvirtual/php5-ini-std"
	AddHandler x-httpd-php .php
	suPHP_AddHandler x-httpd-php

</Directory>

Gruß!
 
Jo thx, manchmal sieht man den Wald vor lauter Bäumen nicht:

suPHP_ConfigPath "/etc/phpvirtual/php5-ini-std" eretze ich einfach durch den Pfad wo ich die angepasste PHP.INI hinlege.

D.h. ich muss für jeden VHOST welcher nicht die Standard PHP.INI nutzen soll/darf eine eigen anlegen.

Wie ist das mit den OPENBASE_DIRECTORY z.B. in der allgemeinen PHP.INI, da ist ja nichts gesetzt, ist dass dann ein sicherheitsrisko für die "normalen" VHOST ?
 
Noch eine weitere Frage zum eAccelerator, der müsste doch dann (im vorhandenen) Directory die Daten ablegen welche er cached ?



/tmp/eaccelerator
 
Back
Top