För att konfigurera Nextcloud på Kubernetes rekommenderar vi att du använder S3 som lagringsbackend och MariaDB som databas. Du kan öka prestandan med några få ändringar i konfigurationen.

Nextcloud och Kubernetes är en givande kombination

Kombinationen av Nextcloud och Kubernetes med S3 för lagring är en lovande lösning inom den privata och affärsmässiga sektorn. Den icke-kommersiella molnprogramvaran är lämplig för arbete med lokala servrar såväl som externa värdar och har en utmärkt säkerhetsarkitektur jämfört med många Nextcloud-alternativ. Kubernetes är ett öppen källkodsbaserat hanteringssystem för containerapplikationer och kan användas för molnberäkning utöver lokal användning. Systemet anses vara flexibelt, mycket skalbart och felsäkert. Läs vidare för att ta reda på hur du konfigurerar Nextcloud på Kubernetes.

Vilka villkor måste uppfyllas?

Innan du kan börja konfigurera Nextcloud på Kubernetes måste några villkor vara uppfyllda. Du behöver tillräckligt med lagringsutrymme och bör redan ha skapat en Kubernetes-kluster. Du kan välja att skapa denna på din lokala maskin eller använda molnlagring, beroende på din tillgängliga kapacitet. Se också till att Helm-pakethanteraren är konfigurerad för Kubernetes. När du är redo kan du fortsätta med stegen.

Hur man konfigurerar Nextcloud på Kubernetes steg för steg

När du har rätt grund kan du börja konfigurera Nextcloud på Kubernetes. De viktigaste stegen sammanfattas i följande avsnitt.

Konfigurera DNS

Det första steget är att skapa en A-post för en underdomän som kan peka på önskad IP-adress. Om du använder den lokala lösningen är din offentliga IP-adress rätt destination. Annars anger du den IP-adress som tillhandahålls av din molntjänst. Beroende på DNS-leverantör kan stegen för detta skilja sig något åt.

Lägg till och uppdatera Helm

Kubernetes distribueras med hjälp av Helm-pakethanteraren, som bör vara installerad på din klient. Se också till att du har en anslutning till ditt Kubernetes-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 specifikationer i den här filen.

Ställ in cronjobs

Definiera först en tidsgräns för cronjobs. På Unix-liknande operativsystem är cronjobs uppgifter som körs automatiskt i bakgrunden med schemalagda intervall. För Nextcloud på Kubernetes är dessa främst underhållsuppgifter. I det här exemplet ställer vi in cronjob så att det körs var femte minut. För större datamängder 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

Inaktivera nu Horizontal Pod Autoscaler (HPA), som automatiskt skalar antalet poddar. Om du använder ReadWriteOnce för Nextcloud och föredrar att styra skalningen manuellt bör du inaktivera 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äkerställa att den aktuella versionen av Helm beaktas, skriv över bildtaggen. 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 alternativ när du väljer databas: MariaDB, PostgreSQL eller SQLite. I vårt exempel väljer vi MariaDB. Konfigurera denna databas enligt följande och inaktivera 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 övervakning med Prometheus 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 konfigurationsfiler

Som standard använder Nextcloud också en fil som heter config.php för konfiguration på Kubernetes. För att förenkla eller göra detta mer flexibelt kan du infoga dina egna konfigurationsfiler 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 platshållaren “example.com” med din egen domän.

Konfigurera Redis

För att förbättra cachelagringen med Redis och öka den totala prestandan kan du inkludera en anpassad konfigurationsfil. Som standard installeras Helm Redis utan lösenordsskydd, men det är tillrådligt att lägga till ett extra säkerhetsskikt. Använd följande kod för att konfigurera Redis med lösenordsskydd 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

Konfigurera lagringsbackend

Den sista konfigurationsfilen infogas för lagringsbackend 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-konfigurationen

Eftersom du har skrivit över standardkonfigurationen för Redis ovan måste denna nu inaktiveras 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, administratör och lösenord

Ange nu värden, administratören och motsvarande lösenord för användning av Nextcloud på Kubernetes. Använd denna kod för detta:

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

Ersätt platshållarna med dina egna uppgifter.

Ställ in e-postaviseringar

Du kan valfritt konfigurera en SMTP-tjänst (Simple Mail Transfer Protocol) för att ta emot aviseringar 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

Konfigurera persistensdisken

Följande persistenskonfiguration är avsedd för data som Nextcloud lagrar på motsvarande databärare. Detta påverkar inte dina användardata, som lagras på S3 enligt ett schemalagt schema:

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

Lösenordsskydda Redis

Det är tillrådligt att säkra Redis med ett lösenord. Detta förhindrar fel under autentisering. 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 replikeringar

Eftersom du redan har inaktiverat HPA bör du begränsa det möjliga antalet replikeringar till 1:

replicaCount: 1
shell

Installera Nextcloud på Kubernetes

Slutligen installerar du Nexcloud på Kubernetes 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