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:
- Das Repository wird auf dem Runner geclont
- Der Runner meldet sich mit den vorgegebenen Anmeldedaten bei Dockerhub an
- Die Github Action buildx baut die Anwendung für verschiedene Plattformen (linux/amd64, linux/armv7, linux/arm64)
- 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.