Para instalar o Nextcloud no Ku­ber­ne­tes, re­co­men­da­mos usar S3 para o back-end de ar­ma­ze­na­mento e MariaDB como solução de banco de dados. Com algumas al­te­ra­ções nas con­fi­gu­ra­ções, você consegue melhorar o de­sem­pe­nho.

Nextcloud e Ku­ber­ne­tes: Com­bi­na­ção de sucesso

A com­bi­na­ção de Nextcloud e Ku­ber­ne­tes com S3 para ar­ma­ze­na­mento é uma solução pro­mis­sora tanto para uso privado quanto em­pre­sa­rial. O software de nuvem não comercial é adequado para trabalhar com ser­vi­do­res locais e hosts externos, os­ten­tando uma excelente ar­qui­te­tura de segurança quando comparado às diversas al­ter­na­ti­vas ao Nextcloud. Ku­ber­ne­tes é um sistema de ge­ren­ci­a­mento de código aberto para apli­ca­ções em con­têi­ne­res e pode ser usado tanto na com­pu­ta­ção em nuvem quanto lo­cal­mente. O sistema é con­si­de­rado flexível, altamente escalável e à prova de falhas. Leia este artigo até o final para descobrir como instalar o Nextcloud no Ku­ber­ne­tes.

Dica

Para instalar o Nextcloud com o Docker, consulte esse tutorial passo a passo do nosso Digital Guide. Também ensinamos você como instalar o Nextcloud no Ubuntu 22.04.

Pré-re­qui­si­tos de sistema

Antes de iniciar a ins­ta­la­ção do Nextcloud no Ku­ber­ne­tes, algumas condições devem ser atendidas. Você precisa ter espaço de ar­ma­ze­na­mento su­fi­ci­ente e criar um cluster Ku­ber­ne­tes. Isso pode ser feito em sua máquina local ou no ar­ma­ze­na­mento em nuvem, de­pen­dendo da ca­pa­ci­dade dis­po­ní­vel. Além disso, é preciso se assegurar de que o ge­ren­ci­a­dor de pacotes Helm esteja con­fi­gu­rado para o Ku­ber­ne­tes. Quando tudo estiver pronto, você poderá pros­se­guir com o processo de ins­ta­la­ção.

Passo a passo: Instalar Nextcloud no Ku­ber­ne­tes

Depois de preparar a base ne­ces­sá­ria, comece o processo de ins­ta­la­ção do Nextcloud no Ku­ber­ne­tes. Resumimos os prin­ci­pais passos nas seções a seguir.

Con­fi­gu­rar DNS

O primeiro passo é criar um A-Record para um sub­do­mí­nio que seja capaz de apontar para o endereço IP desejado. Se estiver usando a solução local, seu endereço IP público é o destino correto. Caso contrário, insira o IP informado pelo seu serviço de nuvem. Esses passos podem apre­sen­tar pequenas variações, de­pen­dendo do provedor de DNS.

Adicionar e atualizar Helm

O Ku­ber­ne­tes é im­ple­men­tado usando o ge­ren­ci­a­dor de pacotes Helm, que precisa ser instalado no seu cliente. Além disso, cer­ti­fi­que-se de ter uma conexão com o seu cluster Ku­ber­ne­tes. Em caso positivo, adicione o re­po­si­tó­rio do Helm e atualize-o com os seguintes comandos:

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

Criar values.yaml

Crie um gráfico Helm com o seguinte comando:

nano values.yaml
shell

Em seguida, adicione no arquivo as es­pe­ci­fi­ca­ções descritas abaixo.

Definir cronjobs

Primeiro, defina um limite de tempo para cronjobs. Em sistemas ope­ra­ci­o­nais do tipo Unix-like, cronjobs são tarefas exe­cu­ta­das au­to­ma­ti­ca­mente e em segundo plano durante in­ter­va­los definidos. No caso do Nextcloud no Ku­ber­ne­tes, essas são as tarefas de ma­nu­ten­ção primárias. Neste exemplo, definimos o cronjob para rodar a cada cinco minutos. Para volumes de dados maiores, talvez seja acon­se­lhá­vel uma ma­nu­ten­ção mais frequente. Use o seguinte código:

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

Ativar HPA

Em seguida, desative o Ho­ri­zon­tal Pod Au­tos­ca­ler (HPA), que re­di­men­si­ona au­to­ma­ti­ca­mente o número de pods. Se você usa Re­ad­Wri­te­Once no Nextcloud e prefere controlar o re­di­men­si­o­na­mento ma­nu­al­mente, desative o HPA e foque em um pod. Essa abordagem é mais con­ve­ni­ente se poucos usuários pre­ci­sa­rem de acesso à solução. O código cor­res­pon­dente é:

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

Subs­ti­tuir tag image

Para assegurar que a versão atual do Helm seja usada, substitua a tag image. Para fazer isso, use o seguinte código:

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

A versão 28.0.2 ou mais recente será se­le­ci­o­nada.

