From Vagrant to NixOps

I have been following the development of NixOps for some months. NixOps is a cloud deployment tool using nix, the functional package manager for unix systems. Nix makes it very intuitive to define absolute package dependencies. No more thinking and guessing about required runtime dependencies.
NixOps supports deploying to different platforms. Bare-metal, cloud, and even virtual environments like virtualbox work out of the box. I have worked in many projects using vagrant. Out of curiosity I migrated an existing vagrant project using wasted (Web Application STack for Extreme Development) to nix and NixOps.
This post is a walkthrough to configure a symfony2 project with nginx, mysql, and php-fpm from scratch. Weiterlesen

Noch ein VPN? vagrant up!

These: Aufsetzen von VPNs für ein ganzes Team ist Zeit- und Geldverschwendung!

Aber von vorne:

Wenn wir ein Projekt für einen neuen Kunden starten, steht für uns ganz am Anfang der Zugriff auf dessen Infrastruktur.

Viele Kundeninterna (Jira, Confluence, Sharepoint, SQL-Server, Dateifreigaben) liegen im Netz des Kunden, und wir brauchen erst mal ein VPN, um aufs Netz des Kunden zugreifen zu können.

Hier wird es bunt gemischt: Einige Kunden setzen auf IPsec, wieder andere auf OpenVPN, Tinc oder ein halbes Dutzend herstellerspezifische Lösungen. Weiterlesen

Run your tests with PHPStorm on your vagrant box

At Mayflower we usually use virtual machines managed with vagrant for our development environments. Though it was surprising to me, that I have hardly ever seen someone taking the time to investigate how to configure PHPStorm properly, so that it plays nice with the virtual machine in use. Thats why I want to show you a sample configuration via the SFTP-Deployment + Remote Interpreter capabilities of PHPStorm, where you won’t even recognize anymore that you are not working on your host system. This configuration is not only valid for a VM managed with vagrant, but with any other as well.

Weiterlesen

Development Environments with Vagrant and Puppet

Motivation

Setting up the infrastructure for new projects can be quite a pain in the ***. Even after the initial setup is done, adding new developers to the team requires a lot of time. Besides explaining the project to the new team member, the project’s development environment has to be installed on the new developer’s computer. This includes setting up virtual machines, web- and database-servers, updating libraries etc.

Many IT companies use the same technologies repeatedly which leaves them with multiple development environments that look very similar but have been set up separately. This problem can be solved by using a configuration management software and a smart tool for handling virtual machines.

Weiterlesen

IPC die Zweite – DevOps

Nach einem sehr guten Mittagessen, in tollem Ambiente ging es weiter mit dem Powerworkshop von Soenke Ruempler (Jimdo) und Johann-Peter Hartmann (SektionEins GmbH, Mayflower GmbH).
Da sich, vielleicht zum Glück, nur wenige Teilnehmer für diesen Workshop fanden, ging die Vorstellungsrunde recht flink und es wurde schnell deutlich was wir als Publikum zu erwarten hatten.
Die Vortragenden stellten klar das PHP seinen größten Vorteil, das schnelle umsetzen von Anforderungen, durch fortschreitende Professionalisierung eingebüßt habe und Scrum nur einen Teil der Lösung darstellt.
Grund für die Tatsache, dass der Scrumprozess bei dem Benutzer nicht ankommt sind seltene Deployments, welche mehrere Features zusammenfassen.
Dadurch wird der in kurzen Iterationen angelegte Scrumprozess von einem wasserfallartigen Deployment überdeckt.
Grund für die seltenen Deployments ist der erhebliche Zeitaufwand für die Administratoren und der fehlende Projekt überblick, auch als Silo-Problematik bekannt.

Eine mögliche Lösung für das fehlende Betrachten des Gesamtprojektes, wurde mit Kanban recht ausführlich vorgestellt.
Dieses kann genutzt werden, um Engpässe im Projekt zu visualisieren, vor allem wenn diese zwischen Abteilungen entstehen.

Wichtigster Teil des Vortrages war es aber, die Lücke zwischen Development und Administration zu schließen.
Während die Developer vorrangig die Features im Blick haben, steht für die Administration der Reibungslose Ablauf im Tagesbetrieb im Vordergrund.

Schließen kann man diese Lücke durch das richtige Toolset.
Die Administrationsseite kümmert sich darum, eine Infrastruktur zu schaffen, damit das Deployment von den Entwicklern übernommen werden kann und bekommt im Gegenzug das lästige Deployment abgenommen.
Dadurch werden Kapazitäten frei, um die Infrastruktur zu erweitern, was beiden Seiten zu gute kommt.

Für diesen Zweck wurden Puppet und Vagrant vorgestellt.

Puppet ist ein System zur automatisierten Verteilung und Durchführung von Serverkonfigurationen.
Mit Vagrant wurde er Tool vorgestellt, welches anhand von Konfigurationsbeschreibungen beliebig viele virtuelle Maschinen aufsetzten kann.
Konfigurationen können dabei auch aus einem Puppet-Repository stammen, was den Verwaltungsaufwand reduziert.
Mit beiden Tools in Kombination ist es möglich, lokal das Produktivsystem nachzustellen und zu testen.
Das anlegen mehrerer vorkonfigurierter Server wurde dabei ausführlich vorgeführt.

Anschließend wurde noch das Buildpipelining vorgestellt, am Beispiel des Mapolis Projektes.
Buildpipelining beschreibt die Möglichkeit PHPUnit Test und Selenium Test getrennt voneinander auszuführen, letztere nur nach erfolgreichem Verlauf der voran gegangenen Tests.
Theoretisch kann nach erfolgreichem Bestehen aller Buildprojekte ein automatischer Deploy erfolgen.
Praktisch wird jedoch oftmals noch die Freigabe des Projektleiters benötigt.

Das Ziel des Workshops, Administratoren und Entwicklern Tools aufzuzeigen, die die Deploymentrate erhöhen können, wurde in 4 Stunden gut vermittelt und es wurde klar gestellt, dass es mithilfe dieser Tools möglich ist, PHP seinen verlorenen Wettbewerbsvorteil zurück zu geben.
Dennoch waren die 4 Stunden sehr knapp bemessen, die größtenteils abstrakten Inhalte zu vermitteln, weshalb ich trotz der vielen mitgenommenen Ideen danach froh war entspannen zu können.