For at kon­fi­gu­re­re Nextcloud på Ku­ber­ne­tes anbefaler vi at bruge S3 som lag­rings­ba­ck­end og MariaDB som database. Du kan forbedre ydeevnen ved at foretage et par ændringer i kon­fi­gu­ra­tio­nen.

Nextcloud og Ku­ber­ne­tes er en god kom­bi­na­tion

Kom­bi­na­tio­nen af Nextcloud og Ku­ber­ne­tes med S3 som lag­rings­løs­ning er en lovende løsning inden for både den private og er­hvervs­mæs­si­ge sektor. Den ikke-kom­merci­el­le cloud-software er velegnet til brug med både lokale servere og eksterne værter og kan prale af en frem­ra­gen­de sik­ker­heds­ar­ki­tek­tur sam­men­lig­net med mange Nextcloud-al­ter­na­ti­ver. Ku­ber­ne­tes er et open source-sty­rings­sy­stem til con­tai­ner­ba­se­re­de ap­pli­ka­tio­ner og kan ud over lokal brug også anvendes til cloud computing. Systemet anses for at være flek­si­belt, yderst ska­ler­bart og fejl­sik­kert. Læs videre for at finde ud af, hvordan du opsætter Nextcloud på Ku­ber­ne­tes.

Hvilke be­tin­gel­ser skal være opfyldt?

Inden du kan gå i gang med at kon­fi­gu­re­re Nextcloud på Ku­ber­ne­tes, skal der være opfyldt nogle for­ud­sæt­nin­ger. Du skal have til­stræk­ke­lig la­ger­plads og bør allerede have oprettet en Ku­ber­ne­tes-klynge. Du kan vælge at oprette denne på din lokale maskine eller bruge cloud-lager, afhængigt af din til­gæn­ge­li­ge kapacitet. Sørg desuden for, at Helm-pak­ke­hånd­te­rin­gen er kon­fi­gu­re­ret til Ku­ber­ne­tes. Når du er klar, kan du fortsætte med trinene.

Sådan opsætter du Nextcloud på Ku­ber­ne­tes trin for trin

Når du har det rette grundlag på plads, kan du gå i gang med at opsætte Nextcloud på Ku­ber­ne­tes. De vigtigste trin er beskrevet i de følgende afsnit.

Kon­fi­gu­rer DNS

Det første skridt er at oprette en A-post for et un­der­do­mæ­ne, der kan pege på den ønskede IP-adresse. Hvis du bruger den lokale løsning, er din of­fent­li­ge IP-adresse den korrekte desti­na­tion; ellers skal du indtaste den IP-adresse, du har fået fra din cloud-tjeneste. Afhængigt af DNS-udbyderen kan de nød­ven­di­ge trin variere en smule.

Tilføj og opdater Helm

Ku­ber­ne­tes in­stal­le­res ved hjælp af pak­ke­hånd­te­rin­gen Helm, som skal være in­stal­le­ret på din klient. Sørg desuden for, at du har for­bin­del­se til din Ku­ber­ne­tes-klynge. Hvis det er tilfældet, skal du tilføje Helm-repo­si­to­ri­et og opdatere det med følgende kom­man­do­er:

helm repo add nextcloud https://nextcloud.github.io/helm/
helm repo update
shell

Opret filen values.yaml

Opret nu et nyt Helm-diagram med følgende kommando:

nano values.yaml
shell

Tilføj derefter følgende spe­ci­fi­ka­tio­ner til denne fil.

Opret cron-opgaver

Definer først en tids­græn­se for cronjobs. På Unix-lignende ope­ra­tiv­sy­ste­mer er cronjobs opgaver, der kører au­to­ma­tisk i bag­grun­den med faste in­ter­val­ler. For Nextcloud på Ku­ber­ne­tes drejer det sig primært om ved­li­ge­hol­del­ses­op­ga­ver. I dette eksempel indstil­ler vi cronjob­bet til at køre hvert femte minut. Ved større da­ta­mæng­der kan det være en god idé at udføre ved­li­ge­hol­del­se oftere. Brug følgende kode:

