GitLab CI Runner im Docker Container [GitLab Runner] [Docker] [PHP] [NodeJS] [LESSCSS]

Ich habe ja bereits berichtet, dass ich meine GitLab-Installation in einen Docker-Container verfrachtet habe. Nun möchte ich passend dazu natürlich auch meine GitLab-Runner in Docker-Containern laufen lassen. Was mir hierbei gut gefällt: Das restliche System ist von den für Build-Prozesse notwendigen Tools nicht zugemüllt.

GitLab Runner im Docker-Container laufen lassen

Wie in der originalen Anleitung zu lesen, ist es gar nicht schwer, einen GitLab-Runner im Docker-Container auszuführen:

Doch ich will natürlich noch einige zusätzliche Tools für PHP-Entwicklung in den Runner einbinden.

Ein PHP-Optimierter GitLab-Runner

Das tolle an Docker: Auf bestehenden Images aufbauen und diese erweitern. Mit einem Dockerfile.

Ich habe also mein eigenes Dockerfile geschrieben:

Kurz erklärt: Was hier passiert ist quasi das originale Docker-Kommando (siehe ganz oben). Es wird also das Docker-Image “gitlab/gitlab-runner:latest” geladen. Dann werden zusätzliche Kommandos ausgeführt.

  1. Die Liste der verfügbaren Programme aktualisieren
  2. Neue Pakete installieren: php5, php5-pear, zip, curl, php5-mcrypt, NodeJS, npm und ncftp
  3. Das mcrypt-PHP-Modul aktivieren
  4. nochmals vergügbare Programme aktualisieren
  5. Neue Pakete installieren: php5-xsl
  6. NodeJS passend verlinken
  7. Den LessCSS-Precompiler über NodeJS installieren
  8. phpmd installieren
  9. phploc installieren
  10. Composer installieren
  11. phpcpd installieren
  12. phpdox installieren

Mit dieser Palette an Tools kann ich meine Projekte optimal bauen. Jetzt muss ich das Docker-Image nur noch erstellen und ausführen lassen:

Nun läuft mein PHP-Optimierter GitLab-Runner. Jetzt muss er nur noch registriert werden, dazu führt man folgendes Kommando aus und befolgt die Anweisungen:

Meinen Runner nutzen

Wenn Du dich um das Dockerfile nicht kümmern möchtest, aber meine Tool-Palette cool findet, kannst Du genau diesen Runner auf jedem Server installieren, dazu nutzt du statt dem obigen docker-build Kommande folgendes:

Nun zieht dein Docker sich das Dockerfile aus meinem öffentlichen Repository und baut das Docker-Image.

GitLab – Update 8.0.5 auf 8.4.4 im Docker-Container [GitLab 8.0.5] [GitLab 8.4.4] [Docker]

Heute habe ich meine GitLab-Instanz von 8.0.5 auf 8.4.4 angehoben, dies wird mir viele Vorteile bringen, die Entwicklung ist ja mächtig vorangegangen.

Etwas bammel hatte ich schon, denn dieses Update ist das erste Update von GitLab, welches ich über den Austausch des GitLab-Container machen werde. Vorher hatte ich GitLab ja direkt aus den Sourcen installiert und bin dann ende letzten Jahres von GitLab Source-Installation auf GitLab Docker Container gewechselt.

Stoppen des aktuellen GitLab Docker Container

Zuersteinmal habe ich die GitLab-Instanz gestoppt:

Weil ich nicht wusste was nun geschehen würde habe ich ein Backup gemacht:

GitLab Docker Container aktualisieren

Aktualisieren? Pfft. Nicht mit mir. Ich kille einfach den alten Docker-Container und tausche ihn aus:

Nun ließ sich der GitLab Container aber nicht starten. Mir rutschte das Herz in die Hose.

Etwas googlen und überlegen später kam mir die Idee, dass es vielleicht im Host-Update lag. Also habe ich kurzerhand die beiden anderen Container auch neugestartet und anschließend dann den zweiten Versuch für den GitLab Container durchgeführt:

Und voila: GitLab migrierte die Daten. Nachverfolgen kann man den Fortschritt über die Log-Ausgaben des Container:

Fazit nach dem GitLab Docker Container Update

