För att kon­fi­gu­re­ra Nextcloud på Ku­ber­ne­tes re­kom­men­de­rar vi att du använder S3 som lag­rings­bac­kend och MariaDB som databas. Du kan öka pre­stan­dan med några få ändringar i kon­fi­gu­ra­tio­nen.

Nextcloud och Ku­ber­ne­tes är en givande kom­bi­na­tion

Kom­bi­na­tio­nen av Nextcloud och Ku­ber­ne­tes med S3 för lagring är en lovande lösning inom den privata och af­färs­mäs­si­ga sektorn. Den icke-kom­mer­si­el­la moln­pro­gram­va­ran är lämplig för arbete med lokala servrar såväl som externa värdar och har en utmärkt sä­ker­hets­ar­ki­tek­tur jämfört med många Nextcloud-al­ter­na­tiv. Ku­ber­ne­tes är ett öppen käll­kods­ba­se­rat han­te­rings­sy­stem för con­tai­ne­rap­pli­ka­tio­ner och kan användas för moln­be­räk­ning utöver lokal an­vänd­ning. Systemet anses vara flexibelt, mycket skalbart och felsäkert. Läs vidare för att ta reda på hur du kon­fi­gu­re­rar Nextcloud på Ku­ber­ne­tes.

Vilka villkor måste uppfyllas?

Innan du kan börja kon­fi­gu­re­ra Nextcloud på Ku­ber­ne­tes måste några villkor vara uppfyllda. Du behöver till­räck­ligt med lag­rings­ut­rym­me och bör redan ha skapat en Ku­ber­ne­tes-kluster. Du kan välja att skapa denna på din lokala maskin eller använda moln­lag­ring, beroende på din till­gäng­li­ga kapacitet. Se också till att Helm-pa­ket­han­te­ra­ren är kon­fi­gu­re­rad för Ku­ber­ne­tes. När du är redo kan du fortsätta med stegen.

Hur man kon­fi­gu­re­rar Nextcloud på Ku­ber­ne­tes steg för steg

När du har rätt grund kan du börja kon­fi­gu­re­ra Nextcloud på Ku­ber­ne­tes. De vik­ti­gas­te stegen sam­man­fat­tas i följande avsnitt.

Kon­fi­gu­re­ra DNS

Det första steget är att skapa en A-post för en un­der­do­män som kan peka på önskad IP-adress. Om du använder den lokala lösningen är din of­fent­li­ga IP-adress rätt des­ti­na­tion. Annars anger du den IP-adress som till­han­da­hålls av din moln­tjänst. Beroende på DNS-le­ve­ran­tör kan stegen för detta skilja sig något åt.

Lägg till och uppdatera Helm

Ku­ber­ne­tes dis­tri­bue­ras med hjälp av Helm-pa­ket­han­te­ra­ren, som bör vara in­stal­le­rad på din klient. Se också till att du har en an­slut­ning till ditt Ku­ber­ne­tes-kluster. Om så är fallet, lägg till Helm-arkivet och uppdatera det med följande kommandon:

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

Skapa values.yaml

Skapa nu ett nytt Helm-diagram med följande kommando:

nano values.yaml
shell

Lägg sedan till följande spe­ci­fi­ka­tio­ner i den här filen.

Ställ in cronjobs

Definiera först en tidsgräns för cronjobs. På Unix-liknande ope­ra­tiv­sy­stem är cronjobs uppgifter som körs au­to­ma­tiskt i bak­grun­den med sche­ma­lag­da intervall. För Nextcloud på Ku­ber­ne­tes är dessa främst un­der­hålls­upp­gif­ter. I det här exemplet ställer vi in cronjob så att det körs var femte minut. För större da­ta­mäng­der kan det vara lämpligt med mer frekvent underhåll. Använd följande kod:

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

Aktivera HPA

