Se pretender con­fi­gu­rar o Nextcloud no Ku­ber­ne­tes, é re­co­men­dá­vel utilizar o S3 como backend de ar­ma­ze­na­mento e o MariaDB como base de dados. Pode melhorar o de­sem­pe­nho com algumas al­te­ra­ções na con­fi­gu­ra­ção.

Vale a pena combinar o Nextcloud com o Ku­ber­ne­tes

Combinar o Nextcloud e o Ku­ber­ne­tes com o S3 como backend de ar­ma­ze­na­mento é, em muitos casos, uma solução pro­mis­sora para o setor privado e em­pre­sa­rial. O software de nuvem não comercial é adequado tanto para trabalhar com ser­vi­do­res locais como com hosts externos e destaca-se em com­pa­ra­ção com inúmeras al­ter­na­ti­vas ao Nextcloud devido à sua excelente ar­qui­te­tura de segurança. O Ku­ber­ne­tes é um sistema de gestão de apli­ca­ções em con­ten­to­res de código aberto e pode ser utilizado tanto lo­cal­mente como para com­pu­ta­ção em nuvem. Este sistema é con­si­de­rado ex­tre­ma­mente flexível, altamente escalável e muito fiável. Mostramos-lhe como con­fi­gu­rar o Nextcloud no Ku­ber­ne­tes.

Quais são os re­qui­si­tos a cumprir?

Antes de começar a con­fi­gu­rar o Nextcloud no Ku­ber­ne­tes, é ne­ces­sá­rio cumprir alguns pré-re­qui­si­tos. Vai precisar de espaço de ar­ma­ze­na­mento su­fi­ci­ente e já deve ter criado um cluster do Ku­ber­ne­tes. Pode criá-lo no seu com­pu­ta­dor ou utilizar um serviço de ar­ma­ze­na­mento na nuvem, de­pen­dendo dos recursos de que necessita ou que tem dis­po­ní­veis. Também deve ter con­fi­gu­rado o gestor de pacotes Helm para o Ku­ber­ne­tes. Se já cumpriu estes re­qui­si­tos, pode começar com os passos in­di­vi­du­ais.

Instalar o Nextcloud no Ku­ber­ne­tes: os passos mais im­por­tan­tes

Agora que as bases ne­ces­sá­rias estão es­ta­be­le­ci­das, pode começar a con­fi­gu­rar a in­te­gra­ção entre o Nextcloud e o Ku­ber­ne­tes. Resumimos os passos mais im­por­tan­tes a seguir para que possa fazê-lo sem problemas.

Con­fi­gu­rar o DNS

O primeiro passo é criar um registo A para um sub­do­mí­nio que possa ser di­re­ci­o­nado para o endereço IP pre­ten­dido. Se estiver a utilizar uma solução local, o seu endereço IP público será o destino correto; caso contrário, indique o endereço IP do seu serviço na nuvem. Os passos ne­ces­sá­rios para o fazer podem variar li­gei­ra­mente, de­pen­dendo do for­ne­ce­dor de DNS que estiver a utilizar.

Adicionar e atualizar o Helm

Para preparar os recursos para o Ku­ber­ne­tes, utiliza-se o gestor de pacotes men­ci­o­nado an­te­ri­or­mente: o Helm. Cer­ti­fi­que-se de que o tem instalado no seu dis­po­si­tivo e de que está ligado ao seu cluster do Ku­ber­ne­tes. Se tudo estiver con­fi­gu­rado, adicione o re­po­si­tó­rio do Helm e atualize-o com os dois comandos seguintes:

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

Criar o ficheiro values.yaml

Crie agora um novo Helm chart uti­li­zando o seguinte comando:

nano values.yaml
shell

Em seguida, adicione as seguintes es­pe­ci­fi­ca­ções a este ficheiro.

Con­fi­gu­rar as tarefas cron

Em primeiro lugar, defina um limite de tempo para as tarefas Cron. Em sistemas ope­ra­ti­vos se­me­lhan­tes ao Unix, estas são tarefas que são exe­cu­ta­das au­to­ma­ti­ca­mente em segundo plano e repetidas. No caso do Nextcloud no Ku­ber­ne­tes, trata-se prin­ci­pal­mente de tarefas de ma­nu­ten­ção. No exemplo, indica-se que sejam exe­cu­ta­das a cada cinco minutos. No entanto, es­pe­ci­al­mente com conjuntos de dados maiores, pode ser re­co­men­dá­vel realizar a ma­nu­ten­ção com maior frequên­cia. Este é o código cor­res­pon­dente:

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

