Nextcloud, Redis e Cloudflare Tunnel na VPS de 1GB

Este guia tem o objetivo de facilitar a instalação do Nextcloud em uma VPS com recursos limitados. Além disso, será configurado o cache Redis, e aproveitaremos o serviço de túnel gratuito fornecido pela Cloudflare.

Pré-Requisitos:

  1. Docker e o Docker Compose instalados no sistema.
  2. Possuir um domínio configurado na Cloudflare.
  3. Ter acesso a uma VPS (Servidor Virtual Privado).
  4. Ter o Portainer instalado para facilitar o gerenciamento de contêineres.

Conteúdo:

Preparando a VPS

Se a sua VPS oferece a opção de uma instalação mínima de recursos, escolha essa imagem ao criar a instância.

Caso essa opção não esteja disponível, será necessário desabilitar serviços que podem estar consumindo memória de maneira desnecessária, uma vez que, essencialmente, precisaremos apenas do Docker.

O comando abaixo pode ser útil para identificar quais processos estão consumindo mais memória. Ele listará os 10 processos com maior uso:

ps -ax --no-headers --format=pid,rss,command --sort=-rss,pid | head -10

No caso de um formato mais fácil de entender já em MB, utilize o comando abaixo:

ps -ax --no-headers --format=pid,rss,command --sort=-rss,pid | head -20 | awk 'BEGIN{suffixes_len=split("kB MB GB TB",suffixes)} {n_suffix=1; while($2 > 1000 && n_suffix < suffixes_len) {$2 /= 1024; n_suffix++;}; printf "%5s %7.2f %2s %s\n",$1,$2,suffixes[n_suffix],substr($0, index($0,$3))}'

Remova os serviços que achar desnecessários para liberar um pouco mais de memória.

Instalação Tunnel Cloudflare

Inscreva-se no Cloudflare

Se você ainda não tiver uma conta no Cloudflare, inscreva-se em https://www.cloudflare.com/

  • Faça login na sua conta Cloudflare e clique no link Zero Trust
  • Clique em Access → Tunnels → Create a Tunnel
  • Digite um nome descritivo para o túnel que você está criando
  • Selecione Save tunnel
  • Em seguida, você precisará instalar o cloudflared e executá-lo
  • Na opçao Choose an environment escolhar docker, copie o comando na caixa abaixo e cole-o em uma janela de terminal
  • Execute o comando
  • Uma vez que o comando tenha terminado de executar, seu conector aparecerá no Zero Trust
  • Selecione Next

Deixe esta janela do Cloudflare aberta para prosseguir com a configuração após a instalação do Nextcloud.

Você pode interromper o contêiner pressionando “Ctrl+C” no terminal. O contêiner será interrompido, mas você pode ir até o Portainer, acessar a seção “Containers” e localizar um contêiner com o nome de imagem “cloudflare”. Clique nele e vá para baixo até encontrar o campo “RESTART POLICIES”. Escolha a opção “Unless Stopped” e, em seguida, clique no botão “Update”. Depois disso, clique no botão “Start” para iniciar o contêiner novamente.

Instalação do Nextcloud

Instale o Docker caso ainda não o tenha instalado. Você pode seguir este guia: Instalar Docker

Se você ainda não instalou o Portainer, você pode seguir este guia: Instalar Portainer

Usaremos um arquivo de configuracao adicional para economizar recursos do banco de dados mariadb. Esse arquivo vai ser chamado my.cnf e nesse exemplo vai ficar dentro da pasta /dockerapp/mariadb/

Execute os comando abaixo para criar os diretório e o arquivo

cd /
sudo mkdir dockerapp
cd docker app
sudo mkdir mariadb
cd mariadb
sudo nano my.cnf

Copie o conteúdo do arquivo de configuração (my.cnf) abaixo e cole-o no interior do arquivo.

[mysqld]
innodb_io_capacity = 150
innodb_read_io_threads = 4
innodb_write_io_threads = 2
max_connections = 20
max_allowed_packet = 64M
query_cache_type = 0
query_cache_limit = 2M
query_cache_min_res_unit = 2K
query_cache_size = 0
thread_cache_size = 0
host_cache_size = 0
tmp_table_size = 1K
key_buffer_size = 8
innodb_buffer_pool_size = 7M
innodb_log_file_size = 50331648
innodb_flush_log_at_trx_commit = 2
join_buffer_size = 128
sort_buffer_size = 64K
read_rnd_buffer_size = 8200
table_open_cache = 1500
wait_timeout = 10000
max_connect_errors = 1000000
innodb_flush_method = O_DIRECT
innodb_log_buffer_size = 256k
innodb_ft_cache_size = 600000
innodb_ft_total_cache_size = 32000000
max_heap_table_size = 16K

Salve o arquivo pressionando Ctrl + O, pressione Enter para confirmar, e em seguida, saia do editor com Ctrl + X.

Acesse o Portainer

Abra o navegador e acesse o painel do Portainer. Geralmente, isso é feito acessando o endereço http://localhost:9000 (ou o endereço correspondente ao seu ambiente).

Faça login no Portainer com suas credenciais.

No menu à esquerda, clique em “Stacks”.

Clique no botão “Add a stack” para criar uma nova stack.

Dê um nome à sua stack. Neste exemplo, nomeie sua stack como “nextcloud”. Dessa forma, ela se conectará automaticamente ao Redis.

Cole o Conteúdo que segue abaixo:

version: '3'

services:
   db:
    image: mariadb
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    restart: always
    volumes:
      - db:/var/lib/mysql
      - /dockerapp/mariadb/my.cnf:/etc/mysql/my.cnf
    environment:
      - MYSQL_ROOT_PASSWORD=sua_senha_root
      - MYSQL_PASSWORD=sua_senha
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
   
   redis:
    image: redis:alpine
    command: redis-server --requirepass sua_senha_redis --appendonly yes
    restart: always
    deploy:
      resources:
        limits:
          cpus: '0.30'
          memory: 222M
   
   app:
    image: nextcloud
    restart: always
    volumes:
      - /dockerapp/nextcloud:/var/www/html
      - /dockerapp/nextcloud/custom_apps:/var/www/html/custom_apps
      - /dockerapp/nextcloud/config:/var/www/html/config
      - /dockerapp/nextcloud/data:/var/www/html/data
    environment:
      - TZ=America/Sao_Paulo
      - MYSQL_HOST=db
      - MYSQL_PASSWORD=sua_senha
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - REDIS_HOST=nextcloud-redis-1
      - REDIS_HOST_PASSWORD=sua_senha_redis
      - PHP_UPLOAD_LIMIT=16G
      - PHP_MEMORY_LIMIT=512M
      - OVERWRITEPROTOCOL=https

    depends_on:
      - db
      - redis
    ports:
      - 8080:80

volumes:
  db:
  nextcloud:

Você precisará alterar onde está escrito “sua_senha”, “sua_senha_redis” e “sua_senha_root” para uma outra que desejar. Se achar mais fácil, pode usar uma senha igual para todos.

Caso não deseje utilizar o túnel da Cloudflare e não tenha um certificado SSL, remova a variável “OVERWRITEPROTOCOL=https”.

Evite usar a tecla “Tab” para dar espaços quando estiver editando o arquivo.

Se apresentar erros de sintaxe, utilize uma ferramenta online para descobrir onde está o problema. Digite no seu buscador por “YAML Validator” e escolha algum de sua preferência.

Com tudo configurado, clique no botão “DEPLOY THE STACK”.

Aguarde a conclusão da instalação.

Agora, no Portainer, vá até “Containers” e clique no container “nextcloud-app-1”. Desça até “Connected Networks”, em “Join a network”, escolha “Bridge” e clique em “Join Network”.

Em seguida, volte ao menu “Containers” e verifique o endereço IP atribuído ao container “nextcloud-app-1”. Copie esse endereço IP.

No painel do Cloudflare, escolha o domínio que pretende usar. Em seguida, adicione esse endereço IP precedido da porta 80, por exemplo, 172.0.0.0:80. Escolha o protocolo HTTP e clique em “Save”.

Acesse o Nextcloud usando o domínio que você configurou, por exemplo, cloud.meudominio.com.br

Primeiro Acesso

Crie um usuário para o Nextcloud, digitando um nome de usuário e uma senha nos campos correspondentes.

Clique no botão “Concluir instalação” para finalizar o processo de instalação. Aguarde alguns segundos até que o Nextcloud seja configurado e iniciado.

Faça login com o usuário que você acabou de criar. Você será redirecionado para a tela inicial do Nextcloud, onde você pode ver os seus arquivos, atividades, conversas, contatos, calendário e muito mais.

Parabens a instalação do Nextcloud esta concluida.

Solução de Problemas

Depois de Configurado Nextcloud nao abre

Verifique se o container que contém o Nextcloud, normalmente chamado de nextcloud-app-1, está na rede bridge para poder se comunicar com o container da Cloudflare.

Verifique se o endereço IP na configuração do hostname na Cloudflare está correto; o IP a ser adicionado lá é do container nextcloud-app-1.

Confirme se a porta está configurada corretamente; neste caso, é a porta 80.

Verifique outros possíveis erros clicando no container da Cloudflare usando o Portainer e acessando a aba de logs.

Redis não conecta

Verifique no Dockerfile as variáveis:

REDIS_HOST

