Der neue Server: Teil 4 apache
Nachfolgend stelle ich vor, wie man apache2 inkl. php, sowie ruby über fastcgi installiert. php, bzw. ruby über fastcgi einzubinden bietet den Vorteil, dass die Skripts immer mit Benutzerrechten und nicht mit den rechten des Webserver ausgeführt werden. Zudem kann man so für jeden vHost eine eigene php.ini anlegen.
Installation und Konfiguration
aptitude install apache2 apache2-suexec libapache2-mod-fcgid php5-cgi
Dieser Befehl installiert das apache2- und php5-Grundsystem. Ruby werden wir später installieren, sobald apache und php funktionieren.
Nun aktivieren wir einige apache2-mods:
a2enmod ssl a2enmod rewrite a2enmod suexec a2enmod fcgid /etc/init.d/apache2 force-reload
Nun legen wir noch einen Benutzer an, unter dem Skripts ausgeführt werden, die nicht direkt einem bestimmten Benutzer zugeordnet werden können (wichtig ist, dass dieser Benutzer eine GID>100 hat):
adduser --system --group --no-create-home www-user
Jetzt ist es an der Zeit die vHost-Strukturen unter "/var/www/" anzulegen. Für jeden vHost wird ein eigener Ordner erstellt und enthält mehrere Unterordner:
- conf - enthält die php.ini, sowie die fcgi-Konfiguration
- docs - das Webroot
- log - enthält die Log-Dateien
- tmp - für temporäre Dateien
mkdir /var/www/example.com cd /var/www/example.com/ mkdir conf mkdir docs mkdir logs mkdir tmp cd /var/www/ chmod 755 -R example.com
Als Nächstes legen wir unter "/var/www/example.com/conf" einen Symlink auf "/etc/php5/cgi/php.ini" an:
ln -s /etc/php5/cgi/php.ini /var/www/example.com/conf/php.ini
Das hat den Vorteil, dass alle vHosts standardmäßig die gleiche php.ini benutzen, man diese aber sehr leicht austauschen kann, falls man bestimmte vHost-spezifische Anpassungen vornehmen muss.
Dann legen wir noch einen fcgi-Starter an:
/var/www/example.com/conf/php-fcgi.conf:
#!/bin/sh PHPRC="/var/www/example.com/conf" export PHPRC #PHP_FCGI_CHILDREN=3 #export PHP_FCGI_CHILDREN exec /usr/bin/php5-cgi
chmod 755 /var/www/example.com/conf/php-fcgi.conf
Wenn man nun einen neuen vHost erstellt, muss nur dieser komplette Ordner kopiert werden, die Zeile "PHPRC="/var/www/example.com/conf" angepasst werden, sowie das immutable-bit für die Datei php-fcgi.conf, bzw. php.ini gesetzt werden.
chattr +i /var/www/<ORDNERNAME>/conf/php-fcgi.conf chattr +i /var/www/<ORDNERNAME>/conf/php.ini
Jetzt muss nur noch eine vHost-Konfiguration für apache angelegt werden. Hierfür legen wir unter "/etc/apache2/sites-available/example.com" ein Template an, welches dann kopiert und angepasst werden kann:
<VirtualHost *:80> SuExecUserGroup {USER} {GROUP} ServerName {SRV_NAME} # ServerAlias {SRV_ALIAS} ServerAdmin {SRV_ADMIN} DocumentRoot {DOC_ROOT} AddHandler fcgid-script .php <Directory {DOC_ROOT}> FCGIWrapper {CONF_ROOT}/php-fcgi.conf .php Options +SymLinksIfOwnerMatch +MultiViews +ExecCGI -Indexes AllowOverride FileInfo Order allow,deny allow from all </Directory> ErrorLog {LOG_ROOT}/error.log CustomLog {LOG_ROOT}/access.log combined LogLevel warn ServerSignature Off </VirtualHost>
Um den vHost zu aktivieren, muss man noch folgenden Befehl absetzen:
a2ensite <VHOST_NAME>
Danach noch die apache-Konfiguration neu einlesen und der vHost ist einsatzbereit.
Quellen:
http://wiki.hetzner.de/index.php/Apache_PHP5_fcgi_und_SuExec
php-Addons
aptitude install php5-gd php5-imagick php5-mcrypt php5-mysql php5-pgsql php5-imap php5-suhosin
gd und imagick sind hierbei Bibliotheken zur Bildmanipulation, mcrypt bietet Verschlüsselungsfunktionen, mysql und pgsql sind für den Datenbankzugriff, imap bietet Funktionen zur Interaktion mit einem IMAP-Server und suhosin ist eine Sicherheitserweiterung für php.
ruby
Nun folgt noch die Installation von ruby und ruby on rails - ebenfalls als fastcgi:
aptitude install ruby rdoc irb rubygems libfcgi-ruby1.8 libmysql-ruby libpgsql-ruby rails libopenssl-ruby1.8
Da fastcgi schon konfiguriert ist, funktioniert ruby, bzw. RoR ohne weitere Konfiguration.
rails über gem installieren
Alternativ kann man rails auch über gem, anstatt über aptitude installieren. Dazu führt man diesen Befehl aus:
gem install railsUnd ändert anschließend "/etc/profile" und nimmt "/var/lib/gems/1.8/bin" in $PATH mit auf (vor "export PATH" hinzufügen):
# add rails to path PATH="$PATH:/var/lib/gems/1.8/bin"
