Vagrant wird in der Scandio massiv für Entwicklungsumgebungen eingesetzt. Viele unserer Entwicklungssysteme basieren auf Vagrant, Virtual Box und Linux. Auch in unseren PHP Team gibt es für jeden Kunden spezifische Development Boxen in verschiedenen Komplexitätsstufen. Bei großen Projekten lohnt es sich die Vagrant Box vollständig neu aufzubauen und sich möglichst nah am Produktivsystem zu orientieren. Oftmals bietet es sich an Basis-Konfigurationen als Grundlage zu nehmen. Gerade im LAMP Bereich gibt es einige gute Vagrant Stacks, wie zum Beispiel r8/vagrant-lamp oder Scotch Box. Als Minimalist habe ich mich gefragt, geht das auch einfacher? Und ich machte mich daran gemacht eine Vagrant Konfiguration zu erstellen, die nur aus einer Datei, nämlich dem Vagrantfile besteht.

Die Anforderungen sind recht einfach zu umschreiben. Für die Entwicklung einfacher PHP Applikationen benötige ich

  • Linux Basis System
  • Apache Webserver
  • Mod Rewrite
  • PHP 5.5
  • Xdebug
  • MySQL
  • Ordner Sync direkt mit dem Web-Root Ordner
  • Port-Forwarding auf localhost für port 80 und port 3306
  • Optional: DHCP Adresse (für Tests mit mobilen Devices)

Das Ergebnis ist einfach und bestechend. In der Basisdatei Vagrantfile wird mit HereDoc Syntax ein ShellScript eingebettet. Das allein bildet die Grundlage für eine vollständig funktionierende Entwicklungsumgebung.

Die Basis sieht dabei wie folgt aus:

p>
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.hostname = $hostname
# Uncomment the next line if you want a DHCP address
# config.vm.network "public_network"
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "forwarded_port", guest: 3306, host: 6033
config.vm.synced_folder ".", "/vagrant", owner: "vagrant", mount_options: ["dmode=775,fmode=775"]
config.vm.provider "virtualbox" do |vb|
vb.memory = 1024
end
config.vm.provision "shell", inline: $script
end

Die variable $script in Zeile 12 zeigt dabei auf das eingebettete ShellScript, das folgenden Code enthält:

p>
echo Installing LAMP stack
apt-get update -y
# set mysql user to root/root
debconf-set-selections <<< 'mysql-server-5.5 mysql-server/root_password password root'
debconf-set-selections <<< 'mysql-server-5.5 mysql-server/root_password_again password root'
# install LAMP
sudo apt-get install -y apache2 libapache2-mod-php5 php5 php5-mysql mysql-server php5-xdebug
sudo service mysql stop
# allow mysql access from network
sudo sed -i "s/bind-address.*/bind-address = 0.0.0.0/" /etc/mysql/my.cnf
sudo service mysql start
# set mysql privileges to allow root access from all hosts
echo "use mysql;update user set host='%' where user='root' and host='#{$hostname}';flush privileges;" | mysql -uroot -proot
# set local folder as web root
sudo rm -rf /var/www/html
sudo ln -s /vagrant /var/www/html
echo "ServerName localhost" >> /etc/apache2/apache2.conf
# activate Xdebug remote debugging
sudo cat > /etc/php5/mods-available/xdebug.ini << EOF
zend_extension=xdebug.so
xdebug.remote_enable=On
xdebug.remote_connect_back=On
xdebug.remote_autostart=Off
xdebug.remote_log=/tmp/xdebug.log
EOF
# activate mod rewrite
a2enmod rewrite
sudo service apache2 restart
echo Install done

Das Vagrantfile steht hier zum Download zur Verfügung. Simple, minimalistisch und cool. Einfach mal testen und Feedback geben.

Download Vagrantfile as Zip