Para facilitar, estou usando o nome do container, que neste caso é “nextcloud-app-1”. Se o nome do seu container for diferente, altere na stack e, em seguida, clique em “Update”.

REDIS_HOST_PASSWORD

Confira se a senha que você escolheu em “sua_senha_redis” está correta.

Erro de leitura / escrita no arquivo config.php

Tente abrir o Nextcloud pela primeira vez diretamente pelo link do seu domínio usando o Cloudflare. Acessar primeiro por um IP via HTTP pode gerar vários erros de certificado durante a migração. Certifique-se de usar o link do domínio configurado no Cloudflare para evitar problemas relacionados ao certificado.

Minha VPS ainda esta com falta de memoria

Este Dockerfile utiliza a última imagem do Nextcloud que usa o Apache como servidor web. Você pode editar o arquivo /etc/apache2/apache2.conf

Dentro do portainer siga esses passo para editar esse arquivo:
  • No painel lateral esquerdo, clique em “Containers” para ver a lista de contêineres existentes.
  • Encontre o contêiner que está executando a última imagem do Nextcloud Docker e clique no seu nome. Por exemplo, o contêiner pode se chamar “nextcloud-app-1”.
  • Na tela de detalhes do contêiner, clique na aba “Console”
  • Selecione o tipo de console que você deseja usar para acessar o contêiner. Por exemplo, você pode usar “sh” ou “bash”.
  • Clique no botão “Connect” para abrir o console do contêiner.
  • No console, navegue até o diretório onde está o arquivo de configuração do Apache. O caminho padrão é /etc/apache2/apache2.conf

Edite o arquivo

digite os comandos abaixo para instalar um editor

apt update
apt install nano

e então

nano /etc/apache2/apache2.conf

Adicione estas linhas dentro do arquivo para limitar a criação de processos filhos no MPM Prefork do Apache.

<IfModule mpm_prefork_module>
    StartServers              1
    MinSpareServers           3
    MaxSpareServers             5
    MaxRequestWorkers        100
    MaxConnectionsPerChild 3000
</IfModule>

Problemas de sincronia em arquivos grandes

O cliente para PC pode apresentar um problema ao sincronizar arquivos grandes, exibindo o erro ‘conexão encerrada’. Caso você enfrente esse problema, siga estes procedimentos:

Windows

Pressione Win+R no seu teclado para abrir o Executar. Cole o seguinte na caixa de diálogo:

%APPDATA%\Nextcloud\nextcloud.cfg

Isso irá pedir para você escolher um aplicativo para abrir o nextcloud.cfg ou irá abrir no seu editor de texto padrão (a menos que você tenha algo diferente configurado para abrir arquivos .cfg). Se ele pedir para você escolher um aplicativo, sinta-se à vontade para usar o Bloco de notas ou qualquer outro editor.

Adicione a seguinte linha em [General]:

maxChunkSize=77000000

Salve o arquivo, saia do Nextcloud desktop e inicie-o novamente.

Linux

Abra uma janela de terminal e edite o seguinte arquivo:

nano $HOME/.config/Nextcloud/nextcloud.cfg

Adicione a seguinte linha sob a seção [General]:

maxChunkSize=77000000

Salve o arquivo (Ctl+o, Ctl+x), depois saia do Nextcloud desktop e inicie-o novamente.

Erro de segurança The “Strict-Transport-Security” HTTP header is not configured with a value of at least “15552000” seconds.

Esse erro pode ser resolvido da seguinte forma:

Logue no site da cloudflare

  • No painel lateral esquerdo, clique em “SSL/TLS” para ver as opções de segurança do seu site.
  • Na tela de SSL/TLS, clique na aba “Edge Certificates” no menu superior.
  • Na seção “HTTP Strict Transport Security (HSTS)”, clique no botão “Enable HSTS”.
  • Leia o aviso que aparece na tela e selecione “I understand”.
  • Clique no botão “Next”.
  • Configure as opções do HSTS de acordo com as suas preferências.

Tela azul da morte sem login

O Nextcloud pode apresentar uma tela azul e não exibir a tela de login se você estiver usando o Cloudflare. Isso pode estar relacionado ao Rocket Loader, uma ferramenta da Cloudflare que acelera o carregamento do site, mas pode interferir no Nextcloud. Desabilite-o ou crie uma regra de exceção para evitar esse problema.

Conclusão

A instalação do Nextcloud em ambientes com pouca memória pode ser desafiadora, já que, por padrão, ele consome considerável quantidade de recursos do sistema. Essa instalação, voltada para ambientes com recursos limitados, destina-se a situações específicas onde a escassez de recursos é uma realidade, e a performance pode ser considerada razoável. No entanto, é importante ressaltar que essa configuração não é adequada para ambientes que planejam suportar vários usuários ou receber visitas frequentes.

Deixe um comentário