Vagrant und TYPO3

Vagrant ist ein Programm, welches alle erforderlichen Einstellungen für die virtuelle Maschine vornimmt. So ist es zwingend nötig, VirtualBox installiert zu haben. Wie ihr mit Vagrant ganz unkompliziert und schnell eine Entwicklungsmaschine erstellen könnt, will ich euch hier zeigen. Der Vorteil einer universellen Entwicklungsmaschine, welche von jedem Entwickler benutzt werden kann, liegt daran, dass diese typischen Fehler „aber bei mir gehts“ minimiert werden. Zudem ist es für das Testen von Vorteil, da man die Umgebung der Live-Seite versucht nachzuahmen.

Als erstes solltet ihr euch Vagrant und gegebenenfalls VirtualBox installieren. Nachdem dies getan ist, machen wir uns nun damit vertraut, wie Vagrant zu benutzen ist.
Vagrant ist ein Kommandozeilen-Tool, welches keine GUI mitbringt, also braucht ihr zwingend euer CMD-Fenster (Windows) oder das Terminal (Mac OS X, Linux). Navigiert nun in einen Ordner, welcher leer ist. Als Tipp würde ich euch hier empfehlen, den Ordner direkt in den Home-Ordner zu legen, so habt ihr es später viel einfacher, wenn ihr eure Entwicklungsmaschine starten wollt.

In diesen Ordner legt ihr eine Datei, die Vagrantfile heißt, an. Der Inhalt dieser Datei kann wie folgt aussehen:

Dies ist unsere Basis, mit der wir weiterarbeiten wollen. Mit config.vm.box = "chef/ubuntu-14.04" gebt ihr an, welche Box ihr herunterladen wollt und mit config.vm.network "forwarded_port", guest: 3306, host: 3333, auto_correct: true definieren wir ein paar Ports, welche durchgeschleift werden sollen. Es wäre dann also möglich, mit 127.0.0.1:3333 auf den MySQL-Server der Entwicklungsmaschine zuzugreifen. Diese Einstellung ist nicht zwingend erforderlich, denn mit config.vm.network :private_network, ip: "192.168.33.33" geben wir der Box eine eigene IP und könnten uns direkt mit der Datenbank verbinden und zwar über 192.168.33.33:3306. Die durchgeschleiften Ports sind allerdings dann sinnvoll, wenn ihr Zugriff auf den MySQL-Server oder den Web-Server jemanden anderen geben wollt, der dann über eure IP, im Zusammenspiel mit den Ports, darauf zugreifen kann.

Nun könnt ihr bereits vagrant up benutzen und ihr würdet eine Basisinstallation von Ubuntu-Server 14.04 bekommen. Hier läuft allerdings weder ein Webserver, noch ein MySQL-Server, welche wir für TYPO3 zwingend benötigen würden. Es wäre also schön, wenn diese Dienste bereits eingerichtet und konfiguriert wären. Hier gibt es nun mehrere Möglichkeiten, diese Einstellungen vorzunehmen. Zum einen könnten ihr Chef oder Puppet benutzen oder ihr könnt ein Shell-Script ausführen. Da ein Shell-Script leichter verständlich ist und Chef oder Puppet meiner Meinung nach einen eigenen Artikel verdienen würden, werde ich hier nun auf das Shell-Script eingehen. Legt also eine neue Datei an, welche wir provision.sh nennen. Der Inhalt könnte wie folgt aussehen:

Jetzt müssen wir in das Vagrantfile noch an das Ende der Datei einfügen:

Danach können wir im Terminal/CMD-Fenster vagrant up abfeuern und er installiert Apache und MySQL.

Achtung: Der MySQL-Benutzer „root“ hat hier kein Passwort. Solange ihr nur im Büro arbeitet, ist dies kein großes Problem, solltet ihr allerdings in einem öffentlichen Netzwerk arbeiten, solltet ihr dies schleunigst ändern. Auch der SSH-User „vagrant“ hat nur das Passwort „vagrant“. Die SSH-Verdingungsdaten sind übrigens: vagrant@192.168.33.33.

Momentan ist der DocumentRoot von Apache noch unter /var/www/html. Dies wollen wir ändern und am Besten wäre es, wenn wir viele verschiedene Seiten auf der Entwicklungsmaschine bearbeiten könnten, ohne jedes mal dafür eine neue VirtualHost-Konfiguration anlegen zu müssen. Für Apache gibt es das Modul „vhost_alias“, mit dem es möglich ist, anhand des Domain-Aufrufs verschiedene DocumentRoots zu setzen. Dafür müssen wir aber die Default-Konfiguration von Apache überschreiben. Man könnte dies nun alles in über das Bash-Script ersetzen, allerdings verschlechtert dies die Lesbarkeit des Scripts. Für solche Sachen erstellen wir lieber einen Ordner „config“ in dem Ordner, von dem aus wir vagrant up ausgeführt haben und erstellen dort unsere Konfigurationen.
Für Apache erstellen wir in diesem Ordner eine Datei mit dem Name „vhost.conf“. Der Inhalt kann wie folgt aussehen:

Um diese Konfiguration auch auf der Vagrant zu benutzen fügt an das Ende des ### Apache ###-Blocks in der provison.sh folgendes hinzu:

Auf diese Weise könnt ihr übrigens alle Konfigurationen auslagern. Sinn machen würde hier beispielsweise, die php.ini oder die /etc/ssmtp/ssmtp.conf (um Mails zu versenden). Wie ihr die ssmtp.conf anpassen müsst um Mails, bespielsweise über Googlemail versenden zu können, könnt ihr hier nachlesen.

Nun könnt ihr in eure Host-Datei (Windows: C:\Windows\System32\drivers\etc\hosts Linux/Mac OSX: /etc/hosts) die verschiedenen Domains nach folgenden Muster anlegen:

<host> ist hier zu ersetzen durch den richtigen Namen. Der Ordner liegt dann auf der Vagrant unter /home/vagrant/htdocs/<host>.

Achtung: Ein Dominname ist immer kleingeschrieben, so dass auch der Ordner in /home/vagrant/htdocs/ klein geschrieben sein muss.

Solltet ihr bereits einmal vagrant up eingegeben haben, könnt ihr eure Maschine nun „zerstören“ mit vagrant destroy und wieder neu erstellen lassen mit vagrant up. Wichtig ist hier nur, dass ihr euch in dem Ordner befindet, in dem eure Vagrantfile liegt.

Bei Fragen oder Anregungen, schreibt mir einfach in den Kommentaren, ich werde versuchen euch so zeitnah wie möglich zu antworten.

7 Gedanken zu “Vagrant und TYPO3

  1. Hallo Patrick,

    in provision.sh fehlt ziemlich viel:

    in die zweite Zeile:

    # Updates the Ubuntu Repositorys
    apt-get update

    sonst können viele Bibliotheken nicht geladen werden.

    in apt-get install -q -y –force-yes \

    wird mariadb geladen anstatt mysql. Ich weiß nicht, ob TYPO3 mit mariadb funktioniert, bin mir aber ziemlich sicher, dass die meisten wohl doch eher mysql haben wollen:

    apt-get install -q -y mysql-server
    mysqladmin -u root password root

    scheint bei mir zu klappen.

    vhost_alias muss geladen werden, sonst kann es nicht verwendet werden – wie das habe ich bis jetzt nicht herausgefunden. Die Installation endet also mit einem Syntaxfehler:
    „Invalid command ‚VirtualDocumentRoot‘, perhaps misspelled or defined by a module not included in the server configuration“
    und Apache kann nicht gestartet werden.

    ein vhost_alias gibt es nicht als apache Module, es muss anders heißen.

    Gruß
    Peter

    • Hallo Peter,

      zu 1): danke die Zeile hab ich hinzugefügt. Wir haben in unserem bash script noch einiges mehr an Zeug, so dass beim rauskopieren hier wohl etwas untergangen ist. Die Anleitung ist aber auch nicht als komplett Anleitung zu verstehen, da jeder ein paar andere Anforderungen an seine Entwicklungsumgebung hat.

      zu 2): mariadb ist ein fork von mysql-server und ist so gut wie in jedem Falle, dem Oracle MySQL-Server vorzuziehen. Oracle ist nach der Übernahme von Sun nicht sehr interessiert Opensource-Projekte voranzutreiben und deshalb steht hier die Entwicklung ziemlich still bzw. ist es Oracle nicht wichtig bestimmte Änderungen voran zu treiben, die der OpenSource Community wichtig sind. Ob du mariadb oder mysql-server verwendest, wirst du im normalen Alltag aber nie merken. MariaDB Version 5 ist ein „drop-in replacment“ für MySQL. Mehr Infos hier: https://mariadb.org

      zu 3):
      Das Modul heißt definitiv mod_vhost_alias. Probier doch mal ein: a2enmod vhost_alias

  2. Wenn ich mit apt-get install libapache alles lsten lasse, gibt es nur libapache2-mod-vhost-ldap – sieht so aus, als hättest du eine andere Distribution verwendet.

    • Hallo nochmal, du musst das Modul nicht nachinstallieren, da es Core-Modul ist, in der Standardinstallation von Apache nur noch nicht aktiviert ist. „a2enmod vhost_alias“ aktiviert es aber.

  3. Als Alternative habe ich eine Vagrant VM fuer Docker erstellt, die man sich bequem vom GitHub klonen kann:

    https://github.com/mblaschke/vagrant-development

    Sie ist zwar etwas „fetter“, bringt aber eine komplette Umgebung inkl. Entwicklungs- und Debugtools mit und ist fuer das TYPO3 Docker Boilerplate optimiert.

    Auch kommt sie gleich mit den „CliTools“, einem Toolkit fuer diverse TYPO3, Docker und Development Workflows. Mit den CliTools kann man z.B. bequem Projekte vom Liveserver auf sein lokale Entwicklungssystem synchronisieren oder man kann sich direkt die SQL-Queries vom MySQL-Server anschauen ohne die Anwendung modifizieren zu muessen.

  4. Hallo,

    dieses Tutorials ist ziemlich gut, leider verstehe ich doch nicht einiges, so dass es bei mir noch gar nicht funktioniert.

    Wo lege ich nun den Ordner für mein Projekt oder Projekte??? Und wie wird der Ordner mit Linux verbunden???

Kommentar verfassen