In­ak­ti­ve­ra nu Ho­ri­zon­tal Pod Au­to­sca­ler (HPA), som au­to­ma­tiskt skalar antalet poddar. Om du använder Re­ad­Wri­te­On­ce för Nextcloud och föredrar att styra skal­ning­en manuellt bör du in­ak­ti­ve­ra HPA och fokusera på en pod. Denna metod är mer praktisk om endast ett fåtal användare behöver åtkomst. Lämplig kod är:

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

Skriv över bildtagg

För att sä­ker­stäl­la att den aktuella versionen av Helm beaktas, skriv över bild­tag­gen. Använd följande kod för att göra detta:

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

Version 28.0.2 eller en nyare version är nu vald.

Välj databas

Du har tre al­ter­na­tiv när du väljer databas: MariaDB, Post­greSQL eller SQLite. I vårt exempel väljer vi MariaDB. Kon­fi­gu­re­ra denna databas enligt följande och in­ak­ti­ve­ra de andra två systemen:

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

Övervaka mätvärden

För att utföra över­vak­ning med Pro­met­heus eller Grafana, infoga följande kod. Detta är valfritt.

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

Tillåt dina egna kon­fi­gu­ra­tions­fi­ler

Som standard använder Nextcloud också en fil som heter config.php för kon­fi­gu­ra­tion på Ku­ber­ne­tes. För att förenkla eller göra detta mer flexibelt kan du infoga dina egna kon­fi­gu­ra­tions­fi­ler med följande kod:

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

Ersätt plats­hål­la­ren “example.com” med din egen domän.

Kon­fi­gu­re­ra Redis

För att förbättra cache­lag­ring­en med Redis och öka den totala pre­stan­dan kan du inkludera en anpassad kon­fi­gu­ra­tions­fil. Som standard in­stal­le­ras Helm Redis utan lö­senords­skydd, men det är till­råd­ligt att lägga till ett extra sä­ker­hets­skikt. Använd följande kod för att kon­fi­gu­re­ra Redis med lö­senords­skydd och integrera 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­re­ra lag­rings­bac­kend

Den sista kon­fi­gu­ra­tions­fi­len infogas för lag­rings­bac­kend S3. Den lagras i koden enligt följande:

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

Stäng av Redis-kon­fi­gu­ra­tio­nen

Eftersom du har skrivit över stan­dard­kon­fi­gu­ra­tio­nen för Redis ovan måste denna nu in­ak­ti­ve­ras för att undvika fel med hjälp av följande kod:

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

Ställ in värd, ad­mi­nist­ra­tör och lösenord

Ange nu värden, ad­mi­nist­ra­tö­ren och mot­sva­ran­de lösenord för an­vänd­ning av Nextcloud på Ku­ber­ne­tes. Använd denna kod för detta:

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

Ersätt plats­hål­lar­na med dina egna uppgifter.

Ställ in e-posta­vi­se­ring­ar

Du kan valfritt kon­fi­gu­re­ra en SMTP-tjänst (Simple Mail Transfer Protocol) för att ta emot avi­se­ring­ar från 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­re­ra per­sistens­dis­ken

Följande per­sistens­kon­fi­gu­ra­tion är avsedd för data som Nextcloud lagrar på mot­sva­ran­de da­ta­bä­ra­re. Detta påverkar inte dina an­vän­dar­da­ta, som lagras på S3 enligt ett sche­ma­lagt schema:

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

Lö­senords­skyd­da Redis

Det är till­råd­ligt att säkra Redis med ett lösenord. Detta för­hind­rar fel under au­ten­ti­se­ring. Använd följande kod för att göra detta och ersätt ditt lösenord där det är relevant:

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

Begränsa re­pli­ke­ring­ar

Eftersom du redan har in­ak­ti­ve­rat HPA bör du begränsa det möjliga antalet re­pli­ke­ring­ar till 1:

replicaCount: 1
shell

In­stal­le­ra Nextcloud på Ku­ber­ne­tes

Slutligen in­stal­le­rar du Nexcloud på Ku­ber­ne­tes och lägger till MariaDB och Redis:

kubectl create ns nextcloud
helm upgrade --install --namespace nextcloud -f your-values.yaml nextcloud nextcloud/nextcloud
shell
Gå till huvudmeny