Kategorien
Docker

Docker – eine Einführung

Docker ist ein Virtualisierungs-Tool, mit dem sich Betriebsystemumgebungen und dort lauffähige Software in Container verpackt werden kann und auch auf betriebsystemfremden Umgebungen ausgeführt werden kann.

Die Vorteile von Docker:

– mit Docker können sehr einfach Container ausgetauscht werden, dies hilft bei der Arbeit an gemeinsamen Projekten weiter, wenn Infrastruktur angeapsst werden muss, erst auf der dev Umgebung, dann auf der Test Umgebung usw. So können Test mit der passenden Umgebung ausgeführt werden, man hat somit eine dynamische Testumgebung, anstelle einer statischen

– performance Vorteile gegenüber virtuellen Maschinen

– die Container machen es einfacher, die Entwicklungsumgebung bei Softwareprojekten allen Teilnehmern schnell und einfach zur Verfügung zu stellen. Dadurch wird das Onboarding einfacher und Abhängigkeiten werden vermieden, wie z.B. ein Development Server, auf dem alle arbeiten, der aber nicht verändert werden darf

– auch verteilte Systeme könnne so endlich im Development und Testing Umgebung simuliert und getestet werden. Dadurch könnne Fehler früher gefunden und vermieden werden. Wer kennt das nicht, das Produktivsystem besteht aus mehreren Nodes hinter einem Loadbalancer mit Master/Slave Datenbank, aber das Dev/Test/Staging System hat nur eine Node ohne Slave.

– Plattformunabhängikeit: Man kann auf seinem MAC Windows Applikationen laufen lassen im Container ohne Probleme

Docker besteht aus mehreren Komponenten:

Kategorien
Amazon AWS Docker GIT MySQL PHP PHP 7 Projekte Redis Symfony

Projekt: baby-taschenrechner.de

Das gerade fertiggestellt Projekt baby-taschenrechner.de beschäftigt sich mit den Fragestellungen rund um die Entwicklung des eigenen Kindes:

  • Wie groß wird mein Kind werden in x-Jahren
  • Wie schwer wird mein Kind in x-Jahren
  • Ist mein Kind zu schwer/zu dünn
  • Welche Kleidergröße wird es wann tragen?

Die Webseite soll Eltern dabei helfen herauszufinden, wann sie welche Kleidergröße kaufen müssen, um im nahenden Winter/Sommer das passende zu Hause zu haben.

Eltern können so einschätzne, ob das Kind zu dünn oder zu dick ist  für ihr Alter/Größe/Gewicht-Verhältnis.

Für die Realiserung wurden folgende Technologien verwendet:

Symfony 3, Docker, MySQL, PHP, GIT, Google Material Design, Amazon AWS

Kategorien
Elasticsearch

Authentifizierung mit X-Pack für Elasticsearch einrichten

Um eine einfach HTTP basic authentication einzurichten für Elasticsearch mit Username und Passwort muss man als erstes X-Pack installieren.

Danach sollten alle Funktionen automatisch mit Basic Auth geschützt sein. Nach der Installation steht ein Default-User bereit, um weiterarbeiten zu können:

Name: elastic
Password: changeme

Damit können dann erfolgreich Requests gemacht werden:

curl --user elastic:changeme -XGET 'localhost:9200'

Anlegen eigener User

Nun könnne eigene User hinzugefügt werden:

curl --user elastic:changeme -XPOST 'hlocalhost:9200/_xpack/security/user/SebastianViereck?pretty' -H 'Content-Type: application/json' -d'
{
  "password" : "thePassword",
  "roles" : [ "superuser"],
  "full_name" : "Sebastian Viereck",
  "email" : "email@sebastianviereckEmails.de",
  "metadata" : {
    "intelligence" : 7
  },
  "enabled": true
}

Danach können sofort Requests mit dem User gemacht werden:

curl --user SebastianViereck:thePassword -XGET 'localhost:9200'

Es sollten eigene Rollen angelegt werden und benutzt werden oder wie hier die vorgefertigten Rollen (superuser) benutzt werden.