Mich für das Hosting von GitLab in einem Docker-Container zu entscheiden ist echt Gold wert! So einfach war noch kein Update von GitLab für mich.

Außerdem muss ich m ich nun um keine Abhängigkeiten von GitLab mehr kümmern, dass macht ja der Cotnainer himself :)

WordPress Admin Bar nicht sichtbar [WordPress 4.3] [Benutzerrollen] [WooCommerce]

Neulich hatte ich folgendes Phänomen: Für Benutzer mit der Rolle “Redaktuer (engl. Editor)” wurde die Admin-Bar nicht angezeigt. Natürlich war in dem betreffenden Profil der Haken gesetzt, sodass die Admin Bar hätte sichtbar sein sollen. Die Suche ist theoretisch einfach: Deaktiviere alle Plugin und wechsle auf das Standard-Theme, dann schau ob es klappt. Wenn es klappt, einfach nach und nach alle Plugins wieder aktivieren und schauen, welches Plugin dafür sorgt, dass die WordPress Admin Bar verschwindet. Darauf hatte ich keine Lust!

Das Projekt ist ein gerade entstehender Online-Shop. Es ist ein gekauftes Theme im Einsatz, welches optimal für WooCommerce vorbereitet ist. Folgende Plugins sind aktiv:

  • Admin Menu Editor Pro
  • Antispam Bee
  • Benutzerwechsel (engl. User Switching)
  • Contact Form 7
  • Disable All WordPress Updates
  • Envato WordPress Toolkit
  • Imsanity
  • Manual Image Crop
  • Passwortgeschützt (engl. Password Protected)
  • Responsive Lightbox
  • Revolution Slider
  • Simple Custom CSS
  • User Role Editor
  • WooCommerce
  • WooCommerce Header Category Image
  • Wordfence Security
  • WP Sanitize file name Plus
  • WPBakery Visual Composer
  • YITH WooCommerce Wishlist

Dabei kann ich mir vorstellen, dass in dieses Problem nur wenige dieser Plugins reinspielen könnten. Da ich aber nicht viel Zeit hatte und erstmal mehr ein Workaround her sollte, als eine super Zukunftssichere Lösung, habe ich folgendes Unternommen: Ich habe ans Ende der functions.php folgende Zeile Quellcode angefügt:

Die Änderung ist absolut unkritisch. Und schon klappt es. Natürlich nur bis zum nächsten Update des Theme. Aber das ist erstmal eine schnelle Lösung. Und zeigt mir, dass hier definitiv noch ein anderes Plugin zu Gange ist, welches über eben den selben Filter irgendwann versucht, die Admin-Bar abzuschalten (Vermutung).

GitLab – Von 7.14.3 “from source” und MySQL nach 8.0.5 als Docker-Container mit PostgreSQL

Heute gehen wir zusammen mal durch, was ich alles unternommen habe um mein GitLab 7.14.3 auf ein GitLab 8.0.5 zu aktualisieren. Nebenbei habe ich MySQL verlassen und auf PostgreSQL migriert (empfohlen durch GitLab selbst). Zusätzlich läuft mein neuer GitLab dann in einer Docker-Umgebung. Aber erstmal von Anfang an.

GitLab – Ich liebe Quellcodes

Als Entwickler arbeite ich mit Quellcodes. Und das mache ich sehr sorgfältig. Ich kenne derzeit keinen Web-Entwickler der so vorgeht wie ich #selbstlobstinkt ;)

Und ein wichtiger Teil meiner Strategie ist GitLab und GitLab CI. Was genau diese beiden Tools sind, werde ich in einem anderen Artikel behandeln.

Backups – Nichts ist sicher

Wichtig ist den gesamten Prozess über immer ein Backup parat zu haben. Denn nichts ist sicher!

Aktuelle GitLab-Instanz aktualisieren

Da Backups nur in “passende” GitLab-Systeme integriert werden können, hat man zwei Möglichkeiten:

  1. Erst auf GitLab 7.14.3 in einem Docker-Container umsteigen und dann diesen aktualisieren
  2. Erst auf GitLab 8.0.5 aktualisieren und dann auf den Docker-Container umsteigen