cronjob:
    annotations: {}
    curlInsecure: false
    enabled: true
    failedJobsHistoryLimit: 5
    image: {}
    schedule: '*/5*     *** '
    successfulJobsHistoryLimit: 2
shell

Aktivér HPA

Deaktiver nu Ho­rizon­tal Pod Au­tosca­ler (HPA), som au­to­ma­tisk skalerer antallet af pods. Hvis du bruger Re­adWri­teO­n­ce til Nextcloud og fo­re­træk­ker at styre ska­le­rin­gen manuelt, bør du de­ak­ti­ve­re HPA og nøjes med én pod. Denne frem­gangs­må­de er mere praktisk, hvis kun få brugere har brug for adgang. Den relevante kode er:

hpa:
    cputhreshold: 60
    enabled: false
    maxPods: 10
    minPods: 1
shell

Overskriv bil­led­ko­de

For at sikre, at den aktuelle version af Helm tages i be­tragt­ning, skal du over­skri­ve bil­led­tag­get. Brug denne kode til at gøre det:

image:
    repositor: nextcloud
    tag: 28.0.2-apache
    pullPolicy: IfNotPresent
shell

Version 28.0.2 eller en nyere version er nu valgt.

Vælg database

Du har tre mu­lig­he­der, når du skal vælge database: MariaDB, Po­st­greSQL eller SQLite. I dette eksempel vælger vi MariaDB. Kon­fi­gu­rer denne database som beskrevet nedenfor, og deaktiver de to andre systemer:

internalDatabase:
    enabled: false
mariadb:
    db:
        name: nextcloud
        password: db-password
        user: nextcloud
    enabled: true
    master:
        persistence:
            accessMode: ReadWriteOnce
            enabled: true
            size: 8Gi
    replication:
        enabled: false
    rootUser:
        password: root-db-password
        forcePassword: true
postgresql:
    enabled: false
shell

Over­våg­ning af nøgletal

Indsæt følgende kode for at foretage over­våg­ning med Pro­met­heus eller Grafana. Dette er valgfrit.

metrics:
    enabled: true
    https: false
    image:
        pullPolicy: IfNotPresent
        repository: xperimental/nextcloud-exporter
        tag: v0.3.0
    replicaCount: 1
    service:
        annotations:
            prometheus.io/port: '9205'
            prometheus.io/scrape: 'true'
        labels: {}
        type: ClusterIP
    timeout: 5s
shell

Tillad brug af egne kon­fi­gu­ra­tions­fi­ler

Som standard bruger Nextcloud også en fil ved navn config.php til kon­fi­gu­ra­tion på Ku­ber­ne­tes. For at gøre det nemmere eller mere flek­si­belt kan du indsætte dine egne kon­fi­gu­ra­tions­fi­ler ved hjælp af følgende kode:

nextcloud:
    configs:
        custom.config.php: |-
            <?php
            $CONFIG = array (
                'overwriteprotocol' => 'https',
                'overwrite.cli.url' => 'https://drive.example.com',
                'filelocking.enabled' => 'true',
                'loglevel' => '2',
                'enable_previews' => true,
                'trusted_domains' =>
                     [
                        'nextcloud',
                        'drive.example.com'
                     ]
            );
shell

Erstat plads­hol­de­ren »example.com« med dit eget domæne.

Kon­fi­gu­rer Redis

For at forbedre caching med Redis og øge den samlede ydeevne kan du inkludere en bru­ger­de­fi­ne­ret kon­fi­gu­ra­tions­fil. Som standard in­stal­le­res Helm Redis uden ad­gangs­ko­de­be­skyt­tel­se, men det anbefales at tilføje et ekstra sik­ker­heds­lag. Brug følgende kode til at kon­fi­gu­re­re Redis med ad­gangs­ko­de­be­skyt­tel­se og integrere det med Nextcloud:

