# Nextcloud no Kubernetes: descubra como instalá-lo

Se pretender configurar o Nextcloud no Kubernetes, é recomendável utilizar o S3 como backend de armazenamento e o MariaDB como base de dados. Pode melhorar o desempenho com algumas alterações na configuração.

## Vale a pena combinar o Nextcloud com o Kubernetes

Combinar [o Nextcloud](https://www.ionos.com/pt-pt/digitalguide/servidores/ferramentas/o-que-e-o-nextcloud/) e o Kubernetes com o S3 como backend de armazenamento é, em muitos casos, uma solução promissora para o setor privado e empresarial. O **software de nuvem não comercial** é adequado tanto para trabalhar com servidores locais como com hosts externos e destaca-se em comparação com inúmeras alternativas ao Nextcloud devido à sua excelente arquitetura de segurança. O Kubernetes é um sistema de gestão de aplicações em contentores de código aberto e pode ser utilizado tanto localmente como para computação em nuvem. Este sistema é considerado extremamente flexível, altamente escalável e muito fiável. Mostramos-lhe como configurar o Nextcloud no Kubernetes.

Dica Queres utilizar o Nextcloud com o Docker? Nesse caso, dá uma vista de olhos no artigo do nosso guia. Nele, também abordamos a [instalação do Nextcloud no Ubuntu 22.04](https://www.ionos.com/pt-pt/digitalguide/servidores/configuracao/nextcloud-ubuntu-2204/).

## Quais são os requisitos a cumprir?

Antes de começar a configurar o Nextcloud no Kubernetes, é necessário cumprir alguns pré-requisitos. Vai precisar de espaço de armazenamento suficiente e já deve ter criado um cluster do Kubernetes. Pode criá-lo no seu computador ou utilizar um serviço de armazenamento na nuvem, dependendo dos recursos de que necessita ou que tem disponíveis. Também deve ter configurado o **gestor de pacotes Helm** para o Kubernetes. Se já cumpriu estes requisitos, pode começar com os passos individuais.

## Instalar o Nextcloud no Kubernetes: os passos mais importantes

Agora que as bases necessárias estão estabelecidas, pode começar a configurar a integração entre o Nextcloud e o Kubernetes. Resumimos os passos mais importantes a seguir para que possa fazê-lo sem problemas.

### Configurar o DNS

O primeiro passo é criar um registo A para um subdomínio que possa ser direcionado para o endereço IP pretendido. 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 necessários para o fazer podem variar ligeiramente, dependendo do fornecedor de DNS que estiver a utilizar.

### Adicionar e atualizar o Helm

Para preparar os recursos para o Kubernetes, utiliza-se o gestor de pacotes mencionado anteriormente: o Helm. Certifique-se de que o tem instalado no seu dispositivo e de que está ligado ao seu cluster do Kubernetes. Se tudo estiver configurado, adicione o repositório do Helm e atualize-o com os dois comandos seguintes:

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

### Criar o ficheiro values.yaml

Crie agora um novo Helm chart utilizando o seguinte comando:

```shell
nano values.yaml
```

Em seguida, adicione as seguintes especificações a este ficheiro.

### Configurar as tarefas cron

Em primeiro lugar, defina um **limite de tempo para as tarefas Cron**. Em sistemas operativos semelhantes ao Unix, estas são tarefas que são executadas automaticamente em segundo plano e repetidas. No caso do Nextcloud no Kubernetes, trata-se principalmente de tarefas de manutenção. No exemplo, indica-se que sejam executadas a cada cinco minutos. No entanto, especialmente com conjuntos de dados maiores, pode ser recomendável realizar a manutenção com maior frequência. Este é o código correspondente:

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

### Desativar o HPA

Agora desative o HPA (Horizontal Pod Autoscaler). Este autoscaler ajusta automaticamente o número de pods. Se estiver a utilizar o ReadWriteOnce para o Nextcloud e quiser controlar a escalabilidade, deve desativar o HPA e concentrar-se num único pod. Esta é uma solução muito mais prática se apenas alguns utilizadores pretenderem aceder aos dados. O código é escrito da seguinte forma:

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

### Sobrescrever a legenda da imagem

Para garantir que a versão atual do Helm seja considerada, substitua a etiqueta da imagem utilizando este código:

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

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, PostgreSQL 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.

```shell
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
```

### Monitorização de métricas

Se quiser monitorizar com o Prometheus ou o Grafana, pode adicionar o seguinte código, se desejar:

```shell
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
```

### Permitir ficheiros de configuração personalizados

Por predefinição, o Nextcloud no Kubernetes utiliza um ficheiro chamado config.php para a configuração. Se pretender simplificar ou tornar esta configuração mais flexível, pode utilizar os seus próprios ficheiros de configuração. Aqui está o código necessário para o fazer:

```shell
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'
                     ]
            );
```

Para isso, basta substituir o espaço reservado «example.com» pelo teu próprio domínio.

### Configurar o Redis

O seguinte ficheiro de configuração personalizado será implementado para melhorar o armazenamento em cache utilizando o Redis. O Helm instala o Redis por predefinição sem proteção por palavra-passe, pelo que é recomendável adicionar uma camada adicional de segurança para evitar problemas futuros ao iniciar sessão. Para tal, pode utilizar o seguinte código:

```shell
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')
      )
    );
```

### Configurar o backend de armazenamento

O último ficheiro de configuração é adicionado para o backend de armazenamento S3. Segue-se a forma como é integrado no código:

```shell
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
        )
      )
    );
```

### Desativar a configuração do Redis

Como anteriormente alteraste a configuração padrão do Redis, agora deves desativá-la para evitar erros. O código adequado para isso é o seguinte:

```shell
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
```

### Definir o host, o administrador e a palavra-passe

Agora, defina o host, o administrador e a palavra-passe correspondentes para utilizar o Nextcloud no Kubernetes. Para tal, introduza este código:

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

Basta substituir os marcadores de posição pelos teus dados.

### Configurar notificações por e-mail

Tem a opção de configurar um serviço SMTP (Protocolo Simples de Transferência de Correio) para receber notificações do Nextcloud. Se quiser ativá-lo, utilize o seguinte código:

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

### Configuração do disco persistente

A seguinte configuração de persistência destina-se aos dados que o Nextcloud armazena no disco correspondente. Isto não inclui os seus dados de utilizador, que serão guardados no S3, tal como previsto.

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

### Proteção por palavra-passe para o Redis

É recomendável proteger o Redis com uma palavra-passe, o que também ajuda a evitar erros de autenticação. Para tal, siga o código abaixo e certifique-se de substituir «your-password-for-redis» pela sua palavra-passe pessoal:

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

### 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:

```shell
replicaCount: 1
```

### Instalar o Nextcloud no Kubernetes

Por fim, instale o Nextcloud no Kubernetes e adicione o MariaDB e o Redis. Utilize este comando:

```shell
kubectl create ns nextcloud
helm upgrade --install --namespace nextcloud -f your-values.yaml nextcloud nextcloud/nextcloud
```


This is a markdown version of: [https://www.ionos.com/pt-pt/digitalguide/servidores/configuracao/nextcloud-kubernetes/](https://www.ionos.com/pt-pt/digitalguide/servidores/configuracao/nextcloud-kubernetes/) for AI/LLM consumption.