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:
  repository: 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
yaml
IONOS CLOUD Managed Ku­be­r­ne­tes
Gestiona las cargas de trabajo de los co­n­te­ne­do­res con total seguridad

La pla­ta­fo­r­ma ideal para apli­ca­cio­nes de co­n­te­ne­do­res de alto re­n­di­mie­n­to y gran es­ca­la­bi­li­dad, integrada en el eco­si­s­te­ma de IONOS CLOUD con soporte experto 24/7.

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
yaml

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
yaml

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 values.yaml nextcloud nextcloud/nextcloud
shell
Ir al menú principal