Übung: Platform as a Service
Vorbereitung
-
Installieren Sie das
cf
Plugin füribmcloud
:$ ibmcloud cf install
Statische Website
In dieser Übung sollen Sie eine statische Website für die Öffentlichkeit zur Verfügung stellen.
HTML-Datei
- Erstellen Sie ein neues Verzeichnis für dieses Lab, z.B. mit
mkdir -p ~/workspace/webservices/static
- Starten Sie eine Shell und wechseln Sie in das eben erstellte Verzeichnis, z.B. mit
cd ~/workspace/webservices/static
-
Legen Sie eine neue Datei
index.html
an und kopieren Sie den folgenden Inhalt hinein:<!DOCTYPE html> <html> <head> <title>Static Webpage Example</title> </head> <body> The content of the document... </body> </html>
- Öffnen Sie die Datei in einem Webbrowser und überprüfen Sie, dass das Ergebnis Ihren Erwartungen entspricht.
Deployment
-
Installieren Sie den Cloud Foundry Kommandozeilen-Client
cf
:$ curl -L "https://packages.cloudfoundry.org/stable?release=linux64-binary" | tar zx -C ~/bin/ $ export PATH=~/bin:$PATH # falls ~/bin noch nicht im $PATH ist
Weitere Installationsvarianten sind in der Cloud Foundry Dokumentation beschrieben.
-
Melden Sie sich mit
cf
bei der IBM Cloud an:$ cf login -a https://api.eu-gb.bluemix.net
-
App hochladen:
$ cf push random-app-name -b staticfile_buildpack
Hinweise:
-
Der
-b
Switch weist Cloud Foundry (CF) an, dasstatic file buildpack
für diese Applikation zu verwenden. Normalerweise ermittelt CF den Typ der Applikation automatisch; unsere Applikation ist bisher aber so einfach, dass wir CF ausdrücklich anweisen müssen, sie als statische Website zu behandeln. -
Stellen Sie sicher, dass Sie dieses Kommando von dem Verzeichnis aus aufrufen müssen, das die
index.html
enthält.
-
-
Beobachten Sie die Ausgabe und finden Sie die Zeile, die mit
urls:
beginnt. Dort finden Sie den vollständig qualifizierten Domain-Namen (“fully-qualified domain name
”) der gestarteten Applikation:requested state: started instances: 1/1 usage: 1G x 1 instances urls: random-app-name.eu-gb.mybluemix.net last uploaded: Wed Nov 8 18:26:38 UTC 2017 stack: cflinuxfs2 buildpack: staticfile_buildpack state since cpu memory disk details #0 running 2017-11-08 07:26:52 PM 0.0% 3.9M of 1G 7M of 1G
Öffnen Sie die URL im Browser and vergleichen Sie die Seite mit der lokalen Version.
-
Ändern Sie den Sourcecode und fügen Sie z.B. ein CSS-Stylesheet hinzu. Laden Sie die Applikation erneut mit
cf push
(siehe oben) hoch und beobachten Sie, dass die Änderungen wirksam wurden.
Literatur
Golang
Go installieren
Folgen Sie den Anweisungen der Herausgeber.
App Anlegen
package main
import (
"fmt"
"net/http"
"os"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, %s", "world!")
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":"+os.Getenv("PORT"), nil)
}
Lokal Testen
$ PORT=8042 go run main.go
Wenn das Programm ohne Fehler started, öffnen Sie einen Browser und gehen Sie zu localhost:8042. Dann sollte Hello, world!
angezeigt werden.
Bauen
$ GOOS=linux go build -ldflags="-s -w" -o hello-go
Gegebenenfalls müssen Sie noch ein go module
initialisieren:
$ go mod init hello-go
Jetzt können Sie erneut bauen.
Push
$ ibmcloud cf push hello-go \
-b https://github.com/cloudfoundry/binary-buildpack.git \
-c './hello-go' \
--random-route
Prüfen Sie den Erfolg, indem Sie mit dem Browser die unter routes
angegebene URL aufrufen. Dann sollte wieder Hello, world!
angezeigt werden.
Alternative
Das Binary-Buildpack verlässt sich darauf, dass Sie ein Binärfile erzeugen, das unter Linux lauffähig ist. Für Go funktioniert das gut, weil Go Binärfiles erzeugt, die (fast) frei von Abhängigkeiten sind. Zudem ist das Compilieren für andere Plattformen (z.B. auf Windows für Linux) trivial (siehe oben).
Der “Cloud Foundry-Weg” sind aber Buildpacks, die das Erzeugen einer Applikation aus ihrem Quellcode übernehmen, d.h. Sie müssen gar nicht mehr lokal kompilieren, sondern können mit cf push
ihren Quellcode “in die Cloud” senden und der Rest wird für sie erledigt.
Lesen Sie den Artikel Go Buildpack und pushen Sie den Source-Code Ihrer App (statt dem kompilierten Binärfile) mit dem Go Buildpack.
Fragen zur Kontrolle
-
Was bewirkt die Option
--random-route
? -
Was ist der wichtigste Unterschied im Arbeitsablauf, wenn Sie statt dem Binary-Buildpack das Golang-Buildpack verwenden?
-
Welcher Webserver wird bei obiger Anwendung verwendet?
Literatur
Browser-based time-tracking #php
, #mysql
Absolvieren Sie das Tutorial “Build a custom web application with IBM Cloud, PHP, and MySQL”.