Hyppää sisältöön

Welcome to our weekly research support coffee hour on Zoom! Click here for more information.

Warning!

Puhti scratch disk is becoming very full (80+ % ) resulting in performance degradation. Everybody is advised to only keep actively processed data on scratch, all other data should be deleted, transferred to host institute or stored in Lumi-O. No new quota will be granted. Click here for a tool for examining your disk usage.

Edistynyt taso

Tämä ohje vaatii hyvää Kubernetes-ympäristön tuntemusta.

Nextcloudin käyttöönotto Rahdissa

Tässä ohjeessa näytämme, miten Nextcloud otetaan käyttöön Rahdissa.

Esivaatimukset

Tarvitset tietokoneellesi asennettuna oc:n sekä helmin.

Luo uusi kansio nimeltä nextcloud

Lopuksi hakemistopuumme näyttää tältä:

nextcloud
├── docker
   ├── 32
      ├── apache
         └── config
      ├── fpm
         └── config
      └── fpm-alpine
          └── config
   └── 33
       ├── apache
          └── config
       ├── fpm
          └── config
       └── fpm-alpine
           └── config
├── kustomize
   ├── base
   └── nextcloud
└── post-render

docker on GitHub-repositorio, jonka kloonaamme seuraavassa vaiheessa.

kustomize- ja post-render-kansiot luodaan myöhemmin tässä ohjeessa.

Nextcloudin GitHub-repositorio

Meidän täytyy tehdä joitakin muutoksia Dockerfile-tiedostoon, jotta voimme ajaa Nextcloudia Rahdissa.

Rahti käyttää OKD:tä, johon sisältyy joitakin oletusturvakäytäntöjä. Lisäksi portteja 80 tai 443 ei ole mahdollista sitoa ilman korotettuja oikeuksia.

Muutoksemme tekevät seuraavaa:

  • Muuttavat hakemiston /usr/local/etc/php/conf.d oikeuksia, jotta entrypoint voi kirjoittaa siihen.
  • Muuttavat julkaistun portin 80:stä porttiin 8080.

Kloonaa repositorio:

git clone git@github.com:nextcloud/docker.git

Kun olet kloonannut repositorion, siirry hakemistoon docker/33/apache (HUOM.: nimi voi muuttua ajan myötä) ja muokkaa Dockerfile-tiedostoa lisäämällä rivit:

    [...]
    RUN set -ex; \
        fetchDeps=" \
            gnupg \
            dirmngr \
        "; \
        apt-get update; \
        apt-get install -y --no-install-recommends $fetchDeps; \
        \
        curl -fsSL -o nextcloud.tar.bz2 "https://github.com/nextcloud-releases/server/releases/download/v33.0.2/nextcloud-33.0.2.tar.bz2"; \
        curl -fsSL -o nextcloud.tar.bz2.asc "https://github.com/nextcloud-releases/server/releases/download/v33.0.2/nextcloud-33.0.2.tar.bz2.asc"; \
        export GNUPGHOME="$(mktemp -d)"; \
    # gpg key from https://nextcloud.com/nextcloud.asc
        gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 28806A878AE423A28372792ED75899B9A724937A; \
        gpg --batch --verify nextcloud.tar.bz2.asc nextcloud.tar.bz2; \
        tar -xjf nextcloud.tar.bz2 -C /usr/src/; \
        gpgconf --kill all; \
        rm nextcloud.tar.bz2.asc nextcloud.tar.bz2; \
        rm -rf "$GNUPGHOME" /usr/src/nextcloud/updater; \
        mkdir -p /usr/src/nextcloud/data; \
        mkdir -p /usr/src/nextcloud/custom_apps; \
        chmod +x /usr/src/nextcloud/occ; \
