Allgemein Kostenlose Downloads PHP Tipps und Tricks Tutorials

Vagrant – LAMP-Stack unter Windows einrichten

Hallo 🙂

Ich habe mal wieder ein tolles Stück Software entdeckt welche das Entwicklerleben vereinfachen soll: Vagrant.
Mittels Vagrant lässt sich auf einfache Art und Weise ein LAMP-Stack als Virtuelle Maschine auf eurem Rechner erstellen.

Warum? Welcher PHP-Entwickler kennt es nicht, Lokal auf dem Windowsrechner mit XAMPP funktioniert etwas und auf dem Production Linux-Server funktioniert es nicht. Damit es gar nicht erst soweit kommt, sollte man in der gleichen Umgebung entwickeln, dafür gibt es Vagrant.

Vagrant Installation

Damit du Vagrant nutzen kannst, lade dir folgende Programme herunter und installiere diese.

Nach der Installation musst du deinen Rechner neu starten!

LAMP-Stack erstellen

Erstelle nun an einem Ort deiner Wahl einen Ordner mit einem beliebigen Namen.
Öffne nun die Eingabeaufforderung in diesem Ordner (Shift + Rechtsklick im Ordner » Eingabeaufforderung hier öffnen). Als nächstes gibst du den Befehl vagrant init hashicorp/precise64 ein.
Damit initialisierst du die Datei „Vagrantfile“ mit Ubuntu 14.04 LTS als Betriebssystem.
Als nächstes gibst du den Befehl vagrant plugin install vagrant-hostmanager ein. Damit installierst du den Hostmanager für Vagrant.

Vagrantfile bearbeiten

Öffne nun die „Vagrantfile“ in einem beliebigen Text-Editor und entferne alle Zeilen mit einer Raute am Anfang zwischen Vagrant.configure(2) und dem abschließenden end sodass deine Vagrantfile so aussieht:

# -*- mode: ruby -*-
# vi: set ft=ruby :
 
Vagrant.configure(2) do |config|
  config.vm.box = "hashicorp/precise64"
end

Als nächstes fügst du nach config.vm.box = ... folgenden Code block hinzu

  config.hostmanager.enabled = true				# Hostmanager aktivieren
  config.hostmanager.manage_host = true				# Hostmanager zum verwalten der Hosts verwenden
  config.vm.network "forwarded_port", guest: 80, host: 8080	# Portforwarding zur VM aktivieren
  config.vm.hostname = "lamp.dev"				# Hostname festlegen
 
  config.vm.provision "puppet" do |puppet|
    puppet.manifests_path = "manifests"	# Manifest-Pfad definieren
    puppet.manifest_file  = "site.pp"	# Manifest-Datei definieren
  end

Deine Vagrantfile sollte nun im gesamten wie folgt aussehen:

# -*- mode: ruby -*-
# vi: set ft=ruby :
 
Vagrant.configure(2) do |config|
  config.vm.box = "hashicorp/precise64"
 
  config.hostmanager.enabled = true				# Hostmanager aktivieren
  config.hostmanager.manage_host = true				# Hostmanager zum verwalten der Hosts verwenden
  config.vm.network "forwarded_port", guest: 80, host: 8080	# Portforwarding zur VM aktivieren
  config.vm.hostname = "lamp.dev"				# Hostname festlegen
 
  config.vm.provision "puppet" do |puppet|
    puppet.manifests_path = "manifests"	# Manifest-Pfad definieren
    puppet.manifest_file  = "site.pp"	# Manifest-Datei definieren
  end
end

Die Vagrantfile kannst du nun speichern und schließen.

manifests/site.pp

Als nächstes erstellst du den Ordner „manifests“ und darin die Datei „site.pp“ mit folgendem Inhalt:

# /manifests/site.pp
exec {"apt-get update":
  path => "/usr/bin",
}
 
#
# Packages
#
 
# Apache2 installieren
package {"apache2":
  ensure => present,
  require => Exec["apt-get update"],
}
 
# PMA installieren
package {"phpmyadmin":
  ensure => present,
  require => [Exec["apt-get update"], Package["apache2"], Service["mysql"]],
}
 
