Redmine i Kubernetes - Del 2: Installation af Redmine

6/30/2020
8 minutes
Lukáš Beňa

Dette er den anden del af serien om implementering af Redmine i Kubernetes. I denne artikel vil vi give instruktioner om, hvordan man implementerer en pålidelig installation af Redmine.

Genfortælling Del 1

På nuværende tidspunkt ser du nok frem til installationen af Redmine på Kubernetes. Det er trods alt det, du er kommet for, ikke?

I Redmine på Kubernetes - Del 1: Forberedelse af miljøet installerede vi Ingress Controller, en komponent til omdirigering af internetanmodninger inde i dit klynge, og vi oprettede et DNS-domæne, redminek8s.ddns.net. Nu skal vi kun konfigurere HTTPS, og så er vi klar til at implementere Redmine.


HTTPS med cert-manager

Selvom vi kunne beholde vores Redmine som HTTP, er HTTPS blevet standarden for websites, så meget at de fleste browsere advarer dig om et sikkerhedsproblem, når HTTPS ikke bruges af et website.

Normalt er aktivering af HTTPS ikke en simpel opgave, da du skal købe et certifikat og uploade det til dit site, forny det efter en vis tid og gentage processen. Cert-manager automatiserer alt dette, inklusive fornyelse af certifikater og endda opnår gratis certifikater. Du kan se mere information på deres site, men jeg vil forklare alt, hvad du behøver at vide næste gang.


Installer cert-manager

Udfør følgende trin for at installere cert-manager i din klynge:

helm repo add jetstack https://charts.jetstack.io && helm repo update

helm install cert-manager jetstack/cert-manager --set installCRDs=true

Først tilføjer du repository, hvor cert-manager er, og derefter installerer du den nyeste version.


Opret forbindelse til certifikatmyndigheden

Nu skal vi instruere cert-manager til at oprette forbindelse til certifikatudbyderen, som vi vælger. Vi vil bruge LetsEncrypt, en gratis certifikatmyndighed. Opret først denne fil (husk at erstatte <din-e-mail-adresse> med en rigtig e-mail-adresse) og navngiv den cluster-issuer.yaml

apiVersion: cert-manager.io/v1alpha2

kind: ClusterIssuer

metadata:

  name: letsencrypt

spec:

  acme:

    server: https://acme-v02.api.letsencrypt.org/directory

    email: <din-e-mail-adresse>

    privateKeySecretRef:

      name: letsencrypt

    solvers:

    - http01:

        ingress:

          class: nginx

Anvend derefter det på din klynge med

kubectl apply -f cluster-issuer.yaml

Tillykke! Filen ovenfor er den første Kubernetes-konfiguration, vi skriver og anvender på klyngen. Du har måske bemærket, at den viser, hvordan man opretter forbindelse til LetsEncrypt, men den beskriver også Ingress Controller, vi oprettede i Del 1 (class: nginx i slutningen). Denne type konfiguration har nogle linjer med mellemrum for at angive afhængighed af visse egenskaber til andre. Bevar disse mellemrum som vist for at sikre, at filen læses og anvendes korrekt.

Nu er din klynge HTTPS-aktiveret. Når vi installerer en applikation, kan vi instruere den til at fungere med HTTPS, og voilà! Hele processen med at få certifikatet bliver automatisk udført i baggrunden.


Installation af Redmine

Dette er det, vi alle har ventet på. Vi kan installere Redmine på flere forskellige måder, men den mest bekvemme er at bruge Helm. Som vi allerede har gjort før, tilføjer vi først repository'et, hvor Redmine er

helm repo add bitnami https://charts.bitnami.com/bitnami && helm repo update

Men denne gang opretter vi en konfigurationsfil i stedet for at installere med det samme, for at angive nogle brugerdefinerede indstillinger, vi ønsker, at Redmine skal have.

Vi vil adskille alle konfigurationer i deres egen sektion, men du skal placere dem alle i samme fil, en efter den anden. Kald filen values.yaml.

Alle Helm-applikationer har en values.yaml-fil med alle mulige konfigurationer, der kan foretages for applikationen. Når vi opretter vores egen values.yaml, definerer vi ændringerne, vi ønsker. Enhver værdi, vi ikke inkluderer i vores fil, vil forblive som den er i standardfilen.

