[HowTo] Nextcloud 16 en Ubuntu Server 18.04.3 con Apache2 + PHP7.2+MySQL

Posted: lunes, 30 de septiembre de 2019 by Termita in Etiquetas: , , , , , , , , , ,
0

Apache2 + PHP 7.2 + MySQL + NEXTCLOUD 16.0.0
En LOCAL (no acceso exterior)

WAN --- ONT --------- SERCOMM --------------- WRT54g -------------- servidor
      (ip.pública)    192.168.0.1   192.168.0.2 / 192.168.1.1      192.168.1.14


Sé que NextCloud en Ubuntu Server 18 se puede instalar de diversas formas:
    snap [sudo snap install nextcloud]
    docker
    script de bash
    "apt" (instalación y configuración de cada uno de los ingredientes necesarios)

He preferido, como siempre hasta el momento, montar nextcloud usando apt... porque a mi entender es la forma más "nativa", a medida, y su desempeño e integración en el servidor será mejor.

Por otro lado, he determinado que el acceso a la aplicación sea sólo en red local por varias razones:
Porque tal como están las cosas ahí "fuera" y dado que voy a almacenar documentación propia es preferible que sea inaccesible desde el exterior de la manera convencional.
Porque para acceder desde el exterior puedo utilizar VPN. No es lo mismo securizar un sólo elemento que tener que ocuparse de varios simultáneamente.
Porque mi router me dificulta bastante establecer conexiones SSL. Su puerto 443 se halla secuestrado por la compañía suministradora de internet. Este asunto pienso solucionarlo algún día.

Lo primero: CREAR EL SERVIDOR APACHE2 + MYSQL + PHP

sudo apt-get install apache2 php7.2 bzip2 -y
sudo apt-get install libapache2-mod-php php-gd php-json php-mysql php-curl php-mbstring -y
sudo apt-get install php-intl php-imagick php-xml php-zip -y
sudo apt-get install mysql-server php-mysql -y

sudo systemctl start mysql
sudo systemctl enable mysql
(*) Si no ejecutamos esos 2 comandos nos dará fallo mysqld.sock al ejecutar sudo mysql_secure_installation

sudo mysql_secure_installation
(i) Creamos entonces una contraseña root. Una vez hecho esto hay que responder que sí ("y") a las preguntas restantes.

Y ahora lo segundo, crear la base de datos para NextCloud:

sudo mysql -u root -p

CREATE DATABASE nombrequequierasparalabasededatosdenextcloud;

CREATE USER 'unnombreusuario'@'localhost' IDENTIFIED BY 'contraseñaquequierasponer';

GRANT ALL PRIVILEGES ON nombrequequisisteparalabasededatosdenextcloud.* TO 'unnombreusuario'@'localhost';

FLUSH PRIVILEGES;

exit


Momento es de afrontar el tercer paso: descargar, instalar y configurar NextCloud en nuestro servidor:

cd /var/www/html

sudo wget https://download.nextcloud.com/server/releases/nextcloud-16.0.0.tar.bz2 -O nextcloud-16-latest.tar.bz2

sudo tar -xvjf nextcloud-16-latest.tar.bz2

(*) De mi cosecha, desconozco si es correcto, mas cuando instalé nextcloud bajo nginx (que, por cierto, no funcionó) hice este paso::::
sudo mkdir -p /var/www/html/nextcloud/data

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

sudo nano /etc/apache2/sites-available/nextcloud.conf
    Pegar lo siguiente:
Alias /nextcloud "/var/www/html/nextcloud/"
<Directory /var/www/html/nextcloud/>
    Options +FollowSymlinks
    AllowOverride All
      <IfModule mod_dav.c>
        Dav off
      </IfModule>

     SetEnv HOME /var/www/html/nextcloud
    SetEnv HTTP_HOME /var/www/html/nextcloud
</Directory>


sudo a2ensite nextcloud
sudo a2enmod rewrite headers env dir mime

sudo sed -i '/^memory_limit =/s/=.*/= 512M/' /etc/php/7.2/apache2/php.ini

sudo systemctl restart apache2

(i) Desde el navegador ir a:
http://ip/nextcloud
Solicitará:
    usuario administrador que queremos para nextcloud
    contraseña que queremos para ese usuario administrador de nextcloud
    nombre de la base de datos
    ubicación (host) de la base de datos
    usuario de la base de datos
    contraseña de usuario de la base de datos
Se instalará Nextcloud.

http://ip/nextcloud
Entramos en nextcloud con nuestro recién creado usuario administrador