# MySQL und Midnight Commander installieren
package {['mysql-server', 'mysql-client', 'mc']:
  ensure => installed,
  require => Exec["apt-get update"]
}
 
# PHP installieren
package { ["php5-common", "libapache2-mod-php5", "php5-cli", "php-apc", "php5-mysql"]:
  ensure => installed,
  notify => Service["apache2"],
  require => [Exec["apt-get update"], Package['mysql-client'], Package['apache2']],
}
 
#
# Services
#
 
# Apache2 starten
service { "apache2":
  ensure => "running",
  require => Package["apache2"]
}
 
# MySQL starten
service { 'mysql':
  ensure  => running,
  require => Package['mysql-server'],
}
 
#
# Files
#
 
# vHost-Datei für den LAMP-Stack kopieren
file { "/etc/apache2/sites-available/default":
  ensure => present,
  source => "/vagrant/manifests/assets/vhost.conf",
  mode => 644,
  require => Package["apache2"],
  notify => Service["apache2"],
  replace => yes,
  force => true,
}
 
# vHost-Datei für PhpMyAdmin kopieren
file { "/etc/apache2/sites-available/phpmyadmin":
  ensure => present,
  source => "/etc/phpmyadmin/apache.conf",
  mode => 644,
  require => Package["phpmyadmin"],
  notify => Service["apache2"],
  replace => yes,
  force => true,
}
 
# Document Root anlegen
file {['/var', '/var/www', '/var/www/html']:
  ensure => 'directory',
  owner  => 'vagrant',
  group  => 'vagrant',
  mode   => '0775',
  require => Package['apache2']
}
 
#
# Execs
#
 
# Mod Rewrite aktivieren
exec { "/usr/sbin/a2enmod rewrite" :
  unless => "/bin/readlink -e /etc/apache2/mods-enabled/rewrite.load",
  notify => Service[apache2],
  require => Package['apache2']
}
 
# MySQL Passwort festlegen
exec { 'set-mysql-password':
	unless  => 'mysqladmin -uroot -proot status',
	command => "mysqladmin -uroot password root",
	path    => ['/bin', '/usr/bin'],
	require => Service['mysql'],
}
 
# vHost-Datei für den LAMP-Stack aktivieren
exec { "/usr/sbin/a2ensite default" :
  unless => "/bin/readlink -e /etc/apache2/sites-enabled/default",
  notify => Service[apache2],
  require => Package['apache2']
}
 
# vHost-Datei für PhpMyAdmin aktivieren
exec { "/usr/sbin/a2ensite phpmyadmin" :
  unless => "/bin/readlink -e /etc/apache2/sites-enabled/phpmyadmin",
  notify => Service[apache2],
  require => [Package['phpmyadmin'], File["/etc/apache2/sites-available/phpmyadmin"]],
}
 
# Berechtigungen festlegen
exec { "ApacheUserChange" :
  command => "/bin/sed -i 's/APACHE_RUN_USER=www-data/APACHE_RUN_USER=vagrant/' /etc/apache2/envvars",
  onlyif  => "/bin/grep -c 'APACHE_RUN_USER=www-data' /etc/apache2/envvars",
  require => Package["apache2"],
  notify  => Service["apache2"],
}
# Berechtigungen festlegen
exec { "ApacheGroupChange" :
  command => "/bin/sed -i 's/APACHE_RUN_GROUP=www-data/APACHE_RUN_GROUP=vagrant/' /etc/apache2/envvars",
  onlyif  => "/bin/grep -c 'APACHE_RUN_GROUP=www-data' /etc/apache2/envvars",
  require => Package["apache2"],
  notify  => Service["apache2"],
}
# Berechtigungen festlegen
exec { "apache_lockfile_permissions" :
  command => "/bin/chown -R vagrant:www-data /var/lock/apache2",
  require => Package["apache2"],
  notify  => Service["apache2"],
}

Diese Datei dient zum einrichten des LAMP-Stacks. Mit dieser Konfiguration wird folgende Software in der VM installiert:

  • Apache2
  • PHP
  • MySQL
  • PhpMyAdmin
  • Midnight Commander

Außerdem wird das MySQL Passwort für den root-Benutzer auf root gesetzt.

manifests/assets/vhost.conf

