Xampp Multidomain
Aus Contao Community Documentation
Dieses Tutorial beschreibt die Einrichtung einer lokalen Entwicklungsumgebung mit XAMPP für mehrere parallele oder mehrsprachige Contao Installationen.
Inhaltsverzeichnis
Einrichtung
Bei dieser Anleitung wird mit einem portablen XAMPP Zip-Paket in Windows gearbeitet (aktuelle Version: 1.7.3). XAMPP steht für Apache, MySQL, PHP und Pearl und stellt somit ein vorkonfiguriertes Webserver-Paket bereit. Neben den eigentlichen Servern bringt XAMPP auch ein paar nette Konfigurationstools wie den PhpMyAdmin oder einen Mailserver mit. Die Pakete gibt es für Windows, Linux sowie für den Mac.
Das Zip-Paket wird in C:\webdev entpackt, was auch ausdrücklich empfohlen wird. Gerade bei Verzeichnissen mit Leer- oder Sonderzeichen (z. B. C:\Program Files\xampp) könnte es später zu Problemen kommen. Nach dem Entpacken ruft man die Datei C:\webdev\xampp\setup_xampp.bat, welche die Konfiguration von XAMPP übernimmt.
Nach erfolgter Konfiguration wird das Setup-Script mit Eingabe eines x beendet.
Anschließend ruft man die Datei C:\webdev\xampp\xampp-contol.exe auf und startet die Module Apache, MySQL und Mercury.
Wenn alle Module gestartet sind, wird dieser Status im Control Panel angezeigt.
Ruft man jetzt die Adresse http://localhost im Browser auf, sollte man das XAMPP-Logo mit einer Sprachauswahl sehen. Nach Auswahl der entsprechenden Sprache erscheint die eigentliche XAMPP-Seite, bei der unter dem Menüpunkt Status Informationen über einzelne Module ausgegeben werden.
Wichtig ist hier nur, dass MySQL und PHP AKTIVIERT ist. Der Menüpunkt phpinfo() zeigt viele Informationen über die installierte PHP-Version und deren Module an; hier sollte eine Version ab 5.2 zu sehen sein.
Zum Schluss sollte man noch über die Seite http://localhost/security/xamppsecurity.php das ROOT-Passwort für den MySQL-Server setzen. Nebenbei kann man auch das XAMPP-Verzeichnis mit einem Passwortschutz versehen. Diese Aktionen sind zwar für die Funktionalität nicht zwingend nötig, aber aus Sicherheitsgründen zu empfehlen. "Paranoia is applied security" … Nach dem Ändern des Passwortes muss über das XAMPP Control Panel der MySQL-Server neu gestartet werden, damit die Passwortänderung wirksam wird.
Installation einer Contao Umgebung
Um Contao installieren zu können, muss zuerst ein Contao-Paket von der Projekt-Homepage heruntergeladen und in das Verzeichnis C:\webdev\xampp\htdocs\contao entpackt werden.
Anschließend wird über die Adresse http://localhost/phpmyadmin/ eine neue Datenbank inkl. neuen Datenbank-Benutzer angelegt. Aus Sicherheitsgründen sollte man für die Datenbank den ROOT-Benutzer nicht verwenden.
Über den Reiter Rechte kommt man zur Benutzerübersicht. In dieser Übersicht findet man einen Button Neuen Benutzer hinzufügen. Hier kann man sehr bequem einen Benutzer samt Datenbank anlegen. Als Host wählt man immer Lokal, da Webserver und Datenbanksystem auf dem selben Rechner laufen.
Jetzt kann mit der Installation von Contao begonnen werden.
Im Grunde könnte man auf diese Art beliebig viele Contao-Umgebungen parallel betreiben, natürlich in jeweils verschiedenen Verzeichnissen. Hier bestehen aber zwei grundsätzliche Probleme:
- Contao ist in einem Unterverzeichnis installiert, was an einigen Stellen zu Problemen führen kann. Contao ist hier aber sehr kulant.
- Auf diese Art ist pro Contao-Umgebung nur eine Seite realisierbar.
Ausbau auf verschiedene Hostnamen
Um die oben genannten Probleme zu beheben, kann für jede Contao Umgebung ein eigener Hostnamen angelegt werden, also ein Alias zu localhost. Hostnamen sind für den Menschen da und werden vom Betriebssystem automatisch zu einer IP-Adresse aufgelöst. Der localhost ist dabei voreingestellt und zeigt immer auf 127.0.0.1, was per Definition immer der Computer ist, auf dem die Auflösung statt findet. Diese Zuordnung macht sich der Webserver zu nutze und unterscheidet damit die verschiedenen Websites.
hosts-Datei
Es gibt verschieden Instanzen der Namensauflösung, der erste Schritt hierbei ist in jedem Fall die sogenannte hosts-Datei, welche in jedem System existiert und erst wenn hier keine Entsprechung gefunden werden konnten, werden weitere DNS-Server befragt.
Um nun eigene Hostnamen für die IP 127.0.0.1 einzurichten, öffnet man mit einem Editor die Datei hosts (ohne Endung), welche bei
- Windows unter C:\WINDOWS\system32\drivers\etc\
- Linux und Mac unter /etc/
zu finden ist. Um die Datei zu ändern, sind Administrator bzw. ROOT Rechte notwendig.
Für jede Hostnamen<->IP-Adresse-Kombination steht eine Zeile, wobei die Hostnamen eindeutig sein müssen. Es dürfen also keine zwei identische Hostnamen auf eine IP-Adresse zeigen.
Öffnet man nun eine der neu angelegten Hostnamen im Browser, z.B. http://xampp, dann sollte die gleiche Ausgabe wie bei Aufruf von http://localhost erscheinen. Bei der Wahl der Hostnamen sollte man darauf achten, dass keine Überschneidung mit reell existierenden Domains entstehen. Trägt man beispielsweise
127.0.0.1 www.contao.org
in die hosts-Datei ein, wird man von nun ab den lokalen Webserver unter der Adresse www.contao.org erreichen, und nicht mehr die Contao-Website.
Es gibt einige spezielle hosts-Editoren, die das Editieren erleichtern sollen. Google weiß mehr darüber.
vHost-Konfiguration
Um die verschiedenen Hostnamen den unterschiedlichen Contao-Umgebungen zuzuweisen, muss der Webserver entsprechend konfiguriert werden. Über die sogenannten virtuellen Hosts pflegt der Apache die Unterscheidung zwischen den einzelnen Umgebungen.
Hierzu stellt XAMPP die Konfigurationsdatei C:\webdev\xampp\apache\conf\extra\httpd-vhosts.conf bereit, die ebenfalls per Editor bearbeitet wird. Man kann hier die Gelegenheit nutzen, um das htdocs-Verzeichnis mit den Contao-Dateien an einen anderen Ort zu legen, z.B. C:\webdev\webfiles. Die restlichen XAMPP-htdocs sollte man unberührt lassen.
Zuerst muss man den Apache anweisen, virtuelle Hosts über die Hostnamen aufzulösen. Dazu wird das Kommentarzeichen vor NameVirtualHost entfernt.
# # Use name-based virtual hosting. # NameVirtualHost *:80
Die Zugriffsrechte für das Web-Verzeichnis schränken wir entsprechend ein:
# Zugriff auf das webfiles-Verzeichnis nur vom lokalen Rechner zulassen <Directory C:/webdev/webfiles> Order deny,allow Allow from 127.0.0.1 AllowOverride All </Directory>
Jetzt erstellt man den ersten vHost-Eintrag. Diesen benutzt man für das normale localhost-Verhalten. Es sollen also einfach alle Dateien aufgelistet werden. Da dies der erste vHost-Eintrag ist, erhält er auch eine Sonderstellung. Passt kein anderer vHost-Eintrag auf die Anfrage, wird dieser stellvertretend benutzt.
Ein weiteres Gimmik ist das Rewrite-Script. Es dient dazu, Subdomains auf Verzeichnisse abzubilden. Beispielweise wird die Anfrage http://verzeichnis.local/index.php auf die Datei C:\webdev\webfiles\*verzeichnis*\index.php abgebildet. Dies hat den großen Vorteil, dass ein neuer Subdomain-vHost ohne Anpassung der Serverkonfiguration erstellt werden kann. Es muss lediglich das Verzeichnis erstellt werden.
### Default vHost <VirtualHost *:80> DocumentRoot C:/webdev/webfiles ServerName localhost <Directory C:/webdev/webfiles> Options +Indexes </Directory> # Der vHost soll auch alle Anfragen annehmen, die mit ".local" enden. ServerAlias *.local # Script zur Umleitung in das Verzeichnis, welches über dem Präfix von ".local" referenziert wird # Bsp.: neu.local nutzt als DocumentRoot C:/webdev/webfiles/neu UseCanonicalName Off RewriteEngine On RewriteCond %{HTTP_HOST} ^[^.]+\.local$ RewriteCond %{REQUEST_URI} !^/icons RewriteRule ^(.+) %{HTTP_HOST}$1 [C] RewriteRule ^([^.]+)\.local(.*) C:/webdev/webfiles/$1$2 </VirtualHost>
Nun wird ein vHost zum Zugriff auf die XAMPP-Weboberfläche erstellt:
### XAMPP vHost <VirtualHost *:80> DocumentRoot c:/webdev/xampp/htdocs ServerName xampp </VirtualHost>
Ein vHost zum Zugriff auf eine Contao-Umgebung:
### contao vHost <VirtualHost *:80> DocumentRoot c:/webdev/webfiles/contao ServerName contao </VirtualHost>
Diese vHost dient zum Zugriff auf das Verzeichnis multilang. Man achte auf den ServerAlias, welcher es ermöglicht, beliebige Subdomain-Hostnamen der Form xxx.multilang anzulagen (de.multilang, en.multilang,...).
### multilang vHost <VirtualHost *:80> DocumentRoot c:/webdev/webfiles/multilang ServerName multilang ServerAlias *.multilang </VirtualHost>
Zusammenfassung der Syntax:
- Ein <VirtualHost *:80>-Block pro vHost
- ServerName gibt den verwendeten Hostnamen an
- ServerAlias gibt weitere Hostnamen an, für die dieser vHost gilt. Hier sind Wildcards erlaubt
- DocumentRoot steht für das physische Verzeichnis der Dateien
Natürlich gibt es noch eine Vielzahl weiterer Konfigurationsoptionen, diese können in der Apache-Dokumentation nachgelesen werden.
Nachdem die Datei angepasst wurde, wird der Syntax in der Eingabeaufforderung mit httpd.exe -S überprüft (unter C:\webdev\xampp\apache\bin). Sind keine Fehler aufgetreten, kann der Webserver über das XAMPP Control Panel neu gestartet werden.
Jetzt sollten folgende vHost aktiv sein:
- http://localhost -> C:\webdev\webfiles - Mit Auflistung des Inhalts. Praktisch, wenn man für etwas Kleines keinen extra vHost anlegen möchte.
- http://contao -> C:\webdev\webfiles\contao
- http://[ordner].local -> C:\webdev\webfiles\[ordner] - wobei [ordner] beliebig sein kann, es darf nur kein Punkt oder Sonderzeichen enthalten sein. Damit hat man praktisch einen Wildcard-vHost ohne wirklich die Serverkonfiguration ändern zu müssen. Wichtig: [ordner].local muss auch in der hosts-Datei notiert werden.
- http://xampp -> C:\webdev\xampp\htdocs - Über diesen vHost kann man auf die XAMPP-Weboberfläche zugreifen.
- http://*.multilang -> C:\webdev\webfiles\mutlilang, auch hier kann man als Subdomain alles angeben, was man in der Hosts-Datei notiert hat. Besonderheit zum oberen Beispiel: Es wird immer das selbe Verzeichnis und damit die selbe Contao-Umgebung referenziert. Damit kann man also mehrsprachige oder mehrseitige Auftritte erstellen.
Sicherheitseinstellungen - Apache
Abschließend werden noch ein paar Einstellungen zur Sicherheit vorgenommen.
Zugriff von außen sperren
In der Datei C:\webdev\xampp\apache\conf\httpd.conf befindet sich ab der Zeile 42:
# Change this to Listen on specific IP addresses as shown below to # prevent Apache from glomming onto all bound IP addresses. # #Listen 0.0.0.0:80 #Listen [::]:80 Listen 80
Hier ändert man den Listen-Wert auf:
Listen 127.0.0.1:80
Das veranlasst den Apache nur noch Verbindungen über das localhost-Interface anzunehmen und keine Verbindungen, die über das Netzwerk von anderen Computer kommen.
In der Datei C:\webdev\xampp\apache\conf\extra\httpd-ssl.conf steht die Einstellung für HTTPS, also verschlüsselte Seiten. Hier muss in Zeile 41
Listen 443
in
Listen 127.0.0.1:443
geändert werden.
Sicherheitseinstellungen - MySQL
Auch dem MySQL-Server verbietet man den Zugriff von außen. In die Datei C:\webdev\xampp\mysql\bin\my.ini fügt man folgenden Zeile unter der Sektion [mysqld] ein:
bind-address = 127.0.0.1
Damit sieht die Konfigurationsdatei ab Zeile 27 so aus:
# The MySQL server [mysqld] basedir = "/webdev/xampp/mysql/" datadir = "/webdev/xampp/mysql/data/" port = 3306 socket = "MySQL" skip-locking key_buffer = 16M max_allowed_packet = 1M table_cache = 64 sort_buffer_size = 512K net_buffer_length = 8K read_buffer_size = 256K read_rnd_buffer_size = 512K myisam_sort_buffer_size = 8M bind-address = 127.0.0.1 default-time-zone = "Europe/Paris"
Ein Neustart des MySQL-Servers macht die Konfiguration aktiv.
.htaccess
Standardmässig ist die Datei .htaccess nicht in der Contao-Installation aktiv. Es liegt jedoch eine vorbereitete Datei bereit; sie lautet .htaccess.default. Diese muss in .htaccess umbenannt werden. Die Datei .htaccess aus dem Basisverzeichnis der Contao-Installation dient hauptsächlich dazu, schönere URLs zu erzeugen. Damit das Rewriting von Webserver entsprechend ausgeführt werden kann, muss die Option RewriteBase angepasst werden. Sie besagt, in welchem Unterverzeichnis die Installation bezüglich der Domain liegt. Hat man das System in einem Unterverzeichnis installiert (http://localhost/contao/), dann muss die RewriteBase auf /contao/ geändert werden. Die veränderte .htaccess sieht dann ab Zeile 39 wie folgt aus:
# Uncomment the following line to set the RewriteBase. ## RewriteBase /contao/
Mercury - Mailserver
Damit man auch die Mailfunktionalität von Contao lokal testen kann, bedarf es einem Mailserver. Diesen bringt XAMPP in Form von Mercury-Mail mit.
Über das XAMPP Control Panel wird dei Mailserver gestartet und per klick auf Admin öffnet sich die Mercury-Verwaltungsoberfläche. Da nur ein SMTP-Server (für den Mailversand) und ein POP3-Server (für den Mailempfang) benötigt werden, deaktiviert man alle anderen Dienste von Mercury. Das wird über den Button Configuration - Protocol modules erledigt, wo alle Haken bis auf SMTP und POP3 entfernt werden:
Nun den Mercury-Server über das XAMPP Control Panel neustarten.
Ähnlich wie für den Apache veranlasst man auch Mercury nur Verbindungen vom localhost anzunehmen. Über Configuration - Mercury SMTP Server erreicht man die Einstellungen und unter anderem das Feld IP Interface to use, was auf 127.0.0.1 zu setzen ist:
Analog für den POP3-Server unter Configuration - Mercury POP3 Server:
Um nun Mails empfangen zu können muss noch ein Mailbenutzer in Mercury angelegt werden. Unter Configuration - Manage local users kann man beliebige Mailkonten anlegen, an welche man dann per Contao Mails schicken kann. Am besten ändert man hierfür den schon angelegten newuser ab.
Damit die E-Mails auch abgeholt werden, richtet man sich das neue E-Mail Konto in einem Mailclient ein, beispielsweise Outlook Express. Die Logindaten hierfür sind:
- POP3-Server: localhost
- SMTP-Server: localhost
- Benutzer: user@localhost
Die XAMPP-Weboberfläche (http://xampp) bietet den Menüpunkt Mercury Mail, hier kann man sich über PHP eine E-Mail zustellen, um die Konfiguration zu testen.
Sendmail & externer Mailserver
Alternativ zu einem eigenen lokalen Mailserver, kann ein bestehender Mailserver (z.B. von google mail) verwendet werden. Man erspart sich damit das Einrichten eines eigenen Mailservers und Mail-Accounts. Allerdings ist man dann von einer Verbindung zum Mailserver abhängig, das heisst also man braucht Internet, um Mails zu senden / empfangen.
Verwenden von gmail als Mail-Server
Die hier beschriebenen Schritte sind angelehnt an http://www.projectpier.org/node/817.
- sendmail in der php.ini aktivieren (xampp/php/php.ini). Der Abschnitt [mail function] sieht so aus:
[mail function] ; For Win32 only. ; Eventuell Pfad zu sendmail.exe anpassen sendmail_path = "\"D:\Programme\xampp\sendmail\sendmail.exe\" -t" SMTP = localhost smtp_port = 25
- sendmail.ini (im gleichen Verzeichnis wie sendmail.exe) anpassen. Überschreibe den Inhalt mit:
[sendmail] smtp_server=localhost smtp_port=25 default_domain=gmail.com error_logfile=error.log auth_username=[deingmailname]@gmail.com auth_password=[deingmailpasswort] pop3_server= pop3_username= pop3_password=
- Installation von stunnel
Downloade & installiere stunnel von http://www.stunnel.org/?page=downloads Klicke Start->stunnel->edit stunnel.conf (Oder öffne C:\Program Files\stunnel\stunnel.conf) Überschreibe den Inhalt der config mit:
cert = stunnel.pem socket = l:TCP_NODELAY=1 socket = r:TCP_NODELAY=1 debug = 7 output = stunnel.log client = yes [smtpg] accept = 127.0.0.1:25 connect = smtp.gmail.com:465 ;or connect = 72.14.215.109:465 so there's no DNS lookup
- XAMPP neu starten
- stunnel starten (Startmenü)
Es ist nun möglich von contao aus, welches auf XAMPP läuft, Mails zu versenden, sofern eine Verbindung zum gmail Server besteht.
Umzug auf ein Live-System
Der Umzug von Contao auf ein Livesystem gestaltet sich normalerweise sehr angenehm und ist nur mit wenigen Handgriffen zu bewerkstelligen:
- Unter Systemwartung den Cache löschen.
- Mit Hilfe der Backup-DB Erweiterung ein Website-Template erstellen
- Die ganze Website auf den Server laden (z.B. per FTP)
- Die .htaccess-Datei anpassen. Falls die Contao-Installation lokal in einem Unterverzeichnis lag, muss die RewriteBase wieder auf "/" gestellt werden.
- Nun über das Install-Tool die Contao-Seite installieren und am Ende das mit BackupDB erstellte Template in die Datenbank einfügen.
Das sollte es schon gewesen sein.
Da diese Anleitung auf einem portablen XAMPP-Server aufgebaut ist, ist es möglich, das komplette Verzeichnis (C:\webdev) auf einen USB-Stick zu betreiben. Dies erleichtert z.B. die Presentation bei Kunden. Es befindet sich alles in diesem Verzeichnis und bedarf keiner Installation. Lediglich die angepasste hosts-Datei kann nicht übernommen werden.
Credits
Die Orginal-Anleitung wurde erstellt von Psi (4ward.media)
Div. Modifikationen und Anpassungen an die aktuelle XAMPP-Version / Contao-Version durch manitougs