+       chmod 777 /usr/local/etc/php/conf.d/; \
+       sed -i.BAK "s/80/8080/g" /etc/apache2/ports.conf; \
+       sed -i.BAK "s/80/8080/g" /etc/apache2/sites-enabled/000-default.conf; \
        \
        apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false $fetchDeps; \
        apt-get dist-clean

    COPY *.sh upgrade.exclude /
    COPY config/* /usr/src/nextcloud/config/

+   EXPOSE 8080

    ENTRYPOINT ["/entrypoint.sh"]
    CMD ["apache2-foreground"]

Rakenna levykuvat:

docker build . --platform linux/amd64 --tag image-registry.apps.2.rahti.csc.fi/<YOUR_PROJECT>/nextcloud:33.0.0-apache

Korvaa YOUR_PROJECT Rahti-projektillasi

Kun levykuva on rakennettu, puske levykuva Rahdin rekisteriin:

docker login -p $(oc whoami -t ) -u unused image-registry.apps.2.rahti.csc.fi
docker push image-registry.apps.2.rahti.csc.fi/<YOUR_PROJECT>/nextcloud:33.0.0-apache

Nextcloud Helm Chart

Asennamme Nextcloudin Helmin kautta. Käytämme tätä Helm Chartia: https://github.com/nextcloud/helm

  1. Lisää Helm-repositorio

    helm repo add nextcloud https://nextcloud.github.io/helm/
    helm repo update
    
  2. Luo tiedosto nextcloud-values.yaml:

    image:
      registry: image-registry.apps.2.rahti.csc.fi
      repository: <YOUR_PROJECT>/nextcloud
      tag: 33.0.0-apache
      pullPolicy: Always
    
    ingress:
      enabled: false
    
    nextcloud:
      host:
      username:
      password:
    
    containerPort: 8080
    
    objectStore:
      s3:
        enabled: true
        accessKey:
        secretKey:
        host: a3s.fi
        region: regionOne
        bucket:
    
    extraInitContainers:
      - name: init-permissions
        image: busybox
        command: ["sh", "-c", "set -eux; mkdir -p /var/www/html/data; chmod 770 /var/www/html/data"]
        securityContext:
          allowPrivilegeEscalation: false
          capabilities:
            drop: ["ALL"]
        volumeMounts:
          - name: nextcloud-main
            mountPath: /var/www/html
    
    internalDatabase:
      enabled: false
    
    externalDatabase:
      enabled: true
      type: postgresql
      host:
      user:
      password:
    
    redis:
      enabled: true
    
    persistence:
      enabled: true
      size: 8Gi
    
    resources:
      limits:
        cpu: 500m
        memory: 512Mi
      requests:
        cpu: 500m
        memory: 512Mi
    
    livenessProbe:
      enabled: false
    readinessProbe:
      enabled: false
    

Pakolliset asetukset

  • image.registry - Sen rekisterin nimi, jossa rakennettu levykuva sijaitsee. Esimerkissämme Rahdin rekisteri

  • image.repository - Sen repositorion nimi, jossa rakennettu levykuva sijaitsee. Esimerkissämme Rahti-projektisi nimi ja levykuvan nimi (nextcloud)

  • image.tag - Rakennetun levykuvan tagi

  • nextcloud.host - Nextcloud-sovelluksesi julkinen URL-osoite. Käytä .rahtiapp.fi OKD Routea varten (katso myöhemmin)

  • nextcloud.username - Nextcloud-ylläpitäjäsi käyttäjänimi

  • nextcloud.password - Nextcloud-ylläpitäjäsi salasana

  • nextcloud.objectStore.s3.accessKey - Allaksen Access Key. Katso UKK:stamme, miten saat Allas S3 -tunnistetiedot

  • nextcloud.objectStore.s3.secretKey - Allaksen Secret Key. Katso UKK:stamme, miten saat Allas S3 -tunnistetiedot

  • nextcloud.objectStore.s3.bucket - Ämpärisi nimi Altaassa (sen on oltava yksilöllinen koko Altaassa. Lue lisää täältä

  • externalDatabase.host - Pukki-tietokantasi julkinen IP-osoite (aloita Pukin käyttö täältä)

  • externalDatabase.user - Pukki-tietokantasi käyttäjänimi

  • externalDatabase.password - Pukki-tietokantasi salasana

Helm-post-renderöijä ja Kustomize

Info

Lisätietoja Kustomizesta löydät dokumentaatiostamme

Lisätietoja Helmistä löydät UKK:stamme

Helm 4:stä alkaen post-renderöijät on toteutettu liitännäisinä, mikä tarkoittaa, että meidän täytyy luoda oma Helm-liitännäinen.

Miksi tarvitsemme itse tehdyn liitännäisen?

Koska Helmin täytyy muokata joitakin mallipohjia ennen niiden käyttöönottoa. --post-renderer <plugin> täyttää tämän tarpeen.

  1. Luo uusi kansio nimeltä post-render nextcloud-kansiosi juureen

  2. Luo uusi bash-tiedosto ja tallenna se nimellä kustomize-postrenderer kansioon post-render:

    #!/usr/bin/env bash
    
    set -x
    
    SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
    cd "$SCRIPT_DIR" || exit 6
    
    env >/tmp/kustomize.log
    
    # Save Helm-rendered YAML to base.yaml
    cat >"$OLDPWD/kustomize/base/base.yaml"
    
    # Build final manifests
    if type kustomize >/dev/null 2>&1; then
    KBIN="kustomize build"
    elif command -v oc >/dev/null 2>&1; then
    KBIN="oc kustomize"
    else
    echo "ERROR, oc command not found. Exiting." >&2
    exit 5
    fi
    
    exec $KBIN "$OLDPWD/kustomize/nextcloud" 2> >(tee -a /tmp/kustomize.log >&2)
    
  3. Luo edelleen post-render-kansiossa tiedosto plugin.yaml:

    apiVersion: "v1"
    type: "postrenderer/v1"
    name: "kustomize"
    version: "0.1.0"
    runtime: "subprocess"
    runtimeConfig:
      platformCommand:
        - os: linux
          command: "$HELM_PLUGIN_DIR/kustomize-postrenderer"
        - os: darwin
          command: "$HELM_PLUGIN_DIR/kustomize-postrenderer"
    
  4. Asenna juuri luomasi liitännäinen:

    helm plugin install post-render
    

    Tarkista, että liitännäinen on asennettu, suorittamalla komento helm plugin list

  5. Luo kansio nimeltä kustomize ja kaksi alikansiota: base ja nextcloud

  6. Luo base-kansioon kaksi tiedostoa:

    kustomization.yaml

    apiVersion: kustomize.config.k8s.io/v1beta1
    kind: Kustomization
    
    resources:
      - base.yaml
      - route.yaml
    

    route.yaml

    apiVersion: route.openshift.io/v1
    kind: Route
    metadata:
      name: nextcloud
    spec:
      host:
      tls:
        insecureEdgeTerminationPolicy: Redirect
        termination: edge
      to:
        kind: Service
        name: nextcloud
        weight: 100
    
  7. Luo nextcloud-kansioon yksi tiedosto nimeltä kustomization.yaml:

    apiVersion: kustomize.config.k8s.io/v1beta1
    kind: Kustomization
    
    resources:
      - ../base/
    
    patches:
      - target:
          kind: Deployment
          labelSelector: app.kubernetes.io/name=nextcloud
        patch: |
          - op: remove
            path: /spec/template/spec/securityContext
    
      - target:
          kind: Route
          name: nextcloud
        patch: |
          - op: replace
            path: /spec/host
            value: # Must be the same as `.Values.nextcloud.host`
    

    Tämä tiedosto on meidän "kustomization". Meidän täytyy poistaa securityContext, ja luomme OKD Routen.

    Routen osalta sinun täytyy lisätä kohtaan value: sama arvo, joka on määritelty kohdassa .Values.nextcloud.host

  8. VALINNAINEN Asenna kustomize

    Rahdin komentorivityökalussa oc kustomize on sisäänrakennettu ominaisuus.

    Jos haluat asentaa kustomizen, löydät eri binaarit tältä sivulta

Käyttöönotto

Kun kaikki on valmista, voit ottaa Nextcloudin käyttöön suorittamalla tämän komennon:

helm install nextcloud nextcloud/nextcloud -f nextcloud-values.yaml --post-renderer kustomize

Suomenkielinen tekoälykäännös

Sisällössä voi esiintyä virheellistä tietoa tekoälykäännöksestä johtuen.

Klikkaa tästä antaaksesi palautetta