Als nächstes erstellst du im gerade erstellten manifests-Ordner den Ordner assets und darin die Datei vhost.conf. Diese wird nach dem installieren des Stacks einfach in die VM kopiert.

Öffne die vhost.conf und fülle diese mit folgendem Code:

<VirtualHost *:80>
 
	ServerName lamp.dev
	DocumentRoot /var/www/html
	DirectoryIndex index.php
 
	<Directory /var/www/html>
		AllowOverride All
		Allow from All
		Options Indexes FollowSymLinks
	</Directory>
 
</VirtualHost>

So damit ist die konfiguration des Stacks abgeschlossen. Zeit diesen zu installieren.

Installation des Stacks

Wechsel nun zurück in die Kommandozeile. Gib nun den Befehl vagrant up ein. Damit installierst du die VM bzw. startest später damit die VM.
Vagrant Up

Dieser Vorgang kann einige Minuten dauern. Nach Abschluss sollte bei dir in der Konsole zum Schluss folgendes stehen:

==> default: notice: /Stage[main]//Service[apache2]/ensure: ensure changed 'stopped' to 'running'
==> default: notice: /Stage[main]//Service[apache2]: Triggered 'refresh' from 13 events
==> default: notice: Finished catalog run in 155.54 seconds

Daten „hochladen“

Du kannst nun auf den „Server“, bspw. mit FileZilla, Dateien per SFTP hochladen. Verbinde dich hierzu einfach mit dem Server lamp.dev. Der Benutzername sowie das Passwort ist vagrant. Als Port verwendest du 2222.
Deine Dateien musst du in das Verzeichnis /var/www/html hochladen.

Server aufrufen

Dein LAMP-Stack ist unter der Adresse http://lamp.dev:8080/ erreichbar. Das PhpMyAdmin erreichst du unter http://lamp.dev:8080/phpmyadmin/, verwende als Benutzernamen und Passwort root

SSH Zugriff

Natürlich kannst du auch per SSH zugreifen, verwende hierzu bspw. PuTTY und verwende die gleichen Zugangsdaten wie bei SFTP.

Vagrant Befehle

Zum Schluss noch einige Basisbefehle für Vagrant

BefehlBeschreibung
vagrant initErstellt eine neue VM
vagrant upStartet den LAMP-Stack / die VM
vagrant haltStoppt den LAMP-Stack / die VM
vagrant reloadStartet den LAMP-Stack / die VM neu
vagrant provisionFührt die Befehle der Vagrantfile neu aus. Verwendet diesen Befehl falls ihr in die vhost.conf einen neuen Host eingetragen habt
vagrant destroyLöscht die VM

Schlusswort

Danke fürs lesen, Lob und Kritik gerne gesehen.
Hier könnt ihr euch den Stack herunterladen, einfach entpacken und in dem Ordner dann vagrant up ausführen.

  Vagrant Lamp-Stack (1,8 KiB, 597 hits)


0x gelesen

Print Friendly, PDF & Email

10 Kommentare

  1. Vielen Dank! Sehr gut beschrieben. Ich habe nur ei Problem. Muss dazu nicht puppet installiert sein? Ich hab es so ausprobiert und Vagant teilt mir mit, dass versioning nicht funktioniert, da puppet nicht installiert ist.

    1. Danke für das Lob.
      Es wird das aktuellste PHP aus den vorhandenen Repositories installiert, demnach PHP 5.3 aus den Ubuntu Repositories. Wenn du jedoch eine andere PHP Version installieren möchtest, müsstest du das über ein PPA lösen (Versuche das mal in die site.pp zu adaptieren: Ubuntu PHP 5.5.

      1. Hm, versteeh ich nicht ganz, wieso benutzt Ubuntu den noch PHP 5.3? Oder ist das ein älteres Ubuntu was du für die Box verwendest?

        1. Im Tutorial verwende ich Ubuntu 12.04 LTS (Precise Pangolin). Um das aktuellste Ubuntu zu installieren musst du innerhalb der „vagrantfile“ config.vm.box auf ubuntu/wily64 setzen. Damit wird dann Ubuntu 15.10 (Wily Werewolf) installiert. Damit solltest du PHP 5.6.11 installiert bekommen.

          Gruß,
          Julian

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.