En el apartado Configuración > (Administración) > Vista General es más que probable que se nos comuniquen una o dos cosas:




    1. Fallos o mejoras que podemos acometer

    2. Actualización de NextCloud vía web. Hace bien su trabajo mas, si hemos creado algún fichero en el directorio de Nextcloud (copias de seguridad antes de editar algún archivo, por ejemplo), el sistema de actualización lo detectará y hasta que no lo quitemos no continuará.

Explicado el punto 2, paso a explayarme con el punto 1.

1. Los errores más frecuentes que detecta NextCloud en sus instalación:


1.a Se recomienta activar opcache
Esto se hace editando el fichero /etc//etc/php/7.2/apache2/php.ini de forma que los siguientes parámetros queden descomentados (quitando el ;) y con los adecuados valores:
opcache.enable=1 
opcache.enable_cli=1 
opcache.interned_strings_buffer=8 
opcache.max_accelerated_files=10000 
opcache.memory_consumption=128 
opcache.save_comments=1 
opcache.revalidate_freq=1

(i) Más información sobre opcache y su relación con NextCloud:
https://docs.nextcloud.com/server/16/admin_manual/installation/server_tuning.html#enable-php-opcache
https://www.scalingphpbook.com/blog/2014/02/14/best-zend-opcache-settings.html [Explica cada uno de los parámetros y el por qué]
https://help.nextcloud.com/t/the-php-opcache-is-not-properly-configured/36147 [véase el último comentario, crítico con los parámetros recomendados]


1.b Se recomienda activar memcache
Hay tres formas de hacer esto. Una de ellas es a traves de Redis.
sudo apt install redis-server php-redis
ps ax | grep redis
sudo sytemctl restart apache2
sudo usermod -a -G redis www-data
sudo nano /var/www/html/nextcloud/config/config.php
    e insertamos:
  'memcache.local' => '\OC\Memcache\Redis',
  'memcache.distributed' => '\OC\Memcache\Redis',
  'redis' => [
       'host'     => 'localhost',
       'port'     => 6379,
  ],
  'memcache.locking' => '\OC\Memcache\Redis',

(*) Las líneas que proponía insertar la página oficial de NextCloud hacían que la aplicación no funcionara en mi caso, así que las adapté a las que recoge Polkillas en su blog.


1.c Fallo de nuestro servidor en la resolución ("service discovery") de /.well-known/caldav y /.well-known/cardav
Parece ser que esto suele ocurrir cuando nextcloud no está en la raiz del servidor web, sino en una carpeta (/nextcloud por ejemplo).
Logré solucionarlo haciendo algo diferente a lo que recomendaba la página oficial de NextCloud:

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/000-default.conf.bak

sudo nano /etc/apache2/sites-available/000-default.conf
Justo debajo de la linea “</VirtualHost/>” hay que insertar estas 2 líneas:
Redirect 301 /.well-known/carddav /nextcloud/remote.php/dav 
Redirect 301 /.well-known/caldav /nextcloud/remote.php/dav

sudo systemctl restart apache2

[Anexo] ¿Cómo intenté anteriormente solucionar infructuosamente ese fallo de resolución de caldav y cardav?
Editando el fichero /var/www/html/nextcloud/.htaccess tal como recomendaba la página oficial de NextCloud:<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond %{HTTP_USER_AGENT}  DavClnt  RewriteRule ^$         /nextcloud/remote.php/webdav/          [L,R=302]
  RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
  RewriteRule ^\.well-known/host-meta /nextcloud/public.php?service=host-meta [QSA,L]
  RewriteRule ^\.well-known/host-meta\.json /nextcloud/public.php?service=host-meta-json [QSA,L]
  RewriteRule ^\.well-known/webfinger /nextcloud/public.php?service=webfinger [QSA,L]
  RewriteRule ^\.well-known/carddav /nextcloud/remote.php/dav/ [R=301,L]
  RewriteRule ^\.well-known/caldav /nextcloud/remote.php/dav/ [R=301,L]
  RewriteRule ^remote/(.*) /nextcloud/remote.php [QSA,L]
  RewriteRule ^(?:build|tests|config|lib|3rdparty|templates)/.* - [R=404,L]
  RewriteCond %{REQUEST_URI} !^/\.well-known/(acme-challenge|pki-validation)/.*
  RewriteRule ^(?:\.|autotest|occ|issue|indie|db_|console).* - [R=404,L]
</IfModule>


Tras la creación del Servidor y la instalación de Nexcloud, el resumen del sistema queda asi, una carga del 9% de la memoria y 0'22 de CPU. No está mal para un sistema viejo y reciclado como este:






----------------------------------
fuentes:

0 comentarios: