Criar um servidor Nextcloud (Debian 8)

Para quem não conhece, o Nextcloud é um fork do ownCloud. À parte das divergências (tal como existiram na separação do OpenOffice.org) este projecto está a evoluir fortemente. Na primeira fase foi retro-compatível com o ownCloud, mas neste momento, com o lançamento da versão 10, já diverge em algumas configurações. Parece que muitos dos bugs com WebDAV e CalDAV foram corrigidos e a implementação é mesmo diferente do seu antecessor.

Mais uma vez quero aprender as coisas como deve ser e decidi fazer tudo “à patinha”. A distribuição que uso é obviamente Debian.

Servidor/Maquina Virtual

Para a distribuição fui buscar as versões mais mini, as netinstall disponíveis aqui, usado a versão i386 compatível com a maquina.

Raspberry Pi

Para esta nova instalação usei o raspbian-ua-netinst que facilita bastante o trabalho de instalação. Basta descarregar e passar para o cartão SD com o Win32Disk Imager. Aconselho descarregar o ficheiro raspbian-ua-netinst-v1.x.x.img.bz2 e depois descompactar com o 7zip.

Quem já me segue já sabe que para este tipo de solução é desaconselhável a utilização do Rasp v1. Para escrever para o SD, usar o Win32Disk Imager. Não esquecer de usar uma partição/formatar o SD em FAT32.

Preparação do servidor

A preparação do servidor tem como base todas as minhas anteriores configurações em Debian e raspberry pi, mas como esta nuvem pretende ser um servidor mais empresarial, decidi usar um ambiente mais estável e robusto assente em PostreSQL.

Durante a instalação do debian 7/8 escolher no Software selection o mais simples possível, seleccionando apenas o SSH server e Web Server.

Configuração de rede

Visto que este irá ser um servidor empresarial convém o mais possível que o IP seja fixo (até porque vão precisar dele fixo mais tarde). Usei a ajuda da Debian para o fazer, disponível aqui.

Para definir o IP fixo, editar:

nano /etc/network/interfaces

E depois definir à eth0 os seguintes valores (substituir pelos vossos):
PS: No Ubuntu14.x e Debian 8 é provável que encontrem algum texto novo, colocar a configuração estática debaixo de: “source-directory /etc/network/interfaces.d”.

auto eth0
iface eth0 inet static
        address 10.0.0.25
        netmask 255.255.255.0
        gateway 10.0.0.1
        network 10.0.0.0
        broadcast 10.0.0.255

A seguir convém sempre reiniciar a placa de rede para ela poder assumir o IP atribuído:

ifdown eth0
ifup eth0

Em alguns casos será também boa ideia definir os servidores de resolução de nomes:

 nano /etc/resolv.conf

E adicionar os seguintes, OpenDNS e Google DNS, respectivamente alterado:

nameserver 208.67.222.222
nameserver 8.8.8.8
nameserver 208.67.220.220
nameserver 8.8.4.4

Preparar o servidor SSH

Por defeito o servidor SSH também não vem instalado. Para continuarem a configuração no conforto do “sofá” basta seguir a help do Debian e:

apt-get install openssh-server

E em principio já podem aceder remotamente a partir da vossa rede interna. No entanto, no Debian 8 o acesso SSH remoto está desactivado por defeito. Para o activar, aceder a

nano /etc/ssh/sshd_config

e depois alterar a linha “PermitRootLogin without-password” para:

PermitRootLogin yes

Instalar o Apache

De notar que na versão Debian Whezzy será instalada a versão 2.2.x e no Debian Jenny será instalada a versão 2.4.x.

apt-get install apache2

Instalar o PostgreSQL

Depois das configurações típicas na instalação, na qual escolhi também a opção de servidor de base de dados, o Debian instalou-me automaticamente o PostgreSQL.  Se não instalaram de início podem instalar com:

apt-get install postgresql postgresql-contrib

O utilizador e a base de dados criadas por defeito têm o nome postgres.  Para o definir-mos, mudar de utilizador com:

su - postgres

E aceder ao servidor postgres:

psql

A password do utilizador deve ser mudada através de:

\password postgres 
Enter new password: 
Enter it again:

Aproveitamos já para instalar o admin pack

CREATE EXTENSION adminpack;
\q

\q permite sair do servidor postgres.

Uma alteração que deverá ser feita é a activação da autenticação por MD5. PostgreSQL-MD5 Authentication:

#debian8
nano /etc/postgresql/9.4/main/pg_hba.conf

E encontrar as seguintes linhas e alterar de “peer” ou outro para “md5”.

local   all             postgres              md5
local   all             all                   md5

Por defeito todas as conexões TCP/IP estão desabilitadas. Para activar, aceder ao ficheiro:

#debian8
nano /etc/postgresql/9.4/main/postgresql.conf

