Kategorien
PHP PHPUnit Testing

PHP Unit Testing Präsentation

Diese Präsentation habe ich im Rahmen meiner Arbeit bei Air Berlin zum Thema Unit und Integration Testing gehalten.

Da es Air Berlin nun nicht mehr gibt, stelle ich gern diese Informationen allen zur Verfügung.

Download Testing Powerpoint Präsentation

Kategorien
PHP Server Administration

PHPLdap Extension installieren unter Linux

Um die Ldap PHP Extension zu installieren, kann man unter Linux / Ubuntu einfach den Befehl:

sudo apt-get install php-ldap
Kategorien
Server Administration

Laravel Homestead installieren von PHP Ondrej Packages

Wenn man in einer Homestead Box versucht Ondrej Packages zu installieren bekommt die Fehlermeldung:

sudo apt-get install php-ldap
Error:1 http://ppa.launchpad.net/ondrej/php/ubuntu xenial/main amd64 php7.1-ldap amd64 7.1.10-1+ubuntu16.04.1+deb.sury.org+1   404  Not Found

Dies liegt daran das das Ondrej Repository nicht bekannt ist in der Box. Es kann hinzugefügt werden mit:

sudo add-apt-repository -y ppa:ondrej/php
sudo apt-get -y update
sudo apt-get install php-ldap
Kategorien
Symfony Testing

Symfony 3 Test-Datenbank einrichten für Integration Tests

In Symofny wird automatisch beim Ausführen von Tests die  app/config/parameters_test.yml geladen.
Dort sollte dann eine andere Datenbank angegeben werden, der Einfachheit halber mit demselben Datenbank User:

database_host: same_as_dev
database_port: same_as_dev
database_name: test_db
database_user: same_as_dev
database_password: same_as_dev

Dann müssen auf der Konsole folgende Befehle ausgeführt werden:
Cache leeren:
php bin/console cache:clear –env=test

Datenbank erstellen
php bin/console doctrine:database:create –env=test

Tabellen erstellen
hp bin/console doctrine:schema:update –env=test –force

Dann könnne Fixtures geladen werden und Integration Tests geschrieben werden.

 

Kategorien
Symfony

Syfmony 3.3. – Wie man ein Repository als Service injeziert mittels Dependency Injection

In Symfony 3 wird standardmäßig immer der EntityManager injected, um dann darüber das entsprechende Repository zur Verfügung zu bekommen.

Meistens wird aber nur genau ein Repository benötigt und der Code und die Tests werden aufgebläht.

Es gibt eine einfach Möglichkeit in der Configuration einen Service von einem Respository zu erstellen:

service.repository.name:
 class: 'AppBundle\Repository\MyEntity'
 factory: 'Doctrine\ORM\EntityManagerInterface:getRepository'
 arguments: ['AppBundle\Entity\MyEntity']
Kategorien
Server Administration Webdeveloper Tools

SSL für alle und kostenlos mit certbot.eff.org

HTTPS und SSL ist wichtig für jede Webseite und oft ein lästiger Zeitvertreib, wenn die Zertifikate ablaufen und man ganz schnell die aktuellen Zertifikate installieren muss.

Eine einfache und ksotenlose Alternative ist Let’s Encrypt, die einen kostenlosen Service anbieten mit dem man nicht nur sehr schnell (5 Minuten) SSL Zertifikate installieren kann, sonder der sich auch um die Aktualisierung der Zertifikate kümmert, die alle 90 Tage ablaufen.

Dazu installiert man einen Client auf der Console namens certbot, der automatisch die Zertifikate beim hauseigenen Webserver/Loadbalancer einbindet (nginx, apache) und später per Cronjob aktuell hält.

Eine tolle Sache, habe ich auf der Seite baby-taschenrechner.de im Live Einsatz und bin sehr zufrieden.

Kategorien
JavaScript React Native

React Native für hybride native Apps

Ein sehr interssante Möglichkeit um native Apps für Android und iOS zu schreiben bietet React Native von Facebook, damit wird zwar in Javascript und react.js gecodet, aber es werden damit native Funktionen benutzt wie bei Titanium und im Gegensatz zu Phonegap.

Sicherlich eine höchst interessante Alternative zu Titanium und Phonegap.

Kategorien
Docker

Docker – eine Einführung

A product could not be loaded.

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.