# Como instalar o Nextcloud no Kubernetes

Para instalar o Nextcloud no Kubernetes, recomendamos usar S3 para o back-end de armazenamento e MariaDB como solução de banco de dados. Com algumas alterações nas configurações, você consegue melhorar o desempenho.

## Nextcloud e Kubernetes: Combinação de sucesso

A combinação de [Nextcloud](https://www.ionos.com/digitalguide/server/tools/what-is-nextcloud/ "O que é Nextcloud") e [Kubernetes](https://www.ionos.com/pt-br/digitalguide/servidor/conhecimento/o-que-e-kubernetes/) com S3 para armazenamento é uma solução promissora tanto para uso privado quanto empresarial. O **software de nuvem não comercial** é adequado para trabalhar com servidores locais e hosts externos, ostentando uma excelente arquitetura de segurança quando comparado às diversas [alternativas ao Nextcloud](https://www.ionos.com/digitalguide/server/tools/nextcloud-alternatives/ "As melhores alternativas ao Nextcloud"). Kubernetes é um sistema de gerenciamento de código aberto para aplicações em contêineres e pode ser usado tanto na computação em nuvem quanto localmente. O sistema é considerado **flexível, altamente escalável e à prova de falhas**. Leia este artigo até o final para descobrir como instalar o Nextcloud no Kubernetes.

Dica Para [instalar o Nextcloud com o Docker](https://www.ionos.com/digitalguide/server/configuration/nextcloud-installation-with-docker/ "Como instalar Nextcloud com Docker"), consulte esse tutorial passo a passo do nosso Digital Guide. Também ensinamos você como [instalar o Nextcloud no Ubuntu 22.04](https://www.ionos.com/pt-br/digitalguide/servidor/configuracao/nextcloud-ubuntu-2204/).

## Pré-requisitos de sistema

Antes de iniciar a instalação do Nextcloud no Kubernetes, algumas condições devem ser atendidas. Você precisa ter espaço de armazenamento suficiente e criar um [cluster Kubernetes](https://www.ionos.com/digitalguide/server/know-how/kubernetes-cluster/ "Como criar clusters Kubernetes"). Isso pode ser feito em sua máquina local ou no armazenamento em nuvem, dependendo da capacidade disponível. Além disso, é preciso se assegurar de que o **gerenciador de pacotes Helm** esteja configurado para o Kubernetes. Quando tudo estiver pronto, você poderá prosseguir com o processo de instalação.

## Passo a passo: Instalar Nextcloud no Kubernetes

Depois de preparar a base necessária, comece o processo de instalação do Nextcloud no Kubernetes. Resumimos os principais passos nas seções a seguir.

### Configurar DNS

O primeiro passo é criar um [A-Record](https://www.ionos.com/digitalguide/hosting/technical-matters/a-record/ "A-Record") para um subdomí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 apresentar pequenas variações, dependendo do provedor de DNS.

### Adicionar e atualizar Helm

O Kubernetes é implementado usando o gerenciador de pacotes Helm, que precisa ser instalado no seu cliente. Além disso, certifique-se de ter uma conexão com o seu cluster Kubernetes. Em caso positivo, adicione o repositório do Helm e atualize-o com os seguintes comandos:

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

### Criar values.yaml

Crie um gráfico Helm com o seguinte comando:

```shell
nano values.yaml
```

Em seguida, adicione no arquivo as especificações descritas abaixo.

### Definir cronjobs

Primeiro, defina um **limite de tempo para cronjobs**. Em sistemas operacionais do tipo *Unix-like*, cronjobs são tarefas executadas automaticamente e em segundo plano durante intervalos definidos. No caso do Nextcloud no Kubernetes, essas são as tarefas de manutenção primárias. Neste exemplo, definimos o cronjob para rodar a cada cinco minutos. Para volumes de dados maiores, talvez seja aconselhável uma manutenção mais frequente. Use o seguinte código:

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

### Ativar HPA

Em seguida, desative o Horizontal Pod Autoscaler (HPA), que redimensiona automaticamente o número de pods. Se você usa ReadWriteOnce no Nextcloud e prefere controlar o redimensionamento manualmente, desative o HPA e foque em um pod. Essa abordagem é mais conveniente se poucos usuários precisarem de acesso à solução. O código correspondente é:

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

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

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

A versão 28.0.2 ou mais recente será selecionada.

### Selecionar banco de dados

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

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

### Monitorar métricas

Para realizar o monitoramento com Prometheus ou Grafana, insira o código a seguir. Este passo é opcional.

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

### Habilitar arquivos de configuração próprios

Por padrão, o Nextcloud também usa um arquivo chamado “config.php” para as configurações feitas no Kubernetes. Para simplificar ou deixar o processo mais flexível, insira os seus próprios arquivos de configuração usando o código a seguir:

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

Substitua o placeholder “exemplo.com” pelo seu próprio domínio.

### Configurar Redis

Para melhorar o armazenamento em cache com o Redis e aprimorar o desempenho geral, adicione um arquivo de configuração personalizado. Por padrão, o Helm Redis é instalado sem proteção com senha, mas é recomendável incluir essa camada extra de segurança. Use o código a seguir para configurar o Redis com senha e integre-o ao Nextcloud:

```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("sua-senha-do-redis")
      )
    );
```

### Configurar back-end de armazenamento

O último arquivo de configuração é inserido para o back-end de armazenamento S3. Ele é definido no código a seguir:

```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 configuração do Redis

Como você substituiu a configuração padrão do Redis na seção acima, ela deverá ser desativada para evitar erros. Para fazer isso, use este código:

```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 host, administrador e senha

Insira o host, o administrador e a senha para usar o Nextcloud no Kubernetes. Use este código:

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

Substitua os placeholders pelos seus próprios dados.

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

Opcionalmente, você pode configurar um serviço SMTP (Simple Mail Transfer Protocol) para receber notificações do Nextcloud:

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

### Configurar unidade de persistência

A configuração de persistência a seguir é destinada aos dados que o Nextcloud armazena no sistema correspondente. Ela não afeta os seus dados de usuário, que são armazenados no S3 em intervalos definidos:

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

### Proteger Redis com senha

É recomendável proteger o Redis com uma senha para impedir a ocorrência de erros durante a autenticação. Para isso, use o código a seguir, substituindo o placeholder pela sua senha:

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

### Limitar replicações

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

```shell
replicaCount: 1
```

### Instalar Nextcloud no Kubernetes

Para finalizar, instale o Nextcloud no Kubernetes e adicione o MariaDB e o Redis:

```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-br/digitalguide/servidor/configuracao/nextcloud-kubernetes/](https://www.ionos.com/pt-br/digitalguide/servidor/configuracao/nextcloud-kubernetes/) for AI/LLM consumption.