Einrichtung einer virtuellen LAMP Webentwicklungs-umgebung

Heute möchte ich euch einen Weg aufzeigen, wie ihr relativ einfach eine virtuelle LAMP (Linux (in diesen Fall nutze ich die Serverversion von Ubuntu) - Apache - MySQL - PHP) Entwicklungsumgebung mittels Oracle VirtualBox einrichten könnt. Diese könnt ihr dann einfach, z. B. aus Eclipse heraus, mittels einer Sambafreigabe erreichen und genau so arbeiten als wäre alles lokal.

 

VirtualBox einrichten

Ihr müsst euch zunächst unter https://www.virtualbox.org/wiki/Downloads gratis die aktuelle VirtualBox Anwendung herunterladen und installieren.
 
[caption id="attachment_590" align="aligncenter" width="531" caption="Nach der Installation öffnet sich der VirtualBox Manager, wo es die Möglichkeit gibt, mittels "Neu" eine neue VirtualBox anzulegen."][/caption]
 
[caption id="attachment_591" align="aligncenter" width="562" caption="Nun müsst ihr den Namen der VirtualBox und den gewünschten Typ des Gastsystems angeben. Ich habe die VirtualBox "LAMP" genannt, als Typ "Linux" und als Version "Ubuntu 64 bit" eingegeben."][/caption]
 
Dies ist auch ein guter Zeitpunkt die später benötigte Ubuntu Serverversion herunter zu laden. Die passende Version gibt es unter http://www.ubuntu.com/download/server/download . Ich nutze dort die Ubuntu 10.4 LTS (Long Term Service) 64 bit Version.
 
[caption id="attachment_592" align="aligncenter" width="526" caption="Im nächsten Menüpunkt werden wir aufgefordert die Hauptspeichergröße, welche für die virtuelle Maschine reserviert werden soll, einzutragen. Ich nutze dafür auf einem MacBook Pro mit 4GB RAM, ein Wert von 1024 MB."][/caption]

Die nächsten 4 Menüpunkte beschäftigen sich mit der Festplatteneinrichtung.

 

[caption id="attachment_593" align="aligncenter" width="529" caption="Als erstes muss festgelegt werden ob es sich um eine Bootfestplatte handelt und ob eine erzeugt werden soll oder eine vorhandene mit genutzt wird (z.B. aus einer vorhandenen virtuellen Maschine)."][/caption]
 

[caption id="attachment_594" align="aligncenter" width="562" caption="Nun braucht das System von uns noch den Typ der zu erstellen virtuellen Festplatte. Wir nutzen hier das VirtualBox Disk Image (VDI). Wenn ihr auf einer anderen Maschine z. B. schon eine VMWare laufen habt, könnt ihr auch ein VMDK wählen und einfache das Image in die VMWare kopieren usw."][/caption]
 

[caption id="attachment_595" align="aligncenter" width="558" caption="Der nächste Menüpunkt möchte von uns wissen, ob die Festplatte zur Laufzeit oder sofort fest alloziert werden soll. Die feste Größe bietet ein wenig bessere Performance, aber dies ist für eine Entwicklungsumgebung zu vernachlässigen und wir wählen den Punkt "dynamisch alloziert"."][/caption]
 

[caption id="attachment_596" align="aligncenter" width="558" caption="Der letzte Punkt zur Festplatteneinrichtung dient zur Bestimmung der maximalen Festplattengröße, welcher durch die dynamische allozierung erreicht werden kann. Für meine persönlichen Bedürfnisse sind 10 GB völlig ausreichen. Für den Dateinamen, bleibe ich bei der Standart Einstellung."][/caption]
 

[caption id="attachment_597" align="aligncenter" width="528" caption="Nach einer Zusammenfassung unserer Angaben wird die VirtualBox erzeugt"][/caption]
 

[caption id="attachment_598" align="aligncenter" width="553" caption="und erscheint im VirtualBox Manager."][/caption]
 

Feintuning der Virtuellen Maschine

