Si quieres co­n­fi­gu­rar Nextcloud en Ku­be­r­ne­tes, es re­co­me­n­da­ble que utilices S3 como backend de al­ma­ce­na­mie­n­to y MariaDB como base de datos. Puedes mejorar el re­n­di­mie­n­to con algunos cambios en la co­n­fi­gu­ra­ción.

Combinar Nextcloud y Ku­be­r­ne­tes vale la pena

Combinar Nextcloud y Ku­be­r­ne­tes con S3 como backend de al­ma­ce­na­mie­n­to es en muchos casos una solución pro­me­te­do­ra para el sector privado y em­pre­sa­rial. El software de nube no comercial es adecuado tanto para trabajar con se­r­vi­do­res locales como con hosts externos y destaca en co­m­pa­ra­ción con numerosas al­te­r­na­ti­vas a Nextcloud por una excelente ar­qui­te­c­tu­ra de seguridad. Ku­be­r­ne­tes es un sistema de gestión de apli­ca­cio­nes en co­n­te­ne­do­res de código abierto y puede uti­li­zar­se tanto lo­ca­l­me­n­te como para co­mpu­tación en la nube. Este sistema es co­n­si­de­ra­do ex­tre­ma­da­me­n­te flexible, altamente escalable y muy fiable. Te mostramos cómo co­n­fi­gu­rar Nextcloud en Ku­be­r­ne­tes.

Consejo

¿Quieres utilizar Nextcloud con Docker? En ese caso, echa un vistazo al artículo de nuestra guía. En ella también hablamos de la in­s­ta­la­ción de Nextcloud en Ubuntu 22.04.

¿Qué re­qui­si­tos deben cumplirse?

Antes de que puedas comenzar a co­n­fi­gu­rar Nextcloud en Ku­be­r­ne­tes, es necesario cumplir con algunos re­qui­si­tos. Ne­ce­si­ta­rás su­fi­cie­n­te al­ma­ce­na­mie­n­to y ya deberías haber creado un clúster de Ku­be­r­ne­tes. Puedes crearlo en tu ordenador o utilizar un al­ma­ce­na­mie­n­to en la nube, de­pe­n­die­n­do de los recursos que necesites o tengas di­s­po­ni­bles. También debes haber co­n­fi­gu­ra­do el gestor de paquetes Helm para Ku­be­r­ne­tes. Si ya has cumplido estos re­qui­si­tos, puedes comenzar con los pasos in­di­vi­dua­les.

Instalar Nextcloud en Ku­be­r­ne­tes: los pasos más im­po­r­ta­n­tes

Ahora que están sentadas las bases ne­ce­sa­rias, puedes comenzar a co­n­fi­gu­rar la co­m­bi­na­ción de Nextcloud y Ku­be­r­ne­tes. Hemos resumido los pasos más im­po­r­ta­n­tes a co­n­ti­nua­ción para que puedas hacerlo sin problemas.

Co­n­fi­gu­rar DNS

El primer paso es crear un registro A para un su­b­do­mi­nio que pueda dirigirse a la dirección IP deseada. Si estás uti­li­za­n­do una solución local, tu dirección IP pública será el destino correcto; de lo contrario, pro­po­r­cio­na la IP de tu servicio en la nube. Los pasos ne­ce­sa­rios para ello pueden variar un poco de­pe­n­die­n­do del proveedor de DNS que se esté usando.

Añadir y ac­tua­li­zar Helm

Para preparar los recursos para Ku­be­r­ne­tes, se utiliza el gestor de paquetes me­n­cio­na­do antes: Helm. Asegúrate de tenerlo instalado en tu di­s­po­si­ti­vo y de estar conectado a tu clúster de Ku­be­r­ne­tes. Si todo está co­n­fi­gu­ra­do, añade el re­po­si­to­rio de Helm y ac­tua­lí­za­lo con los si­guie­n­tes dos comandos:

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

Crear values.yaml

Crea ahora un nuevo Helm chart uti­li­za­n­do el siguiente comando:

nano values.yaml
shell

Después, añade las si­guie­n­tes es­pe­ci­fi­ca­cio­nes en este archivo.

Co­n­fi­gu­rar los Cronjobs

En primer lugar, define un límite de tiempo para los Cronjobs. En sistemas ope­ra­ti­vos similares a Unix Estas, estos son tareas que se ejecutan au­to­má­ti­ca­me­n­te en segundo plano y se repiten. En el caso de Nextcloud en Ku­be­r­ne­tes, se trata pri­n­ci­pa­l­me­n­te de labores de ma­n­te­ni­mie­n­to. En el ejemplo, se indica que se ejecuten cada cinco minutos. Sin embargo, es­pe­cia­l­me­n­te con conjuntos de datos más grandes, puede ser re­co­me­n­da­ble realizar el ma­n­te­ni­mie­n­to con mayor fre­cue­n­cia. Este es el código co­rre­s­po­n­die­n­te:

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

Des­ac­ti­var el HPA

Ahora desactiva el HPA (Ho­ri­zo­n­tal Pod Au­to­s­ca­ler). Este escalador ajusta de manera au­to­má­ti­ca el número de pods. Si estás uti­li­za­n­do Read­W­ri­teO­n­ce para Nextcloud y deseas controlar la es­ca­la­bi­li­dad, deberías des­ac­ti­var el HPA y centrarte en un solo pod. Esta es una solución mucho más co­n­ve­nie­n­te si solo algunos usuarios quieren acceder a los datos. El código se escribe así:

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