E encontrar a linha #listen_addresses = ‘localhost’, descomentar e alterar para o IP fixo definido:

listen_addresses = '10.0.0.25'

NOTA: Por vezes não é necessário efectuar esta alteração. Se o owncloud, depois da introdução dos dados da base de dados, retornar um “Internal Server Error”, voltar a colocar em ‘localhost’.

E descomentar igualmente a linha:

password_encryption = on

Agora é só reiniciar o servidor (e ver se tudo corre bem):

service postgresql restart

Se quiserem saltar o passo seguinte, sem ter a necessidade de instalar o phpPgAdmin, podem criar o utilizador e a base de dados da seguinte forma, acedento ao pgsql:

psql -hlocalhost -Upostgres
CREATE USER username WITH PASSWORD 'password';
CREATE DATABASE nextcloud TEMPLATE template0 ENCODING 'UNICODE';
ALTER DATABASE nextcloud OWNER TO username;
GRANT ALL PRIVILEGES ON DATABASE nextcloud TO username;

Instalar o phpPgAdmin

Para preparar e administrar a base de dados, gosto sempre de ter à mão uma interface que me ajude a descortinar alguma coisa no meui de tanto preto e branco. Para isso costumo usar o phpMyAdmin para mySQL. No caso de PostgreSQL a solução é o phpPgAdmin.

apt-get install phppgadmin

Por defeito o phpPgAdmin não é acessível fora do sistema local (de fora da máquina). Para isso alterar o ficheiro:

#debian8
nano /etc/apache2/conf-enabled/phppgadmin.conf

E descomentar a linha que diz:

#debian8
Require local
Require all granted

E por fim, reiniciar o apache:

service apache2 restart

Agora é só aceder ao vosso ip por http:

http://10.0.0.25/phppgadmin

Se ao tentar entrar com o utilizador postgres:password o phpPgAdmin devolver o erro:

Login disallowed for security reasons.

Editar a configuração do phpPgAdmin para:

nano /usr/share/phppgadmin/conf/config.inc.php

E alterar as seguintes linhas:

$conf['servers'][0]['host'] = '';
$conf['extra_login_security'] = false;

Agora com certeza é possível fazer login no phpPgAdmin, podendo ser possível criar utilizadores e bases de dados, e dar as respectivas permissões. Convém que façam já um utilizador e uma base de dados para o ownCloud.

NOTA: O nome de utilizador segue as mesmas regras que os utilizadores *linux, portanto, nada de caracteres estranhos como hífens e afins.

Instalar o Nextcloud

Para instalar o Nextcloud basei-me nas minhas instalações anteriores do ownCloud, mas também obviamente na documentação oficial disponível aqui.

Em primeiro lugar instalar alguns pacotes que vamos precisar, primeiro os de PHP, e depois o SMB client (cliente samba para as partilhas).

apt-get install libapache2-mod-php5
apt-get install php5-gd php5-json php5-curl
apt-get install php5-intl php5-mcrypt php5-imagick
apt-get install smbclient
#caso não esteja instalado o unzip
apt-get install unzip