Se­le­ci­o­nar banco de dados

Você tem três opções de banco de dados para escolher: MariaDB, Post­greSQL ou SQLite. Em nosso exemplo, usaremos o MariaDB. Configure o banco de dados seguindo os detalhes abaixo e desative os outros dois sistemas:

internalDatabase:
    enabled: false
mariadb:
    db:
        name: nextcloud
        password: db-senha
        user: nextcloud
    enabled: true
    master:
        persistence:
            accessMode: ReadWriteOnce
            enabled: true
            size: 8Gi
    replication:
        enabled: false
    rootUser:
        password: root-db-senha
        forcePassword: true
postgresql:
    enabled: false
shell

Monitorar métricas

Para realizar o mo­ni­to­ra­mento com Pro­metheus ou Grafana, insira o código a seguir. Este passo é 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­ber­ne­tes da IONOS
O jeito mais simples de gerenciar cargas de trabalho em con­têi­ne­res.

Ins­ta­la­ção de clusters Ku­ber­ne­tes to­tal­mente au­to­ma­ti­zada, vi­si­bi­li­dade máxima e controle de clusters K8s.

Habilitar arquivos de con­fi­gu­ra­ção próprios

Por padrão, o Nextcloud também usa um arquivo chamado “config.php” para as con­fi­gu­ra­ções feitas no Ku­ber­ne­tes. Para sim­pli­fi­car ou deixar o processo mais flexível, insira os seus próprios arquivos de con­fi­gu­ra­ção usando o código a seguir:

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

Substitua o pla­cehol­der “exemplo.com” pelo seu próprio domínio.

Con­fi­gu­rar Redis

Para melhorar o ar­ma­ze­na­mento em cache com o Redis e aprimorar o de­sem­pe­nho geral, adicione um arquivo de con­fi­gu­ra­ção per­so­na­li­zado. Por padrão, o Helm Redis é instalado sem proteção com senha, mas é re­co­men­dá­vel incluir essa camada extra de segurança. Use o código a seguir para con­fi­gu­rar o Redis com senha e integre-o ao 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("sua-senha-do-redis")
      )
    );
shell

Con­fi­gu­rar back-end de ar­ma­ze­na­mento

O último arquivo de con­fi­gu­ra­ção é inserido para o back-end de ar­ma­ze­na­mento S3. Ele é definido no código a seguir:

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
Cloud storage at an un­be­a­ta­ble price
  • Perfect for backups and archiving.
  • Redundant and secure data storage across multiple regions.
  • Un­be­a­ta­ble price-per­for­mance ratio at $4.99/TB.

Desativar con­fi­gu­ra­ção do Redis

Como você subs­ti­tuiu a con­fi­gu­ra­ção padrão do Redis na seção acima, ela deverá ser de­sa­ti­vada para evitar erros. Para fazer isso, use este código:

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­nis­tra­dor e senha

Insira o host, o ad­mi­nis­tra­dor e a senha para usar o Nextcloud no Ku­ber­ne­tes. Use este código:

host: drive.exemplo.com
password: sua-senha
username: nome-do-administrador
shell

Substitua os pla­cehol­ders pelos seus próprios dados.

Con­fi­gu­rar no­ti­fi­ca­ções por e-mail

Op­ci­o­nal­mente, você pode con­fi­gu­rar um serviço SMTP (Simple Mail Transfer Protocol) para receber no­ti­fi­ca­ções do Nextcloud:

mail:
    domain: exemplo.com
    enabled: false
    fromAddress: user
    smtp:
      authtype: LOGIN
      host: exemplo.com
      name: nomedeusuario
      password: sua-senha 
      port: 465
      secure: ssl
shell

Con­fi­gu­rar unidade de per­sis­tên­cia

A con­fi­gu­ra­ção de per­sis­tên­cia a seguir é destinada aos dados que o Nextcloud armazena no sistema cor­res­pon­dente. Ela não afeta os seus dados de usuário, que são ar­ma­ze­na­dos no S3 em in­ter­va­los definidos:

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

Proteger Redis com senha

É re­co­men­dá­vel proteger o Redis com uma senha para impedir a ocor­rên­cia de erros durante a au­ten­ti­ca­ção. Para isso, use o código a seguir, subs­ti­tuindo o pla­cehol­der pela sua senha:

redis:
    enabled: true
    password: sua-senha-no-redis
    usePassword: true
shell

Limitar re­pli­ca­ções

Como você já desativou o HPA, é preciso limitar o número possível de re­pli­ca­ções para 1:

replicaCount: 1
shell

Instalar Nextcloud no Ku­ber­ne­tes

Para finalizar, instale o Nextcloud no Ku­ber­ne­tes e adicione o MariaDB e o Redis:

kubectl create ns nextcloud
helm upgrade --install --namespace nextcloud -f your-values.yaml nextcloud nextcloud/nextcloud
shell
Ir para o menu principal