redis.config.php: |-
    <?php
    $CONFIG = array (
      'memcache.local' => '\\OC\\Memcache\\Redis',
      'memcache.distributed' => '\OC\Memcache\Redis',
      'memcache.locking' => '\OC\Memcache\Redis',
      'redis' => array(
        'host' => getenv('REDIS_HOST'),
        'port' => getenv('REDIS_HOST_PORT') ?: 6379,
        'password' => getenv('your-password-for-redis')
      )
    );
shell

Kon­fi­gu­ra­tion af lag­rings­ba­ck­end

Den sidste kon­fi­gu­ra­tions­fil er tilføjet til S3-lag­rings­ba­ck­end’et. Den er gemt i koden som følger:

s3.config.php: |-
    <?php
    $CONFIG = array (
      'objectstore' => array(
        'class' => '\\OC\\Files\\ObjectStore\\S3',
        'arguments' => array(
        'bucket'     => 'bucket-name',
        'autocreate' => true,
        'key'      => 's3-access-key',
        'secret'     => 's3-secret-key',
        'region'     => 's3-region',
        'hostname'   => 's3-endpoint',
        'use_ssl'    => true,
        'use_path_style' => true
        )
      )
    );
shell

Deaktiver Redis-kon­fi­gu­ra­tio­nen

Da du ovenfor har over­skre­vet stan­dard­kon­fi­gu­ra­tio­nen for Redis, skal denne nu de­ak­ti­ve­res for at undgå fejl ved hjælp af følgende kode:

defaultConfigs:
    .htaccess: true
    apache-pretty-urls.config.php: true
    apcu.config.php: true
    apps.config.php: true
    autoconfig.php: false
    redis.config.php: false
    smtp.config.php: true
shell

Indstil værtsnavn, ad­mi­ni­stra­tor og ad­gangs­ko­de

Indtast nu vært­s­nav­net, ad­mi­ni­stra­to­ren og den til­hø­ren­de ad­gangs­ko­de til brug af Nextcloud på Ku­ber­ne­tes. Brug denne kode til dette:

host: drive.example.com
password: your-password
username: name-of-admin
shell

Erstat plads­hol­der­ne med dine egne op­lys­nin­ger.

Opsæt e-mail-beskeder

Du kan eventuelt kon­fi­gu­re­re en SMTP-tjeneste (Simple Mail Transfer Protocol) til at modtage med­del­el­ser fra Nextcloud:

mail:
    domain: example.com
    enabled: false
    fromAddress: user
    smtp:
      authtype: LOGIN
      host: example.com
      name: username
      password: your-password 
      port: 465
      secure: ssl
shell

Kon­fi­gu­rer per­si­stens­dre­vet

Følgende lag­rings­kon­fi­gu­ra­tion gælder for data, som Nextcloud gemmer på det på­gæl­den­de lag­rings­me­die. Dette har ingen ind­fly­del­se på dine bru­ger­da­ta, som re­gel­mæs­sigt gemmes på S3:

persistence:
    accessMode: ReadWriteOnce
    annotations: {}
    enabled: true
    size: 8Gi
shell

Beskyt Redis med ad­gangs­ko­de

Det anbefales at beskytte Redis med en ad­gangs­ko­de. Dette for­hin­drer fejl under god­ken­del­sen. Brug følgende kode til dette, og udskift din ad­gangs­ko­de, hvor det er relevant:

redis:
    enabled: true
    password: 'your-password-for-redis'
    usePassword: true
shell

Begræns antallet af gen­ta­gel­ser

Da du allerede har de­ak­ti­ve­ret HPA, bør du begrænse det mulige antal repli­ka­tio­ner til 1:

replicaCount: 1
shell

Installer Nextcloud på Ku­ber­ne­tes

Til sidst skal du in­stal­le­re Nexcloud på Ku­ber­ne­tes og også tilføje MariaDB og Redis:

kubectl create ns nextcloud
helm upgrade --install --namespace nextcloud -f your-values.yaml nextcloud nextcloud/nextcloud
shell
Gå til ho­ved­me­nu­en