Como instalar o NextCloud com OpenLiteSpeed (stack LOMP)

Este é o guia de como você pode montar um Nextcloud muito rápido usando o OpenLiteSpeed.

Introdução

Hoje vou mostrar como montar o que eu sinceramente acredito ser a stack de NextCloud mais rápida disponível em 2025:

  • OpenLiteSpeed – o servidor web mais rápido, com cache embutido
  • LSPHP 8.1/8.2 – a implementação ultrarrápida de PHP da LiteSpeed
  • Redis + APCu – para cache e travamento (locking) ultrarrápidos
  • Roda totalmente sem root, com o seu próprio usuário
  • Protegido com cabeçalhos de segurança adequados, HSTS e pasta de dados isolada

Mesmo que o NextCloud seja comprometido, o invasor ainda não consegue mexer no resto do seu servidor.

Vamos lá!

Passo 1: Proteja sua VPS primeiro

Antes de tudo, proteja o seu servidor. Siga o meu guia completo aqui: Como deixar sua VPS segura

Passo 2: Instale o OpenLiteSpeed, o LSPHP, o Redis e as ferramentas

Rode como root:

# Update system
apt update && apt upgrade -y

# Add OpenLiteSpeed repository
wget -O - https://repo.litespeed.sh | bash

# Install essentials
apt install -y curl gnupg2 imagemagick ffmpeg redis openlitespeed lsphp81* lsphp82* zip unzip mariadb-server mariadb-client

Observação: no Ubuntu 22.04+, o pacote do ImageMagick pode ser libmagickwand-dev + imagemagick. O comando acima funciona na maioria das versões recentes do Debian/Ubuntu.

Ative e reinicie o Redis:

systemctl enable --now redis-server

Passo 3: Crie um usuário de sistema dedicado para o NextCloud

adduser --shell /bin/bash files
usermod -aG redis files   # Allow access to Redis socket

Passo 4: Baixe e extraia o NextCloud como o usuário “files”

su - files
mkdir -p ~/public_html
cd ~/public_html

wget https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip
rsync -av nextcloud/ ./
rm -rf nextcloud latest.zip .htaccess .user.ini
exit

Passo 5: Configure o painel web de administração do OpenLiteSpeed (porta 7080)

Defina uma senha de administrador:

/usr/local/lsws/admin/misc/admpass.sh

Agora acesse: https://your-vps-ip:7080 e entre.

Configuração do Virtual Host

  1. Apague o virtual host padrão “Example”
  2. Adicione um novo Virtual Host:
  • Virtual Host Name: yourdomain.com
  • Virtual Host Root: /home/files/
  • Config File: $SERVER_ROOT/conf/vhosts/$VH_NAME/vhconf.conf
  • Document Root: $VH_ROOT/public_html
  1. Script Handler → Add:
  • Suffix: php
  • Handler Type: LiteSpeed LVE
  • Handler: lsphp81 (ou lsphp82, se preferir o PHP 8.2)
  1. Rewrite Rules (forçar HTTPS):
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
  1. Cabeçalhos de segurança (Context → Static → adicione um novo context /):
Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Content-Security-Policy "upgrade-insecure-requests"
  1. External App → LSPHP → Edit:
  • Run as User/Group: files
  • PHP_LSAPI_CHILDREN = 100
  • LSAPI_AVOID_FORK = 0
  1. Listeners:
  • Apague os listeners padrão
  • Adicione HTTP → porta 80
  • Adicione HTTPS → porta 443 (Secure = Yes)
  • Associe o seu domínio aos dois listeners

Reinício suave (graceful restart) → OpenLiteSpeed → Graceful Restart

Passo 6: Emita o SSL do Let’s Encrypt

apt install -y certbot
certbot certonly --webroot -w /home/files/public_html -d yourdomain.com

Anote os caminhos (você vai precisar deles):

  • Fullchain: /etc/letsencrypt/live/yourdomain.com/fullchain.pem
  • Privkey: /etc/letsencrypt/live/yourdomain.com/privkey.pem