Deaktivieren des Elastic Users

Sehr wichtig: Natürlich muss der Default elastic User mit dem „changeme“ Passwort wieder deaktiviert werden. In der elasticsearch.yml muss dafür der folgende Parameter eingesetzt werden:

xpack.security.authc.accept_default_password: false

Und der elasticsearch Service neugestartet werden:

 sudo service elasticsearch restart

Zur Kontrolle sollte bei dem Request eine Fehlermeldung erscheinen:

curl --user elastic:changeme -XGET 'localhost:9200'

Weitere Verbesserungen der Sicherheit

Es sollte unbedingt eine Daten-Verschlüsselung mit SSL benutzt werden.

Der IP Raum, mit dem überhaupt kommuniziert werden darf, sollte auch eingeengt werden.

Kategorien
Amazon AWS Elasticsearch

ELK Stack auf Amazon EC2 installieren

Um den ELK Stack, bestehend aus:

  • Logstash
  • Elasticsearch
  • Kibana

auf Amazon AWS zum Testen auf einer einzigen Amazon EC2 Instanz zu installieren, kann man wie folgt vorgehen:

Man fährt eine EC2 Instanz hoch, die nicht zu klein ist, was den Ram anbelangt, mindestens eine m4.large mit 8GB Ram und 2 Prozessoren, da Elasticsearch schon gehobene Ansprüche an die Speicher stellt und auch Logstash sehr ressourcenhungrig ist. Als Betriebsystem habe ich Ubuntu-16 gewählt (ami-1e339e71).

Dann kann man eine Elastic-IP auf die Instanz legen, damit man die Instanzen unkompliziert austauschen kann und man trotzdem die IP weiter behält.

Security Groups

Kategorien
Elasticsearch

Elasticsearch Completion Suggest zeigt nur Ergebnisse vom Anfang des Strings an

Wenn man ein Autocomplete mit Elasticsearch mit Realtime „Search-As-You-Type“ Funktionalität bauen will, bietet Elasticsearch ein sehr schnelles Completion Suggest an.

Das Problem ist, dass damit nur Ergebnisse erzielt werden können, die am Anfang des Strings liegen:

Ein Suche nach „Jackson“ findet nicht den Eintrag „Michael Jackson„. Oder eine Suche nach „Thiller Michael Jackson“ findet nicht „Michael Jackson Thriller„.

Die Lösung ist: Es ist schlichtweg nicht möglich mit dem Completion Suggest dies zu bewerkstelligen, da der Algorithmus dies nicht unterstützt.

Um trotzdem die passende Ergebnisse zu bekommen, habe ich  die Daten für das Autocomplete über denselben Query, wie für die Suchergebnisse generiert. Dies ist zwar Performance mäßig schlechter, aber die Ergebnisse des Autocomplete und der Suchergebnisse nach dem Abschicken stimmen auf jeden Fall überein und iritieren den User nicht.

Kategorien
Elasticsearch

Einführung in Elasticsearch

A product could not be loaded.

Elasticsearch macht den Einstieg nicht einfach, es ist hilfreich die folgenden Begrifflichkeiten zu verstehen.

Der Analyser

Ein Analyser berechnet die Daten für den Index vor und speichert das Ergebnis beim Aktualisieren der Daten einmalig ab. Aus dieser Menge an Tokens kann dann die Suche Ergebnisse ermitteln.

Ein Analyzer besteht aus 3 Teilen, die in der Reihenfolge angewendet werden:

1. Character Filter
– html_strip: Entfernt HTML Tags and dekodiert HTML Entitäten wie zum Beispiel &
– mapping: Ersetzt jedes Vorkommen eines Strings durch einen anderen
– pattern_replace character: Ersetzt mit Hilfe eines Regex jeden Treffer durch einen geeigneten
2. Tokenizer

– Ein Tokenizer berechnet aus einem String Tokens, d.h. einzelne Wörter und Wortgruppen

3. Token Filter

