Si vous souhaitez con­fi­gu­rer Nextcloud sur Ku­ber­netes, il est re­com­mandé d’utiliser un S3 comme backend de stockage et MariaDB comme base de données. Et pour améliorer les per­for­mances, il suffit d’apporter quelques mo­di­fi­ca­tions à la con­fi­gu­ra­tion. Découvrez-les dans cet article.

Nextcloud et Ku­ber­netes : une com­bi­nai­son qui en vaut la peine

La com­bi­nai­son de Nextcloud et de Ku­ber­netes avec S3 comme backend de stockage est dans de nombreux cas une solution pro­met­teuse dans le domaine privé et pro­fes­sion­nel. Le logiciel Cloud non com­mer­cial est adapté au travail avec des serveurs locaux ainsi qu’avec des hôtes externes et séduit également par une ex­cel­lente ar­chi­tec­ture de sécurité en com­pa­rai­son à de nom­breuses al­ter­na­tives à Nextcloud. Ku­ber­netes est un système de gestion open source pour les ap­pli­ca­tions de con­te­neurs et peut être utilisé pour le Cloud computing en plus de l’uti­li­sa­tion locale. Le système est considéré comme ex­trê­me­ment flexible, évolutif au maximum et très résistant aux pannes. Nous vous montrons comment con­fi­gu­rer Nextcloud sur Ku­ber­netes.

Conseil

Vous souhaitez utiliser Nextcloud avec Docker ? Vous trouverez des ins­truc­tions complètes à ce sujet dans notre Digital Guide. Nous y avons aussi réuni les étapes pour l’ins­tal­la­tion de Nextcloud sous Ubuntu 22.04.

Quelles sont les con­di­tions préa­lables à remplir ?

Avant de pouvoir commencer à con­fi­gu­rer Nextcloud sur Ku­ber­netes, certaines con­di­tions doivent être remplies. Vous avez besoin de suf­fi­sam­ment de mémoire et vous devriez déjà avoir créé un cluster Ku­ber­netes. Que vous le créiez sur votre machine locale ou que vous utilisiez pour cela un stockage Cloud, c’est à vous de décider en fonction des capacités dont vous avez besoin ou dont vous disposez. Le ges­tion­naire de paquets Helm devrait déjà être configuré pour Ku­ber­netes et est né­ces­saire pour la suite des ins­truc­tions.

Installer Nextcloud sur Ku­ber­netes : les prin­ci­pales étapes

Une fois que vous avez créé la base adéquate, vous pouvez commencer à con­fi­gu­rer la com­bi­nai­son Nextcloud sur Ku­ber­netes. Nous avons résumé pour vous les prin­ci­pales étapes dans les pa­ra­graphes suivants.

Con­fi­gu­rer le DNS

La première étape consiste à créer un A-Record pour un sous-domaine qui peut faire référence à votre adresse IP souhaitée. Si vous misez sur la solution locale, votre adresse IP publique est la bonne des­ti­na­tion ; sinon, déposez l’IP mise à dis­po­si­tion par votre service Cloud. Selon le four­nis­seur DNS, les étapes né­ces­saires peuvent différer quelque peu.

Ajouter Helm Ku­ber­netes et le mettre à jour

Le dé­ploie­ment pour Ku­ber­netes s’effectue à l’aide du ges­tion­naire de paquets Helm dont il a été question. Celui-ci doit être installé sur votre client. Vous avez également besoin d’une connexion à votre cluster Ku­ber­netes. Si c’est le cas, ajoutez le ré­fé­ren­tiel Helm et mettez-le à jour. Pour cela, utilisez les deux commandes suivantes :

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

Créer values.yaml

Créez main­te­nant un nouveau helmchart avec la commande suivante :

nano values.yaml
shell

Ajoutez ensuite les spé­ci­fi­ca­tions suivantes dans ce fichier.

Pa­ra­mé­trer les tâches cron

Dé­fi­nis­sez tout d’abord une limite de temps pour les tâches cron. Il s’agit, sur les systèmes d’ex­ploi­ta­tion de type unix, de tâches qui sont exécutées et répétées au­to­ma­ti­que­ment en arrière-plan. Dans le cas de Nextcloud sur Ku­ber­netes, il s’agit prin­ci­pa­le­ment de tâches de main­te­nance. Dans notre exemple, nous ordonnons l’exécution toutes les cinq minutes. Toutefois, une main­te­nance plus fréquente peut être con­seil­lée, notamment pour les grands volumes de données. Voici le code :

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

Dé­sac­ti­ver HPA

Dé­sac­ti­vez main­te­nant le HPA (Ho­ri­zon­tal Pod Au­tos­ca­ler) ; celui-ci met au­to­ma­ti­que­ment à l’échelle le nombre de pods. Si vous utilisez Read­Wri­teOnce pour Nextcloud et souhaitez contrôler vous-même la mise à l’échelle, vous devriez dé­sac­ti­ver HPA et vous con­cen­trer ainsi sur un seul pod. Si seulement quelques uti­li­sa­teurs sou­hai­tent accéder aux données, cette solution est la plus pratique. Le code se présente comme suit :

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

Remplacer la balise d’image

Pour être sûr que la version actuelle de Helm soit prise en compte, écrasez la balise image. Pour cela, utilisez ce code :

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

