PHP Clouds und Platform as a Service (PaaS): cloudControl
Wie bereits gestern in der PHP-PaaS-Übersicht angekündigt hier nun die Nutzung eines PHP-PaaS-Dienstes anhand von cloudControl, dem aktuell einzigen am Markt befindlichen Anbieter für PHP-Clouds (2 weitere stehen bereits in den Startlöchern, siee Übersicht). Ein weiterer Vorteil ist dass cloudControl eine deutsche Firma ist und aktuell auf den Amazon EC2 Servern in Irland hostet, und mit Servern in der EU hat man tendentiell weniger rechtliche Probleme als außerhalb.
Dann mal los, wir wollen als Beispiel hier ein kleines Script deployen damit es online verfügbar ist. Es geht natürlich genauso mit größeren eigenen Applikationen oder WordPress-Installationen, Typo3, was auch immer, solange die technischen Einschränkungen uns keinen Strich durch die Rechnung machen. Mein kleines Script soll einfach nur die Serverzeit als JSON zurückgeben:
<?php header('Cache-Control: no-cache, must-revalidate'); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Content-type: application/json'); echo json_encode(array('serverTime' => time()));
Je nach Betriebssystem muss man nun die benötigten Tools installieren, eine Anleitung für Windows, Mac OS X und Linux ist vorhanden und leicht durchzuführen. In meinem Fall habe ich Windows und brauche nur den cctrl Kommandozeilen Client für cloudControl installieren, Git und Putty sind bereits vorhanden.
Was wir als erstes benötigen ist ein Account bei cloudControl. Nach nicht mal 30 Sekunden ist der Account erstellt und aktiviert, es kann losgehen. Alternativ kann man das auch mit dem Kommandozeilen Client erledigen:
cctrluser create
cctrluser activate <username> <activationcode>
Dann benötigen wir einen SSH-Key, den wir mit puttygen.exe erstellen (genaue Schritte siehe Anleitung für das entsprechende Betriebssystem).
Den public Key fügen wir dann dem cloudControl Account hinzu:
cctrluser key.add cloudControl.pub
Das waren die Vorbereitungen, nun geht es weiter mit der Applikation selbst. Dazu benötigen wir ein Bazaar-Repository oder ein Git-Repository. Da ich Git-Nutzer bin hier die Schritte:
cd <AppVerzeichnis> git init git add . git commit -m 'first commit of timeserver'
Damit wir diesen Code pushen können legen wir eine neue Applikation bei cloudControl an. Der Name bestimmt auch gleich die URL, unter der sie dann erreichbar ist.
cctrlapp timeserver create php --repo git
Das Git-Repository können wir dann pushen wann immer wir möchten:
cctrlapp timeserver push
oder direkt mit git:
git push ssh://timeserver@cloudcontrolled.com/repository.git master
Nun ist der Code auf cloudControl, allerdings erst im Repository. Details zum Repository erhält man via
$ cctrlapp timeserver details App Name: timeserver Type: php Owner: phpgangsta Repository: ssh://timeserver@cloudcontrolled.com/repository.git Users Name Email phpgangsta info@phpgangsta.de Deployments timeserver/default
Wenn wir nun die neueste Version des Repositories deployen möchten tun wir das mittels
cctrlapp timeserver deploy
Nach wenigen Sekunden ist die Applikation online unter http://timeserver.cloudcontrolled.com/gettime.php
Dieses kleine Testscript benötigt keine Addons wie MySQL, aber auch das wäre kein Problem, einfach das entsprechende Addon hinzufügen:
cctrlapp timeserver/default addon.add mysql.free
Die Zugangsdaten findet man so:
$ cctrlapp timeserver/default addon Addon : alias.free Addon : mysql.free Settings mysql_password : XXXXXXXX mysql_dbsize : 5 mysql_database : YYYYYYY mysql_hostname : 127.0.0.1 mysql_username : YYYYYYY
Hier findet ihr eine phpinfo() Seite, dort könnt ihr sehen welche PHP-Version und welche Extensions verfügbar sind. Aktuell PHP 5.3.2, APC aktiviert, memory_limit 128M…
Ich habe hier nur das default-Deployment benutzt, es ist aber kein Problem, mehrere Zweige und Versionen seiner App zu deployen, so ist testing/staging einfach möglich.
Man hat Zugriff auf das access und error log des Apache:
cctrlapp timeserver/default log access
und auch Zugriff auf die deploy’ten Dateien via SFTP:
sftp://<deploymentId>@cloudcontrolled.com/
Natürlich gibt es noch viele Details und Feinheiten, Addons die man nutzen kann usw, dazu sollte man die Developer-Seiten von cloudControl (Tutorials, Documentation, FAQ) oder den YouTube Channel durchstöbern. Das Cheet Sheet ist auch interessant. Wichtig zu wissen ist unter anderem die Definition einer Box sowie die darauf aufbauende Abrechnung, wenn man mehr als die freie Performance benötigt. Man kann beim Deployment festlegen, wieviele Boxen genutzt werden sollen (min und max). Und dann wird automatisch skaliert, je nachdem wie viele Requests reinkommen werden automatisch weitere Boxen gestartet und auch wieder beendet. Dabei werden nur die PHP-Requests beachtet, statische Dateien bzw. Daten aus dem Varnish-Cache werden nicht mit einbezogen. Man kommt also mit einer Box (=2 parallele Requests) schon recht weit, wenn man für einen Request 100 Millisekunden ansetzt wären das 20 PHP-Requests pro Sekunde.
Also nichts wie ran, die Basisversion ist kostenlos: eine Box für jedes Deployment, 10GB Storage, unlimitierten Traffic, mehrere Applikationen plus alle kostenlosen Addons, das soll ungefähr für einen Blog mit 200-300 Besuchern pro Tag reichen.