Alle standardværdier kan også findes på Helm-applikationssiden, https://hub.helm.sh/charts/bitnami/redmine. Gå videre og tjek alle konfigurationerne.


Første admin-bruger

Redmine-brugernavn: adminUser

Redmine-adgangskode: <min-adgangskode>

Dette trin er lige så nødvendigt som nemt at forstå. Det er vores første bruger på Redmine, den bruger, vi vil bruge til at logge ind første gang.

Når Redmine er installeret, kan du få adgang til det med denne bruger for at konfigurere din helt nye installation.


PostgreSQL-database

Som standard kræver vores Helm-installation, at der oprettes en mariadb-database. Vi vil i stedet konfigurere vores installation til at bruge PostgreSQL. Du skal også tilføje mindst en adgangskode for at få adgang til denne database, som du kan se nedenfor

databaseType: postgresql

mariadb:

  enabled: false

postgresql:

  enabled: true

  postgresqlDatabase: Redmine

  postgresqlUsername: Redmine

  postgresqlPassword: <en-sikker-adgangskode>

Vi skal eksplicit fortælle vores installation, at vi ikke ønsker, at MariaDB skal installeres sammen med konfigurationen for PostgreSQL-databasen.


DNS-navnekonfiguration

Konfigurationen nedenfor er den anden side af DNS-konfigurationen, vi lavede i Del 1. Som du kan se, aktiverer vi TLS, protokollen bag HTTPS, og sætter værtsnavnet, vi brugte, da vi oprettede vores DNS-post:

ingress:

  enabled: true

  certManager: true

  hostname: redminek8s.ddns.net

  tls: true

  annotations:

    kubernetes.io/ingress.class: nginx

    cert-manager.io/cluster-issuer: letsencrypt

Også i de sidste to linjer forbinder vi vores applikation med Ingress Controller og med Cluster Issuer, vi oprettede før.

Nu kan vi implementere Redmine med vores brugerdefinerede konfiguration:

helm install Redmine -f values.yaml bitnami/redmine

Denne linje ligner andre helm install-linjer, vi har brugt før, men denne gang leverer vi en brugerdefineret values.yaml. Dette er måden at tilpasse enhver Helm-applikation på.

Vi skal stadig have lidt tålmodighed, da oprettelsen af applikationen tager lidt tid. Du kan køre denne kommando for at kontrollere status for dine applikationscontainere:

kubectl get pods --watch

Kommandoen vil returnere noget lignende dette:

NAME                       READY   STATUS    RESTARTS   AGE

. . .

redmine-999c68dd9-x7h2k    1/1     Running   0          6m40s

redmine-postgresql-0       1/1     Running   0          6m40s

Du skal vente, indtil status for begge containere er Running, og alle er klar 1/1, hvilket i mit tilfælde tog cirka 6 minutter.

Nu er alt klar til at åbne browseren og gå til vores nye implementering:

Redmine er klar


Opsummering

Kubernetes er et komplekst værktøj til implementering af applikationer, men vi navigerede gennem den kompleksitet med hjælp fra Helm (ingen ordspil beregnet) og implementerede en pålidelig installation af Redmine.

Du kan finde en opsummering af denne vejledning i følgende git-repo: https://github.com/lcofre/redmine-on-k8s. Du er velkommen til at sammenligne med dine filer, hvis du sidder fast.

Vi udelod nogle begreber fra diskussionen, fordi de var komplekse, eller forklaringen var sky-specifik. Blandt dem er Liveness og Readiness for din applikation, konfiguration af indgående e-mails og skalering for at håndtere mere belastning. Lad os vide nedenfor, hvad der interesserer dig mest, så vi kan diskutere det i en fremtidig vejledning.

Den ultimative Redmine-opgradering? Nemt.

Få alle kraftfulde værktøjer til perfekt projektplanlægning, -styring og -kontrol i en enkelt software.

Prøv Easy Redmine i en 30 dages gratis prøveperiode

Fuld funktionalitet, SSL-beskyttet, daglige backups, i din geolocation