Main­te­nant, la version 28.0.2 ou une version plus récente est sé­lec­tion­née.

Sé­lec­tion­ner la base de données

Lors du choix de votre base de données, vous avez trois options : MariaDB, Post­greSQL ou Sqlite. Pour notre exemple, nous optons pour MariaDB. Vous con­fi­gu­rez cette base de données comme suit et dé­sac­ti­vez les deux autres systèmes.

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

Sur­veil­ler les métriques

Si vous souhaitez effectuer un mo­ni­to­ring avec Pro­me­theus ou Grafana, insérez le code suivant. Cette étape est cependant fa­cul­ta­tive.

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
Managed Ku­ber­netes de IONOS Cloud
Or­ches­trez vos charges de travail en toute sécurité

Managed Ku­ber­netes est la pla­te­forme idéale pour des ap­pli­ca­tions de con­te­neurs per­for­mantes et hautement évo­lu­tives.

Autoriser les fichiers de con­fi­gu­ra­tion per­son­na­li­sés

Par défaut, Nextcloud utilise sur Ku­ber­netes un fichier appelé config.php pour la con­fi­gu­ra­tion. Si vous souhaitez sim­pli­fier ou adapter cette procédure, vous pouvez insérer vos propres fichiers de con­fi­gu­ra­tion. Pour cela, utilisez le code suivant :

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

Pour cela, remplacez le caractère de rem­pla­ce­ment « exemple.com » par votre propre domaine.

Con­fi­gu­rer Redis

Ce fichier de con­fi­gu­ra­tion per­son­na­lisé est mis en place pour améliorer la mise en cache avec Redis, et donc la per­for­mance globale. Par défaut, Helm installe Redis sans pro­tec­tion par mot de passe. Il est toutefois re­com­mandé d’intégrer une pro­tec­tion sup­plé­men­taire, notamment parce que cela évite des problèmes ul­té­rieurs lors de la connexion. Pour cela, insérez ce code :

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('votre-mot-de-passe-pour-redis')
      )
    );
shell

Adapter le backend mémoire

Le dernier fichier de con­fi­gu­ra­tion est inséré pour le backend mémoire S3. Il est en­re­gis­tré dans le code de la manière suivante :

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
IONOS Cloud Object Storage
Stockage de données sûr et éco­no­mique

Augmentez votre ren­ta­bi­lité grâce à un stockage évolutif, qui s'intègre à vos scénarios d'ap­pli­ca­tion. Vos données sont protégées par nos serveurs d'une grande fiabilité et un contrôle des accès per­son­na­lisé.

Dé­sac­ti­ver la con­fi­gu­ra­tion Redis

Comme vous avez écrasé plus haut la con­fi­gu­ra­tion par défaut pour Redis, il faut main­te­nant la dé­sac­ti­ver pour éviter les erreurs. Saisissez pour cela le code suivant :

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

Définir l’hôte, l’admin et le mot de passe

Dé­fi­nis­sez main­te­nant l’hôte, l’ad­mi­nis­tra­teur et le mot de passe cor­res­pon­dant pour l’uti­li­sa­tion de Nextcloud sur Ku­ber­netes. Pour cela, utilisez ce code :

host: drive.exemple.com
password: votre-mot-de-passe
username: nom-de-l-admin
shell

Remplacez nos exemples gé­né­riques par vos propres données.

Pro­gram­mer les no­ti­fi­ca­tions par email

Vous pouvez éven­tuel­le­ment mettre en place un service SMTP (Simple Mail Transfer Protocol) pour recevoir des no­ti­fi­ca­tions de Nextcloud à l’aide de ce code :

mail:
    domain: exemple.com
    enabled: false
    fromAddress: utilisateur
    smtp:
      authtype: LOGIN
      host: exemple.com
      name: nom-d-utilisateur
      password: votre-mot-de-passe
      port: 465
      secure: ssl
shell

Con­fi­gu­rer le stockage per­sis­tant

La con­fi­gu­ra­tion suivante concerne le stockage per­sis­tant des données que Nextcloud en­re­gistre sur le disque. Notez que cela ne s’applique pas aux données uti­li­sa­teur, qui sont pla­ni­fiées pour être stockées sur S3.

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

Sécuriser Redis avec un mot de passe

Il est re­com­mandé de sécuriser Redis avec un mot de passe, cela permet d’éviter les erreurs lors de l’au­then­ti­fi­ca­tion. Utilisez le code suivant en rem­pla­çant votre mot de passe personnel à l’endroit approprié :

redis:
    enabled: true
    password: 'votre-mot-de-passe-pour-redis'
    usePassword: true
shell

Limiter les Re­pli­ca­Sets

Comme vous avez déjà désactivé HPA plus haut, vous devriez limiter le nombre possible de Re­pli­ca­Sets à 1. Voici l’ins­truc­tion :

replicaCount: 1
shell

Installer Nextcloud sur Ku­ber­netes

Pour finir, installez Nexcloud sur Ku­ber­netes et ajoutez également MariaDB et Redis. La commande se présente ainsi :

kubectl create ns nextcloud
helm upgrade --install --namespace nextcloud -f your-values.yaml nextcloud nextcloud/nextcloud
shell
Aller au menu principal