Deployment - pigtastic/UBQ-Smarthome GitHub Wiki

Wir haben uns dazu entschieden unsere Anwendung als Docker Images zur Verfügung zu stellen. Der Vorteil darin liegt in der einfachen Einrichtung bzw. der geringen Voraussetzungen. Der Nutzer benötigt lediglich eine Docker Installation.

Wie wird aus der Anwendung ein Image?

Die Grundlage zur Dockerisierung der Anwendung ist das sogenannte Dockerfile. Das Dockerfile definiert welche Software zusätzlich zur Anwendung installiert werden muss und gibt an mit welchem Befehl die Anwendung startet. Im Beispiel genauer das Dockerfile des Servers erläutert:

# Als Basis dient ein leichtgewichtiges Image mit vorinstallierten Node.js 12.x
FROM node:12-alpine

# WORKDIR erstellt ein Arbeitsverzeichnis im Image
WORKDIR /usr/src/app 

# Kopieren der package*.json um notwendige Abhänigtkeiten  zu installieren
COPY package*.json ./ 
RUN npm ci

COPY . .

# Explizite Angabe des freigelegten Ports
EXPOSE 4000

# Befehl mit dem die Anwendung gestartet wird
ENTRYPOINT [ "npm", "run", "prodServer" ]

Das Dockerfile für gaia-ui enthält zudem den Befehl zu Installation eines NGNIX. Dieser Webserver ist zuständig für die Auslieferung der Website.

FROM node:12.16.1-alpine As builder

WORKDIR /usr/src/app

COPY package.json package-lock.json ./

RUN npm ci

COPY . .

// Befehl zum Build der Angular Application 
RUN npm run build --prod

Installation von nginx
FROM nginx:1.15.8-alpine

COPY --from=builder /usr/src/app/dist/gaia-app/ /usr/share/nginx/html

GitHub Actions

Workflow

Der Workflow deployt auf einen Pull Request auf main eine neue Version des Images zu Dockerhub. Sowohl für gaia-server sowie gaia-ui wird dieser Workflow ausgeführt. Folgender Ablauf beschreibt die Funktion des Workflows:

  1. Das Repository wird auf dem Runner geclont
  2. Der Runner meldet sich mit den vorgegebenen Anmeldedaten bei Dockerhub an
  3. Die Github Action buildx baut die Anwendung für verschiedene Plattformen (linux/amd64, linux/armv7, linux/arm64)
  4. Unter dem angegebenen Tag wird das fertige Image veröffentlicht
name: Docker_Image_Dockerhub_CD

on:  
  pull_request:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Docker login
        env:
          DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
          DOCKERHUB_PASSWORD: ${{ secrets.DOCKERHUB_PASSWORD }}
        run: |
          docker login -u $DOCKERHUB_USERNAME -p $DOCKERHUB_PASSWORD
      - name: Install buildx
        id: buildx
        uses: crazy-max/ghaction-docker-buildx@v1
        with:
          buildx-version: latest
      - name: build the Docker image and push to dockerhub
        run: |
          docker buildx build --push \
          --tag pigtastic/gaia-server:latest \
          --platform linux/amd64,linux/arm/v7,linux/arm64 .

Dockerhub

Die fertigen Images können von Dockerhub bezogen werden.