Desativar o HPA

Agora desative o HPA (Ho­ri­zon­tal Pod Au­tos­ca­ler). Este au­tos­ca­ler ajusta au­to­ma­ti­ca­mente o número de pods. Se estiver a utilizar o Re­ad­Wri­te­Once para o Nextcloud e quiser controlar a es­ca­la­bi­li­dade, deve desativar o HPA e con­cen­trar-se num único pod. Esta é uma solução muito mais prática se apenas alguns uti­li­za­do­res pre­ten­de­rem aceder aos dados. O código é escrito da seguinte forma:

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

So­bres­cre­ver a legenda da imagem

Para garantir que a versão atual do Helm seja con­si­de­rada, substitua a etiqueta da imagem uti­li­zando este código:

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

Agora, selecione a versão 28.0.2 ou uma versão mais recente.

Escolher uma base de dados

Ao escolher a sua base de dados, tem três opções: MariaDB, Post­greSQL ou SQLite. Para este exemplo, optou-se pelo MariaDB. Configure esta base de dados da forma descrita a seguir e desative os outros dois 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

Mo­ni­to­ri­za­ção de métricas

Se quiser mo­ni­to­ri­zar com o Pro­metheus ou o Grafana, pode adicionar o seguinte código, se desejar:

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

Permitir ficheiros de con­fi­gu­ra­ção per­so­na­li­za­dos

Por pre­de­fi­ni­ção, o Nextcloud no Ku­ber­ne­tes utiliza um ficheiro chamado config.php para a con­fi­gu­ra­ção. Se pretender sim­pli­fi­car ou tornar esta con­fi­gu­ra­ção mais flexível, pode utilizar os seus próprios ficheiros de con­fi­gu­ra­ção. Aqui está o código ne­ces­sá­rio para o fazer:

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 isso, basta subs­ti­tuir o espaço reservado «example.com» pelo teu próprio domínio.

Con­fi­gu­rar o Redis

O seguinte ficheiro de con­fi­gu­ra­ção per­so­na­li­zado será im­ple­men­tado para melhorar o ar­ma­ze­na­mento em cache uti­li­zando o Redis. O Helm instala o Redis por pre­de­fi­ni­ção sem proteção por palavra-passe, pelo que é re­co­men­dá­vel adicionar uma camada adicional de segurança para evitar problemas futuros ao iniciar sessão. Para tal, pode utilizar o seguinte código:

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

Con­fi­gu­rar o backend de ar­ma­ze­na­mento

O último ficheiro de con­fi­gu­ra­ção é adi­ci­o­nado para o backend de ar­ma­ze­na­mento S3. Segue-se a forma como é integrado no 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

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

Como an­te­ri­or­mente alteraste a con­fi­gu­ra­ção padrão do Redis, agora deves desativá-la para evitar erros. O código adequado para isso é o seguinte:

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 o host, o ad­mi­nis­tra­dor e a palavra-passe

Agora, defina o host, o ad­mi­nis­tra­dor e a palavra-passe cor­res­pon­den­tes para utilizar o Nextcloud no Ku­ber­ne­tes. Para tal, introduza este código:

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

Basta subs­ti­tuir os mar­ca­do­res de posição pelos teus dados.

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

Tem a opção de con­fi­gu­rar um serviço SMTP (Protocolo Simples de Trans­fe­rên­cia de Correio) para receber no­ti­fi­ca­ções do Nextcloud. Se quiser ativá-lo, utilize o seguinte 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

Con­fi­gu­ra­ção do disco per­sis­tente

A seguinte con­fi­gu­ra­ção de per­sis­tên­cia destina-se aos dados que o Nextcloud armazena no disco cor­res­pon­dente. Isto não inclui os seus dados de uti­li­za­dor, que serão guardados no S3, tal como previsto.

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

Proteção por palavra-passe para o Redis

É re­co­men­dá­vel proteger o Redis com uma palavra-passe, o que também ajuda a evitar erros de au­ten­ti­ca­ção. Para tal, siga o código abaixo e cer­ti­fi­que-se de subs­ti­tuir «your-password-for-redis» pela sua palavra-passe pessoal:

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

Limitar as respostas

Como já desativou o HPA, deve limitar o número de réplicas a 1. Esta é a instrução que deve aplicar:

replicaCount: 1
shell

Instalar o Nextcloud no Ku­ber­ne­tes

Por fim, instale o Nextcloud no Ku­ber­ne­tes e adicione o MariaDB e o Redis. Utilize este comando:

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