[caption id="attachment_676" align="aligncenter" width="554" caption="Nun ändern wir die Einstellungen um einen lauffähigen Server zu erhalten."][/caption]
 

[caption id="attachment_677" align="aligncenter" width="552" caption="Nun zum Reiter System Unterpunkt Prozessor. Ich wähle dort 2 Prozessoren aus (je nach Hostsystem)."][/caption]
 

[caption id="attachment_678" align="aligncenter" width="553" caption="Im Reiter Massenspeicher Unterpunkt IDE-Controller, "leer" auswählen und dann im Attributebereich das CD-ROM Symbol anklicken."][/caption]
 

[caption id="attachment_679" align="aligncenter" width="547" caption="Und dort die Ubuntu Serverdatei ISO auswählen."][/caption]
 

[caption id="attachment_680" align="aligncenter" width="550" caption="Danach gehen wir zum Reiter Netzwerk Unterpunkt Adapter 1 um dort den Netzwerkadapter als Netzwerkbrücke einzurichten und den gewünschten Ethernetadapter auszuwählen. Danach schließen wir die Konfiguration unten mit OK ab."][/caption]
 

[caption id="attachment_681" align="aligncenter" width="549" caption="Jetzt starten wir die Virtuelle Maschine."][/caption]
 

Ubuntuserver installieren

[caption id="attachment_682" align="aligncenter" width="572" caption="Installationssprache wählen"][/caption]
 

[caption id="attachment_683" align="aligncenter" width="573" caption="Install Ubuntu Server"][/caption]
 

[caption id="attachment_684" align="aligncenter" width="571" caption="Betriebssystemsprache wählen"][/caption]
 

[caption id="attachment_685" align="aligncenter" width="574" caption="Land wählen"][/caption]
 

[caption id="attachment_686" align="aligncenter" width="571" caption="Keyboard Layout festlegen"][/caption]
 

[caption id="attachment_687" align="aligncenter" width="573" caption="Hostname eingeben"][/caption]
 

[caption id="attachment_688" align="aligncenter" width="572" caption="Timezone wählen"][/caption]
 

[caption id="attachment_689" align="aligncenter" width="575" caption="Partitionierungsmethode wählen "Guided - use entire disk""][/caption]
 

[caption id="attachment_691" align="aligncenter" width="574" caption="User anlegen"][/caption]

 

[caption id="attachment_692" align="aligncenter" width="576" caption="Encrypt your home directory: no"][/caption]
 

[caption id="attachment_693" align="aligncenter" width="573" caption="Gegebenenfalls einen HTTP Proxy eintragen um ins Internet zu gelangen."][/caption]
 

[caption id="attachment_694" align="aligncenter" width="573" caption="Upgrade Management: Install security updates automatically"][/caption]
 

[caption id="attachment_695" align="aligncenter" width="572" caption="Install Software: keine installieren, dies machen wir im Anschluß händisch."][/caption]
 

[caption id="attachment_696" align="aligncenter" width="574" caption="GRUB boot loader installieren"][/caption]
 

[caption id="attachment_697" align="aligncenter" width="574" caption="Installation komplett"][/caption]
 

[caption id="attachment_698" align="aligncenter" width="573" caption="Ubuntu startet nun automatisch und wir können uns nun mit dem neuen User anmelden."][/caption]
 

[caption id="attachment_699" align="aligncenter" width="573" caption="Prüfen ob man am Netztwerk angemeldet ist und eine IP Adresse hat: sudo ifconfig eth0"][/caption]
 

Softwareinstallation

[caption id="attachment_700" align="aligncenter" width="520" caption="sudo apt-get update (update der Softwaredatenbank) sudo apt-get upgrade (wirkliches upgrade der Software) "][/caption]
 

[caption id="attachment_701" align="aligncenter" width="572" caption="Da wir bei der Installation keine extra Softwarepackete installiert haben, sollten auch keine Webdiense installiert sein. Dies prüfen wir mit sudo netstat -tupan .Es sollte nur der dhcp Client aufscheinen (upd:68)"][/caption]
 

Apache 2 installieren

