Übung: Platform as a Service

Vorbereitung

  • Installieren Sie das cf Plugin für ibmcloud:

      $ ibmcloud cf install
    

Statische Website

In dieser Übung sollen Sie eine statische Website für die Öffentlichkeit zur Verfügung stellen.

HTML-Datei

  1. Erstellen Sie ein neues Verzeichnis für dieses Lab, z.B. mit mkdir -p ~/workspace/webservices/static
  2. Starten Sie eine Shell und wechseln Sie in das eben erstellte Verzeichnis, z.B. mit cd ~/workspace/webservices/static
  3. 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>
    
  4. Öffnen Sie die Datei in einem Webbrowser und überprüfen Sie, dass das Ergebnis Ihren Erwartungen entspricht.

Deployment

  1. 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.

  2. Melden Sie sich mit cf bei der IBM Cloud an:

    $ cf login -a https://api.eu-gb.bluemix.net
    
  3. App hochladen:

    $ cf push random-app-name -b staticfile_buildpack
    

    Hinweise:

    • Der -b Switch weist Cloud Foundry (CF) an, das static 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.

  4. 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.

  5. Ä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

  1. Was bewirkt die Option --random-route?

  2. Was ist der wichtigste Unterschied im Arbeitsablauf, wenn Sie statt dem Binary-Buildpack das Golang-Buildpack verwenden?

  3. 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”.

letzte Änderung: 12. Dezember 2023