Entwicklung einer Webapplikation zur Vereinfachung der Umsetzung webbasierter Anwendungen Python-BarCamp 2016 02. 03. April 2016 Florian Macherey PGI / JCNS-TA
Inhalt Einleitung Grundlagen Konzeption Implementierung Anwendungsbeispiel Zusammenfassung Ausblick 02. 03. April 2016 Florian Macherey Folie 2
Über mich Florian Macherey Duales Studium im Forschungszentrum Jülich und der Fachhochschule Aachen Mathematisch-technischer Softwareentwickler: 3. Lehrjahr Bachelorstudium Scientifc Programming: 6. Semester Vortrag Ergebnis aus praktischer Arbeit in der Ausbildung und Seminararbeit im 5. Semester 02. 03. April 2016 Florian Macherey Folie 3
Einleitung Wozu werden Webdienste heute genutzt? Kommunikation Sicherung von Daten Recherche Kollaboration Warum eine Software as a Service (SaaS) Plattform? In diesem Fall zur Recherche und Kollaboration Wissensaustausch! Wissensgewinn Benutzer/innen können ohne administrative Rechte einen Webdienst einrichten 02. 03. April 2016 Florian Macherey Folie 4
Grundlagen Hypertext Transfer Protokoll (HTTP) zur Kommunikation zwischen Server und Client Datenbank im Backend mit PostgreSQL als RDBMS Daten werden im JSON-HAL Format übertragen! HAL ist ein Dialekt von JSON 02. 03. April 2016 Florian Macherey Folie 5
Grundlagen Hyptertext Application Language { "_links": { "self": {"href": "/users/42"}, "collection": {"href": "/users/"} }, "friends": [ {"href": "/users/21"}, {"href": "/users/1"} ] } Metadaten mit "_unterstrich" Links auf Ressource selbst und auf Collection Es können auch Arrays als Werte gespeichert werden Collection eines Nutzers / einer Nutzerin hat oft ein Array mit allen einzelnen Nutzer/innen als "_embedded" Eigenschaft 02. 03. April 2016 Florian Macherey Folie 6
Grundlagen Representational State Transfer Representational State Transfer (REST) ist eine Programmierarchitektur für das WWW Wurde von Roy Thomas Fielding entwickelt Hat auch HTTP mitentwickelt Webservice hält sich streng an HTTP! ist RESTful 02. 03. April 2016 Florian Macherey Folie 7
Grundlagen Representational State Transfer REST Bedingungen: Client-Server Stateless Cache Uniform Interface Layered System Code-On-Demand Informationen sind Ressourcen Eine Repräsentation ist die Darstellung einer Ressource Server: Python-Objekte! Client: Javascript-Objekte Rohdaten werden zurück gegeben! HTML-Seite wird im Client aus Templates gerendert 02. 03. April 2016 Florian Macherey Folie 8
Grundlagen Authentifizierung HTTP Basic Authentication ausreichend da HTTPS zur Übertragung vorausgesetzt Authentifizierung mit LDAP Server Client username : password token,... Server LDAP username : token <response> Pro User kann es beliebig viele Token geben 02. 03. April 2016 Florian Macherey Folie 9
Grundlagen Docker Lightweight-Virtualisierung! wenig Overhead geringe Einrichtungszeit viele verfügbare Images existieren bereits Docker Volumes zum Speichern von Daten (seit Docker 1.9.0) Änderungen in laufenden Docker Containern nicht persistent Speichereffizienz durch Copy-on-Write 02. 03. April 2016 Florian Macherey Folie 10
Grundlagen Docker Container 1 Container n R/W Layer R/W Layer R/O Layer n. R/O Layer 3 R/O Layer 2 R/O Layer 1 Image : < name > 02. 03. April 2016 Florian Macherey Folie 11
Grundlagen Docker load tag Image backup.tar save pull push Dockerfile build run commit Docker registry Containers stop, start, restart lokale Docker Instanz lokaler Computer 02. 03. April 2016 Florian Macherey Folie 12
Konzeption Docker Webanwendungen in Containern Isoliert von anderen Webanwendungen Jede Webanwendung kann eigene Abhängigkeiten der Software innerhalb des Containers haben Starten / Stoppen der Container über Python Module 02. 03. April 2016 Florian Macherey Folie 13
Konzeption Zugriff auf SaaS Container Container 1 Container n :80 :10001 :80 :10000+n nginx Container :10001 webapp1 :10000+n webappn 02. 03. April 2016 Florian Macherey Folie 14
Konzeption Zugriff auf SaaS Container nginx als Reverse Proxy Ports über 10000 + webapp_id location /webapp1/ { proxy_pass http://webapp1/; proxy_redirect http://localhost:10001 http://$host:80/webapp1;,! } 02. 03. April 2016 Florian Macherey Folie 15
Konzeption Rechteverwaltung Benutzer/in hat eine Quota Rollen: creator, owner, user creator: kann Webanwendung löschen mind. 1, obligatorisch Anrechnung auf Quota owner: kann Benutzer/innen verwalten optional keine Anrechnung auf Quota Standardpasswort einer Webanwendung wird zufällig erzeugt 02. 03. April 2016 Florian Macherey Folie 16
Implementierung Einrichten einer Webanwendung 1 Dateneingabe in ein Webformular 2 Rechteüberprüfung (z. B. Quota) 3 Validierung der eingegeben Daten: URL A-Z, a-z, 0-9, -, _ Name String Länge zwischen 1 und 50 Zeichen 4 Eintrag in DB 5 Skript ausführen, welches Container startet 6 Evtl. Ausführen von Befehlen auf laufendem Container mit docker exec 7 nginx Reverse Proxy Konfiguration updaten 02. 03. April 2016 Florian Macherey Folie 18
Anwendungsbeispiel Docker statt WikiFamilies Mediawiki verbreitet WikiFamilies: Sammlung von mehreren Wikis auf demselben Server WikiFamilies Vor- und Nachteile: 3 von Wikimedia Foundation verwendet 7 gleiche Ressourcen / Daten 7 Spezialität der MediaWiki Software 02. 03. April 2016 Florian Macherey Folie 21
Anwendungsbeispiel Erweitern der SaaS Plattform um einen Webanwendungstypen 1 Vorhandenes Image nutzen / neues Image erstellen (Dockerfile) 2 Shellskript zum Starten des Containers erstellen 3 ServiceType Objekt in Liste der Webanwendungstypen hinzufügen mediawiki = ServiceType(script_name= mediawiki-1.23.sh,,! full_name= Mediawiki 1.23 LTS ) AVAILABLE_WEBAPP_TYPES.append(mediawiki) 4 Server neustarten 02. 03. April 2016 Florian Macherey Folie 22
Zusammenfassung SaaS Plattform Webanwendungen selbst installieren, aber kontrolliert durch Quota und Rollen PostgreSQL als RDBMS Docker für Webanwendungen nginx als Reverse Proxy 02. 03. April 2016 Florian Macherey Folie 23
Zusammenfassung :User :SaaSPlattform :ReverseProxy webapp n :SaaS install access information access response deploy success access response 02. 03. April 2016 Florian Macherey Folie 24
Ausblick Weitere Typen von Webanwendungen einfach hinzufügen API-Ressource für Administrator/innen Native Clients die REST-API nutzen, bspw. für Tablets Konfiguration der SaaS anpassen Größe der Container kontrollieren und einstellen 02. 03. April 2016 Florian Macherey Folie 25
Kontakt Vielen Dank für Ihre Aufmerksamkeit. Fragen? f.macherey@fz-juelich.de 02461 61 6663 twitter.com/f_macherey https://www.xing.com/profile/florian_macherey Webseite: https://pgi-jcns.fz-juelich.de/ portal/pages/iffwebapp.html 02. 03. April 2016 Florian Macherey Folie 26
Literatur Docker. Docker Docs. URL: https://docs.docker.com (besucht am 15. 10. 2015). Roy Thomas Fielding u. a. HTTP/1.1 - RFC2616. Hypertext Transfer Protocol HTTP/1.1. Juni 1999. URL: https://www.ietf.org/rfc/rfc2616.txt (besucht am 10. 12. 2015). Roy Thomas Fielding. Architectural Styles and the Design of Network-based Software Architecture. Dissertation. 2000. URL: https://www.ics.uci.edu/~fielding/pubs/dissertation/fielding_dissertation.pdf (besucht am 16. 10. 2015). Miguel Grinberg. Flask Web Development - Developing Web Applications with Python. O Reilly Media, Mai 2014. 258 S. ISBN: 978-1-4493-7262-0. URL: http://shop.oreilly.com/product/0636920031116.do (besucht am 15. 10. 2015). Armin Ronacher. Flask Dokumentation. Welcome Flask (A Python Microframework). 2014. URL: http://flask.pocoo.org/docs/0.10/ (besucht am 15. 10. 2015). 02. 03. April 2016 Florian Macherey Folie 27