Adicione-os em:

  • Virtual Host → aba SSL
  • Listener HTTPS → aba SSL
  • Chained Certificate = Yes

Faça o graceful restart de novo.

Passo 7: Renovação automática do SSL

crontab -e

Adicione:

cron0 3 * * * /usr/bin/certbot renew --quiet

Passo 8: Instale e proteja o MariaDB/MySQL

mysql_secure_installation

Depois, crie o banco de dados e o usuário:

mysql -u root -p
CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'ncuser'@'localhost' IDENTIFIED BY 'strong-password-here';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'ncuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Passo 9: Otimize o PHP e ative o OPCache + APCu

# Edit the correct php.ini (adjust path if using lsphp82)
sed -i '/usr/local/lsws/lsphp81/etc/php/8.1/litespeed/php.ini' \
  -e 's/memory_limit = .*/memory_limit = 1024M/' \
  -e 's/upload_max_filesize = .*/upload_max_filesize = 10G/' \
  -e 's/post_max_size = .*/post_max_size = 10G/' \
  -e 's/max_execution_time = .*/max_execution_time = 3600/' \
  -e 's/opcache.enable=.*/opcache.enable=1/' \
  -e 's/;opcache.memory_consumption=.*/opcache.memory_consumption=512/' \
  -e 's/;opcache.interned_strings_buffer=.*/opcache.interned_strings_buffer=64/' \
  -e 's/;opcache.max_accelerated_files=.*/opcache.max_accelerated_files=20000/'

# Enable APCu CLI
echo "apc.enable_cli = 1" >> /usr/local/lsws/lsphp81/etc/php/8.1/litespeed/php.ini

pkill -f lsphp
systemctl restart lsws

Passo 10: Configure o Redis como socket Unix

sed -i 's/port 6379/port 0/' /etc/redis/redis.conf
sed -i 's|# unixsocket /var/run/redis/redis-server.sock|unixsocket /var/run/redis/redis-server.sock|' /etc/redis/redis.conf
sed -i 's/# unixsocketperm 700/unixsocketperm 770/' /etc/redis/redis.conf
sed -i 's/# maxmemory .*/maxmemory 1gb/' /etc/redis/redis.conf

systemctl restart redis-server

Passo 11: Configuração final do NextCloud

Mova a pasta de dados para fora da raiz web (essencial!)

Durante a instalação, defina o diretório de dados como: /home/files/data

Edite o config.php (depois do primeiro login)

su - files
nano /home/files/public_html/config/config.php

Adicione logo depois de ‘installed’ => true,:

'memcache.local' => '\\OC\\Memcache\\APCu',
  'memcache.distributed' => '\\OC\\Memcache\\Redis',
  'memcache.locking' => '\\OC\\Memcache\\Redis',
  'redis' => [
     'host' => '/var/run/redis/redis-server.sock',
     'port' => 0,
  ],

Configure as tarefas em segundo plano (cron)

su - files
crontab -e

Adicione:

cron*/5 * * * * /usr/local/lsws/lsphp81/bin/php -f /home/files/public_html/cron.php

Depois, no NextCloud, vá em Administração → Configurações básicas → Tarefas em segundo plano → selecione Cron (recomendado).

Bônus: deixe o occ fácil de usar para sempre

su - files
echo "alias occ='/usr/local/lsws/lsphp81/bin/php /home/files/public_html/occ'" >> ~/.bashrc
source ~/.bashrc

Agora, de qualquer lugar dentro de ~/public_html:

cd ~/public_html
occ status
occ maintenance:repair
occ db:add-missing-indices

Pronto!

Agora você tem:

  • A stack de NextCloud mais rápida (OpenLiteSpeed + Redis + APCu)
  • Totalmente sem root e isolada
  • Renovação automática do SSL
  • Cabeçalhos de segurança reforçados
  • Proteção adequada da pasta de dados

Aproveite a sua nuvem privada e ultrarrápida!

Obrigado pela leitura! 🚀

Criado com Hugo
Tema Stack desenvolvido por Jimmy