Depois é descarregar o último Nextcloud (ver o link em https://nextcloud.com/install/#instructions-server, na opção Download > Get Nextcloud Server > Download):

wget https://download.nextcloud.com/server/releases/nextcloud-10.0.1.zip

Descomprimir:

unzip nextcloud-10.0.1.zip

Mover para a pasta /var/www:

#debian7
mv -r nextcloud /var/www/
#debian8
mv -r nextcloud /var/www/html/

E dar as devidas permissões:

chown -R www-data:www-data /var/www/html/nextcloud/

 A seguir há que verificar se a pasta do Nextcloud já tem o ficheiro .htaccess (ls -al), senão, há que o criar:

#debian8
cd /var/www/html/nextcloud
ls -al
touch .htaccess
chown www-data:www-data .htaccess

Agora activar os dois seguintes módulos que irão ser necessários:

a2enmod rewrite
a2enmod headers
a2enmod env
a2enmod dir
a2enmod mime
a2enmod setenvif
a2enmod ssl
a2ensite default-ssl

Reiniciar o servidor apache:

service apache2 restart

Agora é só aceder por http, colocar as configurações (utilizador, base de dados, etc) que criaram no phpPgAdmin e criar o vosso utilizador de Administração.

http://10.0.0.25/nextcloud

Optimização

O Nextcloud, tal como o ownCloud pede algumas optimizações que deverão ser feitas, sob pena de impedir que alguns serviços extra, como as partilhas CIFS/SMB, funcionem correctamente. Primeiro há que instalar o php-apc/u que vai também instalar o modulo php5-apc/u. Provavelmente terão também de instalar o pacote memcached (ver aqui também)

#debian8
apt-get install php5-apcu php5-memcached memcached

No meu caso, para que o APCu  funcionasse em Debian 8 correctamente, tive de ainda editar o ficheiro de configuração “pai” (retirado daqui) do PHP para que funcionasse correctamente, que é o abaixo, e não o que está dentro do apache (/etc/php5/apache2/php.ini):

#debian8
nano /etc/php5/cli/php.ini

e depois acrescentar as linhas (depois de ;opcache.enable_cli=0):

;opcache.enable_cli=0
apc.enabled=1
apc.enable_cli=1

Depois há que dizer ao Nextcloud que o estamos a usar. Adicionar a seguinte linha ao config.php

#debian8
nano /var/www/html/nextcloud/config/config.php
#debian8
'memcache.local' => '\OC\Memcache\APCu',

Convem igualmente aceder ao log do apache em /var/log/apache2/error.log e verificar se existe algum erro do tipo:

[Wed Sep 02 14:34:20.826082 2015] [:error] [pid 16501] [client 192.168.1.x:59750] PHP Fatal error:  Allowed memory size of 13421772

Se sim, aceder ao php.ini e alterar as definições para, por exemplo:

#debian8
nano /etc/php5/apache2/php.ini
E alterar para 
memory_limit = 2048M

Aconselho vivamente a aumentar o valor exponencialmente acima dos 10 utilizadores.

O PHP per sí limita o tamanho dos uploads, mas o máximo por defeito é de 2GB, portanto há que ter algum cuidado na gestão de alguns ficheiros. No entanto estou a testar a alteração para 4GB. Para definir os máximos aconselho a alteração dos seguintes valores no php.ini:

nano /etc/php5/apache2/php.ini

e descomentar/activar a opção e aproveitar para alterar o tamanho dos uploads para o Nextcloud:

always_populate_raw_post_data = -1
file_uploads = On
upload_max_filesize = 4096M
post_max_size = 4096M

Manutenção / Actualização

Uma das coisas mais importantes que deve ser feita para que seja mais fácil actualizar e manter versões do quer do Nextcloud, quer do ownCloud é retirar a pasta /data (dos dados dos utilizadores) para um sítio diferente. Desta forma tem a pasta /var/www/html/owncloud sempre “livre” para trabalhar, e em caso de necessidade de reinstalação, não há necessidade de andar a mover ficheiros.

Uma das hipóteses que tenho visto bastante é mover a pasta /data para dentro da /var, ficando assim atrás do acesso web, mas ao mesmo tempo a mão e fácil de encontrar.

ATENÇAO: Este passo deve ser dado logo a seguir a instalação, pode ser feito posteriormente, mas com cautela, e com o Nextcloud em modo manutenção e todos os serviços parados.

#debian8
nano /var/www/html/nextcloud/config/config.php

Adicionar  alinha, logo no início:

'maintenance' => true,

Depois parar os serviços e mover:

#debian8
service apache2 stop
service postgresql stop
mv /var/www/html/nextcloud/data /var/

Depois da pasta movida, há que reconfigurar, quer as permissões da nova pasta, quer as configurações do Nextcloud.

#debian8
chown -R www-data:www-data /var/data/
nano /var/www/html/nextcloud/config/config.php

E redefinir a pasta em:

 'datadirectory' => '/var/data/',

O objectivo agora é actualizar para a ultima versão, neste caso a 9. Descarregar a ultima versão e descomprimir:

wget https://download.nextcloud.com/server/releases/nextcloud-10.0.1.zip
unzip nextcloud-10.0.1.zip

Antes de movermos para a pasta principal que estamos a usar, aconselho sempre a renomear/mover a pasta antiga para algo como nextcloud_old. Para além disso vamos precisar do ficheiro config.php que mexemos a pouco.

#debian8
cd /var/www/html/
mv nextcloud nextcloud_old

Agora sim podemos voltar a raiz e mover a nova versão para a pasta Nextcloud.

#debian8
cd \
mv nextcloud /var/www/html/

Agora, não esquecer de recuperar para esta nova pasta as nossas configurações (-avr permite ver o que é que está a copiar):

cp -avr nextcloud_old/config/config.php nextcloud/config/

Agora há que remover o Nextcloud do modo de manutenção e arrancar o Apache e o PostGreSQL.

nano /var/www/html/nextcloud/config/config.php
'maintenance' => false,
service postgresql start
service apache2 start

Agora é só aceder a vossa página do Nextcloud e correr o script de actualização (e rezar para que tudo corra bem). Comigo no rasp, foi limpinho, limpinho!

Configurar correctamente o CronJob

Para que o cron ocupe menos recursos, o melhor é mesmo usar um cron do sistema. Na administração, em vez de estar seleccionado em modo AJAX, escolher a opção Cron. De seguida listar o que está configurado no crontab e verificar se a ultima linha tem alguma coisa.

crontab -u www-data -l

Se nada estiver na ultima linha, efectuar a seguinte alteração:

crontab -u www-data -e

E adicionar a linha, onde 15 é minutos (de 15 em 15 minutos):

#debian8
*/15  *  *  *  * php -f /var/www/html/nextcloud/cron.php > /dev/null 2>&1

Configurar acessos externos

Para que se possa aceder a partir de um acesso externo, é necessário configurar o Nextcloud para que ele o permita. Aceder a:

#debian8
nano /var/www/html/nextcloud/config/config.php

E dentro dos trusted_domains, acrescentar cada um dos domínios, ou redireccionamentos configurados:

'trusted_domains' =>
 array (
 0 => '10.0.0.25',
 1 => 'mycloud.no-ip.info',
 2 => 'cloud.mydomain.net',
 ),

Configurar acessos SAMBA/CIFS

Em primeiro lugar, para que o Nextcloud consiga aceder a partilhas windows ou samba, o cliente SMB tem de ser instalado. Há um pacote que melhora consideravelmente a performance do acesso SAMBA/CIFS que não está no repositório oficial do debian. Há que então adicionar o repositório do OC e instalar o smbclient e o novo pacote:

PS: pacote ainda não disponível para quaisquer dos Raspberry Pi, o que é pena.

#debian8
echo 'deb http://download.opensuse.org/repositories/isv:/ownCloud:/community:/8.1/Debian_8.0/ /' > /etc/apt/sources.list.d/php5-libsmbclient.list wget http://download.opensuse.org/repositories/isv:/ownCloud:/community:/8.1//Debian_8.0/Release.key apt-key add - < Release.key
wget http://download.opensuse.org/repositories/isv:ownCloud:community:8.1/Debian_8.0/Release.key
apt-key add - < Release.key
#debian7/8
apt-get update
apt-get install smbclient php5-libsmbclient

A partir daqui as opções de acessos aos armazenamentos externos dentro de “Personal” e “Admin” passam a ter disponíveis as opções “SMB / CIFS” e “SMB / CIFS using OC login“. A configuração que consegui que funcionasse num ambiente Windows Server 2008 foi a de alterar o meu username windows para algo mais linux frendly e colocar as seguintes opções:

Folder name: Nome que se deseja dar à pasta
Host: IP do servidor SMB/CIFS ('10.0.0.5')
Share: caminho até à pasta do utilizador no domínio (sem o IP, ex: "/data/users/adrianoafonso") ou apenas "/"
Remote subfolder: caminho da partilha
Domain: Nome de domínio, se aplicável
Username: nome de utilizador do domínio
Password: password do utilizador no domínio

Adicionar disco (interno/externo) à directoria do user

Em primeiro lugar tenho que agradecer ao Sílvio André por esta dica, que me deu bastante jeito numa implementação caseira numa máquina de um cliente.

Se o disco já estiver ligado na máquina há que começar por o montar devidamente. Primeiro há que ver se ele está ligado:

blkid

Isto vai listar os discos estão ligados. Aproveitem para copiar já o UUID, vão precisar dele mais à frente.  O /dev/sda1 deverá ser o nosso disco. Depois confirmar se a pasta existe no /media/:

cd /media/
ls

Se não estiver lá, é porque provavelmente não está automaticamente montado. Portanto há que criar a pasta:

mkdir /media/<nome_do_disco>

Em muitos casos o pacote de reconhecimento de partições NTFS não está instalado por defeito, há que o fazer através:

apt-get install ntfs-3g

E não esquecer de dar as permissões devidas ao mount:

chmod 775 /media/<nome_do_disco>

Para garantir que o mount seja mantido depois de reiniciar, o melhor adicionar a seguinte linha ao fstab. Primeiro aceder ao fstab:

nano /etc/fstab

Depois adicionar a seguinte linha, com o UUID que copiaram anteriormente:

UUID=<uuid_do_disco> /media/<nome_do_disco> ntfs-3g noatime 0 0

Outra configuração que poderá ser válida é a seguinte:

UUID=<uuid_do_disco> /media/<nome_do_disco> ntfs defaults,rw,group=33 0 0

Em que aqui aqui são os parâmetros de acesso, por exemplo, “rw”, indica que o disco permitirá a escrita e group=33, especifica que o disco está acessível ao apache. Reiniciem e verifiquem se tudo está como previsto.

De seguida há que aceder à interface do “Nextcloud > Apps (canto supeior esquerdo) > Not enabled” e activar a app “External storage support“.

Para dar permissão de acesso a todos os utilizadores/grupo definido terem acesso ao disco, ir á página “Admin” e efectuar as seguintes configurações:

Folder name: Nome que se deseja dar à pasta
External storage: Local
Authentication: None
Configuration: caminho configurado em /media/<nome_do_disco>
Available for: Especificar o grupo que irá ter acesso ao disco

 

Deixar uma resposta

twenty − 18 =