[caption id="attachment_702" align="aligncenter" width="519" caption="Wenn man den passenden Packetnamen nicht kennt: sudo apt-cache search Suchbegriff (zb apache2-mpm)"][/caption]
 

[caption id="attachment_703" align="aligncenter" width="573" caption="Wir installieren die prefok-Version: sudo apt-get install apache2-mpm-prefork (jede Anfrage ein einzelner Apacheprozess) für unsere Entwicklungsumgebung (da ich beim fehlerhaften Skript nachvollziehen kann, welcher Aufruf ist verantwortlich usw) für Produktionsserver fällt die Wahl auf mpm-worker (ein Apacheprozess, intern für jede Anfrage ein Thread) oder -mpm-itk (wie worker, zusätzlich wenn Apache so konfiguriert das mehrere Domais bedient werden, für jede Apacheinstanz ein Prozess und innerhalb davon Threads pro Anfrage). "][/caption]
 
Um den Apache zu starten/stopen/restarten (nach jeder Änderung der Konfigdatei notwendig), müssen wir den Befehl
sudo service apache2 start/stop/restart oder
sudo /etc/init.d/apache2 start/stop/restart eingeben

[caption id="attachment_704" align="aligncenter" width="573" caption="Testen ob Apache läuft und am Port 80 lauscht: sudo netstat -tupan oder sudo ps -aux : grep apache2"][/caption]
 

Apache einrichten

sudo nano /etc/apache2/apache2.conf
Ich ändere hier nichts, aber das kann sich jeder so anpassen wie er möchte.
 

PHP installieren

[caption id="attachment_705" align="aligncenter" width="518" caption="sudo apt-get install libapache2-mod-php5"][/caption]
 

PHP einrichten

[caption id="attachment_706" align="aligncenter" width="517" caption="sudo nano /etc/php5/apache2/php.ini"][/caption]
 

Auch hier kann jeder ändern wie er es braucht, aber ich ändere nur 4 Punkte

[caption id="attachment_707" align="aligncenter" width="581" caption="memory_limit = 128M auf memory_limit = 8M dies hat den Grund das wir die Prefok Version gewählt haben, die Einstellung aber auf die Workerversion abziehlt. Bei 128M dürfte jeder Prozess 128 MB Speicher nutzen, was bei wachsener Zugriffzahl eine riesen Summe ausmachen kann. Beim worker macht es Sinn, da (wie oben geschrieben) es nur einen Prozess gibt, welcher intern mit Threads pro Anfrage arbeitet.Dieser Prozess würde max 128 MB Speicher bekommen um diesen Speicher intern aufzuteilen."][/caption]
 

[caption id="attachment_708" align="aligncenter" width="574" caption="error_reporting auf error_reporting = E_ALL (nützlich zum debuggen)"][/caption]
 

[caption id="attachment_709" align="aligncenter" width="577" caption="display_errors = On (Entwicklungsserver, beim Produktionsserver auf Off)"][/caption]
 

[caption id="attachment_710" align="aligncenter" width="581" caption="und display_startup_errors = On"][/caption]

ctrl o und ctrl x zum speichern und verlassen des Nano-Editors. Danach tätigen wir einen Apache restart um Änderungen zu übernehmen.

 

MySQL installieren

[caption id="attachment_711" align="aligncenter" width="575" caption="sudo apt-get install mysql-server"][/caption]
 

[caption id="attachment_712" align="aligncenter" width="574" caption="MySQL root user Passwort eingeben"][/caption]
 

[caption id="attachment_713" align="aligncenter" width="577" caption="Nun sehen wir mittels sudo netstat -tupan das der SQL Server läuft, aber nur am localhost lauscht und wir somit keinen Zugriff von unseren Rechner aus haben (zb mit dem SQL Client der Wahl). Dies müssen wir also ändern."][/caption]
 

MySQL konfigurieren

[caption id="attachment_714" align="aligncenter" width="575" caption="sudo nano /etc/mysql/my.cnf bind-address = 127.0.0.1 ändern auf bind-address = 0.0.0.0"][/caption]
 