Da ich keinen funktionierenden Docker-Container für GitLab 7.14.3 gefunden habe, habe ich Variante 2 genommen. Dazu gibt es eine Update-Anleitung, diese hat bei mir funktioniert. Was danach nicht mehr ging waren Push oder Pull-Anfragen. Das habe ich aber ignoriert. Ich war schließlich eh dabei, diese GitLab-Instanz zu löschen.

Ich habe also nochmal ein Backup durchgeführt, jetzt nämlich für GitLab 8.0.5.

Auf PostgreSQL migrieren

In den GitLab-Backups ist ein Dump-File der Datenbank hinterlegt. Also in unserem Fall aktuell ein MySQL-Export. Dieser muss migriert werden.

Es gibt dafür ein Tool, welches MySQL-Dumps nach PostgreSQL migriert, das wusste ich bereits. Allerdings hat es nicht geklappt als ich es händisch gemacht habe. Praktischerweise hat GitLab selbst dieses Tool weiter modifiziert sodass es derzeit gut möglich ist, die Migration durchzuführen. Hier lest ihr wie ein GitLab Backup mit MySQL zu einem GitLab Backup mit PostgreSQL migriert wird.

GitLab Docker-Instanzen starten

Ich habe nicht das offizielle GitLab-Docker-Image genommen, sondern die Images von sameersbn. In dem Repository gibt es viele Images, hier kommt ihr zu den Docker GitLab Images.

Der Quick-Start dort ist sehr gut dokumentiert. Ich habe nur Step 3 Launch the GitLab Container angepasst:

Daten wiederherstellen

Nun bleibt nur noch das migrierte Backup in das Backup-Verzeichnis vom Docker-Container zu schieben (bei mir halt /srv/docker/gitlab/gitlab/backups/) und schon kann der Restore beginnen.

Ich bin dazu in die Shell des Docker-Container gewechselt, das geht über

Und dort habe ich gitlab dann angewisen das Backup wiederherzustellen

Das ‘ts’ bei “BACKUP=ts” müsst ihr durch den Timestamp ersetzten, der als Prefix im Backup-Dateinamen gesetzt wurde.

GitLab 8.0.5 läuft jetzt im Docker-Container

Und schon haben wir es geschafft. Unser GitLab läuft jetzt in dem Docker-Container. Die Daten wurden vollständig migriert. Ich konnte mich einloggen.

Ein sau gutes Gefühl endlich ein vom restlichen System abgekapseltes GitLab zu haben welches sauber installiert ist. Keine großen Schwierigkeiten mehr. Echt der Hammer :)

WP API – Basic Auth geht nicht [PHP 5.5] [PHP FastCGI] [Odin Plesk Panel]

In einem meiner letzten Projekte, dem Relaunch der Seite mathehilfe24.de, sollte zum anbinden einer APP eine API eingebunden werden. Dazu setzten wir auf die WP API für JSON.

Nun musste der User authentifiziert werden, damit wir bestimmen konnten, ob nur die kostenfreien Abos zur Verfügung stehen oder der User ein Abo hat und somit alle Videos sehen kann.

Also für WP API noch schnell das Zusatz-Plugin WP JSON Basic Auth installiert.

WP API – Basic Auth geht nicht, trotz allem

Recht schnell stellte sich heraus: Das Plugin tat nicht ganz was es soll. Also zumindest klappte die Authentifizierung nicht.

Nach etwas Analyse fand ich heraus, dass aufgrund des eingesetzten FastCGI eine Erweiterung der .htaccess-Datei (welche über WP generiert wird) nötig war:

Nun klappte die Authentifizierung immer noch nicht. Ein kleines PHP Test-Script wiederung lief mit dieser Anpassung. Ich war verwirrt.

Debuggen zeigt: Plugin muss erweitert werden

Nach einem kurzen Debugging des WP JSON Basic Auth-Plugin wurde mir klar: Das Plugin muss erweitert werden, damit es mit PHP FastCGI funktioniert. Es müssen zwei Zeilen Quellcode hinzugefügt werden.

Lösung steht per Merge Request bereit

Ich habe natürlich das Plugin angepasst und die Erweiterung per Merge Request eingereicht, sodass das Plugin hoffentlich bald aktualisiert wird und die Anpassung für jedermann zu haben ist.

Hier seht ihr wie es geht: https://github.com/WP-API/Basic-Auth/pull/26/files