– ein Token Filter kann Tokens herausfiltern, die z.B: sehr kurz sind oder bestimmte Stop-Wörter wie „der“, „es“, „am“

Es gibt auch schon vorgefertigte Analyzer für den Anfang.

Wenn nur ein Analyzer angegen wird, dann wird dieser sowohl für die Indexierung, als auch für den Query-String verwendet. Es lassen sich unterschiedliche verwenden mit Hilfe von analyzer und search_analyzer.

Mapping

Kategorien
Elasticsearch

Elasticsearch Suggest Completion sehr langsam

Wenn das Auto-Completion Suggest Queries sehr langsam werden (beim mir um 1000ms = 1s), dann kann das daran liegen, dass contexts benutzt werden.

"titleSuggest": {
  "type": "completion",
  "contexts": [
    {
      "name": "contextName",
      "type": "category",
      "path": "path"
    }
  ]
},

Ohne Context werden diese Queries wieder schneller um den Faktor 100 (10ms).

Kategorien
Diverses PHP

Die REST Webservice Architur – ein Überblick mit PHP

Wenn man heutzutage einen Webservice bauen will, kommt man um REST nicht mehr herum. Als quasi Standard erfüllt es die Bedürfnisse an eine moderne Schnittstelle am besten, im Gegensatz zu den Alternativen aus der grauen Vergangenheit: RPC, DCOM, CORBA, RMI und SOAP.

Was sind die Vorteile von REST?

1. Lose Kopplung

REST Schnittstellen können theoretisch gegeneinander ausgetauscht werden.

2. Interoperabilität

REST über HTTP ist in jeder Umgebung verfügbar und sehr einfach anzusprechen im Gegensatz zu den komplizierteren Ansätzen wie SOAP und CORBA.

3. Performance und Skalierbarkeit

Durch die Zustandslosigkeit können viele Anfragen aus dem Cache beantwortet werden und aufeinander folgende Anfragen müssen nicht von demselben System beantwortet werden (Skalierbarkeit)

Grundprinzipien von REST

Kategorien
VBA Excel

MS Excel: Fehler beim Kompilieren Projekt oder Bibliothek nicht gefunden

Die Fehlermeldung „Fehler beim Kompilieren Projekt oder Bibliothek nicht gefunden“ hatte ich heute, sie war an einer Stelle, an der eine Variable nicht vorher mit Dim initialisiert worden waren. Dort stoppte die Ausführung bei meinem Excel für MAC mit der Fehlermeldung:

Fehler beim Kompilieren Projekt oder Bibliothek nicht gefunden

Die Ursache war tatsächlich, dass eine Windows Bibliothek nicht verfügbar war, nachdem der Verweis entfernt worden war, ging alles wieder.

Visualb Basic Editor -> Extras -> Verweise

dort das Häckchen entfernen mit dem „NICHT VORHANDEN“:

Bildschirmfoto 2017-09-18 um 14.47.13

 

Kategorien
Amazon AWS Elasticsearch PHP Projekte XT-Commerce

Projekt: Elasticsearch für XT-Commerce Shop Suche

Das letzte Projekt war sehr spannend, es handelte sich um eine Erweiterung des PHP Shop-Systems namens XT-Commerce bzw. des Derivats SEO-Commerce um eine Suche aktuellem Standards für Zeedee Berlin.

Elasticsearch wurde auf einer eigene Amatzon MWS EC2 Instanz gehostet mit 1GB Ram und 1 CPU (sehr kostengünstig).

Die folgende Funktionalität kann ganz einfach wieder deaktiviert werden an zentraler Stelle, wenn es Probleme mit Elasticsearch gibt und die alte MySQL Suche tritt wieder in Kraft.

1. Autocomplete / Suggest Funktion beim Befüllen der Suche

Beim Eintippen des Suchwortes werden schon Vorschläge gegeben im Millisekundenbereich. Dadurch kann der Kunde viel Zeit sparen und bei der Rechtschreibung wird auch geholfen. suggest_zeedee