# Hoe Nextcloud op Kubernetes te installeren

Om Nextcloud op Kubernetes in te stellen, raden we aan om S3 te gebruiken voor een opslagbackend en MariaDB als database. U kunt de prestaties verbeteren door enkele wijzigingen aan te brengen in de configuratie.

## Nextcloud en Kubernetes vormen een waardevolle combinatie

De combinatie van [Nextcloud](https://www.ionos.com/nl-be/digitalguide/server/gereedschap/wat-is-nextcloud/) en Kubernetes met S3 voor opslag is een veelbelovende oplossing in de particuliere en zakelijke sector. De **niet-commerciële cloudsoftware** is geschikt voor zowel lokale servers als externe hosts en beschikt over een uitstekende beveiligingsarchitectuur in vergelijking met talrijke Nextcloud-alternatieven. Kubernetes is een open-sourcebeheersysteem voor containerapplicaties en kan naast lokaal gebruik ook worden gebruikt voor cloud computing. Het systeem wordt beschouwd als **flexibel, zeer schaalbaar en storingsvrij**. Lees verder om te ontdekken hoe u Nextcloud op Kubernetes kunt instellen.

Tip Om Nextcloud met Docker te gebruiken, raadpleeg je onze uitgebreide instructies in onze digitale handleiding. We hebben ook de bijbehorende stappen voor [het installeren van Nextcloud op Ubuntu 22.04](https://www.ionos.com/nl-be/digitalguide/server/configuratie/nextcloud-ubuntu-2204/) behandeld.

## Aan welke voorwaarden moet worden voldaan?

Voordat u kunt beginnen met het instellen van Nextcloud op Kubernetes, moet aan een aantal voorwaarden worden voldaan. U hebt voldoende opslagruimte nodig en u moet al een Kubernetes-cluster hebben aangemaakt. U kunt ervoor kiezen om dit op uw lokale computer aan te maken of cloudopslag te gebruiken, afhankelijk van uw beschikbare capaciteit. Zorg er bovendien voor dat **de Helm-pakketbeheerder** is ingesteld voor Kubernetes. Als u klaar bent, kunt u doorgaan met de stappen.

## Hoe je Nextcloud stap voor stap op Kubernetes installeert

Zodra u over de juiste basis beschikt, kunt u beginnen met het instellen van Nextcloud op Kubernetes. De belangrijkste stappen worden in de volgende paragrafen samengevat.

### DNS configureren

De eerste stap is het aanmaken van een A-record voor een subdomein dat naar het gewenste IP-adres kan verwijzen. Als u de lokale oplossing gebruikt, is uw openbare IP-adres de juiste bestemming; anders voert u het IP-adres in dat door uw cloudservice is verstrekt. Afhankelijk van de DNS-provider kunnen de stappen die hiervoor nodig zijn enigszins verschillen.

### Helm toevoegen en bijwerken

Kubernetes wordt geïmplementeerd met behulp van de Helm-pakketbeheerder, die op uw client moet zijn geïnstalleerd. Zorg er bovendien voor dat u verbinding hebt met uw Kubernetes-cluster. Als dat het geval is, voegt u de Helm-repository toe en werkt u deze bij met de volgende opdrachten:

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

### Maak values.yaml aan.

Maak nu een nieuwe Helm-chart aan met de volgende opdracht:

```shell
nano values.yaml
```

Voeg vervolgens de volgende specificaties toe aan dit bestand.

### Cronjobs instellen

Stel eerst een **tijdslimiet** in **voor cronjobs**. Op Unix-achtige besturingssystemen zijn cronjobs taken die automatisch op de achtergrond worden uitgevoerd op geplande tijdstippen. Voor Nextcloud op Kubernetes zijn dit voornamelijk onderhoudstaken. In dit voorbeeld stellen we de cronjob zo in dat deze elke vijf minuten wordt uitgevoerd. Voor grotere gegevensvolumes kan het raadzaam zijn om vaker onderhoud uit te voeren. Gebruik de volgende code:

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

### HPA activeren

Deactiveer nu de Horizontal Pod Autoscaler (HPA), die automatisch het aantal pods schaalt. Als u ReadWriteOnce voor Nextcloud gebruikt en de schaalbaarheid liever handmatig wilt regelen, moet u HPA deactiveren en u concentreren op één pod. Deze aanpak is handiger als slechts een paar gebruikers toegang nodig hebben. De juiste code is:

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

### Afbeeldingstag overschrijven

Om ervoor te zorgen dat de huidige versie van Helm in aanmerking wordt genomen, overschrijf je de imagetag. Gebruik hiervoor deze code:

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

Versie 28.0.2 of een recentere versie is nu geselecteerd.

### Selecteer database

Je hebt drie opties bij het selecteren van je database: MariaDB, PostgreSQL of SQLite. Voor ons voorbeeld kiezen we voor MariaDB. Configureer deze database als volgt en deactiveer de andere twee systemen:

```shell
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
```

### Monitor voor statistieken

Om monitoring uit te voeren met Prometheus of Grafana, voeg je de volgende code toe. Dit is optioneel.

```shell
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
```

### Sta uw eigen configuratiebestanden toe

Standaard gebruikt Nextcloud ook een bestand met de naam config.php voor configuratie op Kubernetes. Om dit te vereenvoudigen of flexibeler te maken, kunt u uw eigen configuratiebestanden invoegen met behulp van de volgende code:

```shell
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'
                     ]
            );
```

Vervang de tijdelijke aanduiding ‘example.com’ door uw eigen domein.

### Redis configureren

Om caching met Redis te verbeteren en de algehele prestaties te optimaliseren, kunt u een aangepast configuratiebestand toevoegen. Standaard wordt Helm Redis geïnstalleerd zonder wachtwoordbeveiliging, maar het is raadzaam om een extra beveiligingslaag toe te voegen. Gebruik de volgende code om Redis met wachtwoordbeveiliging in te stellen en te integreren met Nextcloud:

```shell
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')
      )
    );
```

### De opslagbackend configureren

Het laatste configuratiebestand wordt ingevoegd voor de opslagbackend S3. Het wordt als volgt in de code opgeslagen:

```shell
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
        )
      )
    );
```

### Schakel de Redis-configuratie uit

Aangezien u hierboven de standaardconfiguratie voor Redis hebt overschreven, moet deze nu worden gedeactiveerd om fouten te voorkomen met behulp van de volgende code:

```shell
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
```

### Host, beheerder en wachtwoord instellen

Voer nu de host, de beheerder en het bijbehorende wachtwoord in voor het gebruik van Nextcloud op Kubernetes. Gebruik hiervoor deze code:

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

Vervang de plaatshouders door uw eigen gegevens.

### E-mailmeldingen instellen

Je kunt optioneel een SMTP-service (Simple Mail Transfer Protocol) instellen om meldingen van Nextcloud te ontvangen:

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

### Configureer de persistenschijf

De volgende persistentieconfiguratie is bedoeld voor gegevens die Nextcloud opslaat op de bijbehorende gegevensdrager. Dit heeft geen invloed op uw gebruikersgegevens, die op gezette tijden worden opgeslagen op S3:

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

### Wachtwoordbeveiliging voor Redis

Het is raadzaam om Redis met een wachtwoord te beveiligen. Dit voorkomt fouten tijdens de authenticatie. Gebruik hiervoor de volgende code en vervang waar nodig uw wachtwoord:

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

### Beperk replicaties

Aangezien u HPA al hebt gedeactiveerd, moet u het mogelijke aantal replicaties beperken tot 1:

```shell
replicaCount: 1
```

### Nextcloud installeren op Kubernetes

Installeer ten slotte Nexcloud op Kubernetes en voeg ook MariaDB en Redis toe:

```shell
kubectl create ns nextcloud
helm upgrade --install --namespace nextcloud -f your-values.yaml nextcloud nextcloud/nextcloud
```


This is a markdown version of: [https://www.ionos.com/nl-be/digitalguide/server/configuratie/nextcloud-kubernetes/](https://www.ionos.com/nl-be/digitalguide/server/configuratie/nextcloud-kubernetes/) for AI/LLM consumption.