01 February 2014 Blog, VM, Windows Azure, WordPress Robert Muehsig

Seit ca. 2 Wochen läuft dieser Blog auf einer Wordpress Installation in einer Azure VM. Da ich mir das Thema erst recht kompliziert vorgestellt hatte, hier mal ein Blick hinter die Kulissen.

Warum umziehen?

Bislang lief dieser Blog (und die englischsprachige Variante) bei einem Hoster irgendwo in Deutschland. Grösstes Problem war aber, dass der Hoster kein Windows Server 2012 R2 angeboten hat und der Vertrag nur jährlich Kündigungen zu liess. Die “jährliche” Kündigung war damals mein “Versehen”, es gab auch eine monatliche Variante, die ich aber damals nicht in betracht gezogen hatte. Die Kommunikation lief aber auch immer via Email oder schlimmer via Fax ab, sodass ich nicht mehr davon angetan war.

Anderer grosser Grund auf Azure zu gehen: Aktuell besitze ich eine MSDN Ultimate Lizenz samt 150€ Guthaben im Monat. Damit lässt sich schon was anstellen.

In einem älteren Blogpost hatte ich zudem schonmal über die Unterschieder der “traditionellen” Hoster und Cloud Computing Anbieter geschrieben.

Windows Azure – eine VM für die Blogs

Die Migration auf Azure musste relativ schnell erfolgen und im Laufe der Jahre hatte ich an der WordPress Installation rumgeschraubt und war mir nicht sicher ob der Blog unter Azure Websites laufen würde. Zudem war da das Problem der Datenbank: Die beiden MySQL Datenbanken sind nicht gerade “klein”, sodass ich am Ende für den MySQL Hoster mehr bezahlt hätte als mit der puren VM. Daher habe ich in diesem Fall zu einer Azure VM gegriffen. Ansonsten würde ich immer eine Azure Website empfehlen.

Es gibt eine WordPress Variante die auch mit SQL Azure läuft, hab ich aber aktuell noch nicht genauer angeschaut.

Das Erstellen der VM war kinderleicht und nach wenigen Minuten auch Einsatzbereit:

image

WordPress installieren über den Web Platform Installer

Wie bereits erwähnt läuft der Blog auf WordPress und bislang hatte ich nur sehr wenig Problem mit IIS/Windows/PHP/MySQL (nur manche WP Plugins kommen nicht mit Windows klar).

Die Installation ist über den Web Platform Installer auch schnell erledigt:

image

Daten Migration: wp-uploads / Datenbanken

Nach der “puren” Installation habe ich meine Daten aus der alten Installation rübergeholt. Darunter war das “wp-uploads” Verzeichnis sowie das Theme. Meine MySQL Datenbanken hatte ich als Sql Script über ein Powershell Script (nutz ich auch für das Backup der MySQL DBs) erzeugt. Die Scripts habe ich dann jeweils über HeidiSQL auf der Azure VM eingespielt.

Danach die entsprechenden Daten in der wp-config.php hinterlegen und es lief schonmal.

DNS Migration: code-inside.de/blog auf blog.codeinside.eu

Mit der Migration wollte ich auch mal das Thema Domains angehen. Bislang lief der Blog unter “code-inside.de/blog” und seit einiger Zeit wollte ich eigentlich weg von dem “Subdirectory” hin zu einer “Subdomain”. Das Thema ist in diesem Blogpost näher erklärt. Ziel war es: Hin zu Subdomains und die neue Domain soll “codeinside.eu” sein (ganz im Sinne des europäischen Gedanken ;))

Die “www.code-inside.de” zeigt einfach auf die öffentliche IP der Azure VM. “blog.codeinside.eu”, “blogin.codeinside.eu”, “cdn.codeinside.eu” zeigt via CName auf codeinside.cloudapp.net – was ebenfalls auf die Azure VM zeigt.

Im IIS ist da folgende Struktur hinterlegt:

image

ci-blog hört auf den Hostname “blog.codeinside.eu”

ci-blogin hört auf den Hostname “blogin.codeinside.eu”

ci-cdn hört auf den Hostname “cdn.codeinside.eu”

redirects ist meine “Catchall” Anwendung

 

 

Der eigentliche Redirect – gesteuert über die web.config

Ziel mit der Umleitung war es alle Links am Leben zu erhalten:

- code-inside.de/blog musste auf blog.codeinside.eu verweisen
- code-inside.de/blog-in musste auf blogin.codeinside.eu verweisen
- code-inside.de/files musste auf cdn.codeinside.eu verweisen
- alles andere sollte auf die neu Startseite “www.codeinside.eu” weitergeleitet werden

Die “redirects” App im IIS beinhaltet nur eine web.config mit folgenden Inhalt:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <clear />
                <rule name="code-inside.de blog-in" stopProcessing="true">
                    <match url="blog\-in(.*)" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                        <add input="{HTTP_HOST}" pattern="code-inside.de" />
                    </conditions>
                    <action type="Redirect" url="http://blogin.codeinside.eu{R:1}" redirectType="Permanent" />
                </rule>
                <rule name="code-inside.de blog" stopProcessing="true">
                    <match url="blog(.*)" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                        <add input="{HTTP_HOST}" pattern="code-inside.de" />
                    </conditions>
                    <action type="Redirect" url="http://blog.codeinside.eu{R:1}" redirectType="Permanent" />
                </rule>
                <rule name="code-inside.de files" stopProcessing="true">
                    <match url="files(.*)" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                        <add input="{HTTP_HOST}" pattern="code-inside.de" />
                    </conditions>
                    <action type="Redirect" url="http://cdn.codeinside.eu/files{R:1}" redirectType="Permanent" />
                </rule>
                <rule name="catch all" stopProcessing="true">
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
                    <action type="Redirect" url="http://www.codeinside.eu" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

WordPress selbst speichert an mehreren Orten was die “öffentliche” URL ist – daher musste ich zum Teil über HeidiSQL (weil ich immer auf das alte Admin Dashboard umgeleitet wurde ;) ) oder über die Weboberfläche die Werte in der Konfiguration ändern.

Feedburner Einstellung anpassen

Der RSS Feed des Blogs wird nach wie vor über Feedburner ausgeliefert. Durch die DNS Einstellung musste ich da auch die Daten ändern.

Mission Completed

Soweit bin ich ziemlich zufrieden mit dem Ergebnis. Falls jemand einen Fehler bemerkt oder irgendwas “nicht mehr so geht wie früher”, dann einfach in die Kommentare oder via Email/Twitter etc. bescheid geben.

Wesentlich schicker als bei einem traditionellen Hoster ist natürlich das Dashboard:

image

Beide Blogs laufen derzeit auf einer Small (1 core, 1.75 GB memory) VM (zwei VMs wäre Aufgrund der MySQL Installation auch komplizierter) und bislang sieht das ganz gut aus. Nach einem Monat möchte ich euch noch ein Update liefern, sodass man sieht was Azure in dieser Konstellation mit dem Traffic auf dem Blog überhaupt kostet. Bei Fragen immer her damit :)


Written by Robert Muehsig

Software Developer - from Dresden, Germany, now living & working in Switzerland. Microsoft MVP & Web Geek.
Other Projects: KnowYourStack.com | ExpensiveMeeting | EinKofferVollerReisen.de

If you like the content and want to support me you could buy me a beer or a coffee via Litecoin or Bitcoin - thanks for reading!