Es folgt ein MySQL restart mittels sudo /etc/init.d/mysql restart

[caption id="attachment_715" align="aligncenter" width="570" caption="sudo netstat -tupan zeigt auf das öffentlich am Port 3306 gelauscht wird."][/caption]
 

PHPMyAdmin installieren

Wer möchte kann schnell noch einen PHPMyAdmin installieren

[caption id="attachment_716" align="aligncenter" width="573" caption="sudo apt-get install phpmyadmin"][/caption]
 

[caption id="attachment_717" align="aligncenter" width="578" caption="Apache2 als Webserver auswählen"][/caption]
 

[caption id="attachment_718" align="aligncenter" width="576" caption="Konfigurieren der DB für phpmyadmin mittels dbconfig-common : No"][/caption]
 

[caption id="attachment_719" align="aligncenter" width="541" caption="Der PHPMyAdmin ist ab sofort unter http://ip-adresse/phpmyadmin erreichbar."][/caption]
 

Standartgemäß darf ich nur local mit dem Rootuser auf die DB zugreifen. Da ich aber vom Entwicklungsrechner mittels eines MySQL Client auf die gewünschte DB zugreifen möchte, muss ich nun die notwendigen Rechte mittels des phpmyadmin zuweisen.

[caption id="attachment_720" align="aligncenter" width="578" caption="CREATE USER 'root'@'%' IDENTIFIED BY 'DEIN PASSWD';GRANT ALL PRIVILEGES ON . TO 'root'@'%' IDENTIFIED BY 'DEIN PASSWD' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;"][/caption]
 

Jetzt fehlt eigentlich nur noch eine Samba Installation um Dateien direkt von unserem Rechner aus, auf den Entwicklungsserver zu speichern

 

Samba installiern

[caption id="attachment_721" align="aligncenter" width="579" caption="sudo apt-get install samba"][/caption]
 

[caption id="attachment_722" align="aligncenter" width="575" caption="sudo apt-get install smbclient"][/caption]
 

Samba Konfigurieren

Nun müssen wir Samba noch den User einrichten. Dazu müssen wir ein existierenden Systemuser hinzufügen und ihm ein Passwort geben. Dies ist notwendig, da Samba von Haus aus das Passwort nicht so hoch verschlüsselt wie es Linux tut. Deshalb kann er sich nicht direkt die User vom System holen.

[caption id="attachment_723" align="aligncenter" width="574" caption="sudo smbpasswd -a Username"][/caption]
 
Das Rootdirectory unseres Webservers ist unter /var/www erreichbar, Um nun von unseren Rechner direkt Daten dort ab zuspeichern, müssen wir im Samba noch eine Dateifreigabe einrichten.

[caption id="attachment_724" align="aligncenter" width="575" caption="sudo nano /etc/samba/smb.conf Dort nun an beliebiger Stelle folgendes eingeben[www"]comment = Webroot path = /var/www guest ok = no browseable = yes write list = SambausernameDas File speichern"][/caption]
 

[caption id="attachment_725" align="aligncenter" width="576" caption="Und den Sambaserver neustarten: sudo /etc/init.d/smbd restart"][/caption]
 

Standart gemäß gehört der Ordner /var/www dem User Root. Um aber über die Netzwerkfreigabe alles mit unseren User machen zu dürfen, ändern wir noch schnell die Berechtigung.

[caption id="attachment_726" align="aligncenter" width="578" caption="sudo chown -R Benutzername /var/www"][/caption]
 

[caption id="attachment_727" align="aligncenter" width="554" caption="Zum Schluss verbinde ich mich von meinen Rechner aus mittels Netzlaufwerk (unter Mac OS X Lion erscheint die Sambafreigabe im Finder unter Freigaben) mit dem gewünschten User zur Freigabe."][/caption]
 

[caption id="attachment_728" align="aligncenter" width="520" caption="Geschafft. Nun können wir direkt aus der Entwicklungsumgebung auf den Entwicklungsserver zugreifen und auf ihn arbeiten."][/caption]
 

Back…