So­bre­s­cri­bir la etiqueta de la imagen

Para ase­gu­rar­te de que se tenga en cuenta la versión actual de Helm, so­bre­s­cri­be la etiqueta de la imagen usando este código:

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

Ahora se se­le­c­cio­na la versión 28.0.2 o una más reciente.

Elegir una base de datos

Al elegir tu base de datos, tienes tres opciones: MariaDB, Po­s­t­gre­S­QL o SQLite. Para el ejemplo, se ha optado por MariaDB. Configura esta base de datos de la manera descrita a co­n­ti­nua­ción y desactiva los otros dos sistemas.

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

Monitoreo para métricas

Si quieres hacer un se­gui­mie­n­to con Pro­me­theus o Grafana, puedes añadir el siguiente código de manera opcional:

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­be­r­ne­tes de IONOS
La pla­ta­fo­r­ma ideal para gestionar apli­ca­cio­nes en co­n­te­ne­do­res.

Co­m­ple­ta­me­n­te escalable, seguro y con ac­tua­li­za­cio­nes au­to­má­ti­cas.

Permitir archivos de co­n­fi­gu­ra­ción pe­r­so­na­li­za­dos

Por defecto, Nextcloud en Ku­be­r­ne­tes utiliza un archivo llamado config.php para la co­n­fi­gu­ra­ción. Si deseas si­m­pli­fi­car o hacer más flexible esta co­n­fi­gu­ra­ción, puedes utilizar tus propios archivos de co­n­fi­gu­ra­ción. Aquí tienes el código necesario para hacerlo:

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

Para hacerlo, si­m­ple­me­n­te tienes que re­em­pla­zar el marcador de posición “example.com” con tu propio dominio.

Co­n­fi­gu­rar Redis

El siguiente archivo de co­n­fi­gu­ra­ción pe­r­so­na­li­za­do se im­ple­me­n­ta­rá para mejorar el al­ma­ce­na­mie­n­to en caché uti­li­za­n­do Redis. Helm instala Redis por defecto sin pro­te­c­ción de co­n­tra­se­ña, por lo que es re­co­me­n­da­ble añadir una capa adicional de seguridad para evitar problemas futuros al iniciar sesión. Para ello, se puede utilizar el siguiente código para ello:

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

Co­n­fi­gu­rar el backend de al­ma­ce­na­mie­n­to

El último archivo de co­n­fi­gu­ra­ción se añade para el backend de al­ma­ce­na­mie­n­to S3. A co­n­ti­nua­ción, se muestra cómo se integra en el código:

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
Al­ma­ce­na­mie­n­to seguro, escalable y rentable

Obtén el mejor precio en Object Storage de alta gama. Reduce costos sin co­m­pro­me­ter la potencia, al tiempo que proteges tus datos con se­r­vi­do­res de alta seguridad y control de acceso in­di­vi­dual.

Des­ac­ti­var la co­n­fi­gu­ra­ción de Redis

Como an­te­rio­r­me­n­te so­bre­s­cri­bi­s­te la co­n­fi­gu­ra­ción pre­de­te­r­mi­na­da de Redis, ahora debes des­ac­ti­var­la para evitar errores. El código adecuado para ello es el siguiente:

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

Definir host, ad­mi­ni­s­tra­dor y co­n­tra­se­ña

Ahora, define el host, el ad­mi­ni­s­tra­dor y la co­n­tra­se­ña co­rre­s­po­n­die­n­tes para utilizar Nextcloud en Ku­be­r­ne­tes. Escribe para ello este código:

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

Si­m­ple­me­n­te, sustituye los ma­r­ca­do­res de posición por tus datos.

Co­n­fi­gu­rar no­ti­fi­ca­cio­nes por correo ele­c­tró­ni­co

Tienes la opción de co­n­fi­gu­rar un servicio SMTP (protocolo simple de tra­n­s­fe­re­n­cia de correo) para recibir no­ti­fi­ca­cio­nes de Nextcloud. Si quieres activarla, utiliza el siguiente código:

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

Co­n­fi­gu­ra­ción del disco pe­r­si­s­te­n­te

La siguiente co­n­fi­gu­ra­ción de pe­r­si­s­te­n­cia está destinada a los datos que Nextcloud almacena en el disco co­rre­s­po­n­die­n­te. Esto no incluye tus datos de usuario, que se guardarán en S3 como estaba previsto.

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

Pro­te­c­ción con co­n­tra­se­ña para Redis

Es re­co­me­n­da­ble proteger Redis con una co­n­tra­se­ña, lo cual también ayuda a prevenir errores de au­te­n­ti­ca­ción. Para ello, sigue el siguiente código y asegúrate de re­em­pla­zar ‘your-password-for-redis’ por tu co­n­tra­se­ña personal:

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

Limitar las réplicas

Como ya has des­ac­ti­va­do el HPA, deberías limitar el número de réplicas a 1. Esta es la in­s­tru­c­ción que debes aplicar:

replicaCount: 1
shell

Instalar Nextcloud en Ku­be­r­ne­tes

Por último, instala Nextcloud en Ku­be­r­ne­tes y añade MariaDB y Redis. Usa este comando:

kubectl create ns nextcloud
helm upgrade --install --namespace nextcloud -f your-values.yaml nextcloud nextcloud/nextcloud
shell
Ir al menú principal