Nextcloud: Instalación y configuración

Nextcloud es una herramienta para disponer de un almacenamiento cloud gestionado. Es un fork de Owncloud con licencia GPL3 que actualmente está en la versión 11. Tiene una gran potencia y está en continuo desarrollo por lo que implementan apps y features constantemente. Cuenta con la opción de edición de ficheros en la nube google docs style basado en collabora online. Es muy sencillo de instalar y es compatible con varios sistemas externos como LDAP, Google Drive, Amazon S3..

En esta ocasión, se va a montar sobre un Debian 8.7. Y los paquetes que se utilizarán seran php7, apache2.4 y MariaDB

Paquetes necesarios

 

PHP7 + Apache2 + Mariadb

 

Añadir los repositorios de php7.0

vim /etc/apt/sources.list
deb http://packages.dotdeb.org jessie all

Añadir la clave pública

wget https://www.dotdeb.org/dotdeb.gpg
apt-key add dotdeb.gpg

Actualizar los repositorios

apt update

Instalar todas las dependencias

apt install php7.0 php7.0-gd php7.0-json php7.0-xml php7.0-zip php7.0-mysql php7.0-curl php7.0-bz2 php7.0-intl php7.0-mcrypt php7.0-imap php7.0-ldap php7.0-imagick php7.0-mbstring php7.0-intl apache2 libapache2-mod-php7.0 mariadb-server unzip

Configuración nextcloud

 

Descargar la última versión de nextcloud

cd /var/www/ && wget https://download.nextcloud.com/server/releases/nextcloud-11.0.1.zip

Descomprimirla y borrar el zip

unzip nextcloud-11.0.1.zip
rm -fr nextcloud-11.0.1.zip

Dar permisos a Apache en la carpeta de nextcloud

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

 

Crear el site de Nextcloud. En este caso se va a crear un site únicamente escuchando por el puerto 443 con certificados de letsencrypt.

vim /etc/apache2/sites-available/nextcloud.conf
<VirtualHost *:443>

  ServerName nextcloud.ichasco.com
  DocumentRoot /var/www/nextcloud/

  <Directory /var/www/nextcloud/>
   Options +FollowSymlinks
   AllowOverride All

   <IfModule mod_dav.c>
    Dav off
   </IfModule>

   SetEnv HOME /var/www/nextcloud
   SetEnv HTTP_HOME /var/www/nextcloud

  </Directory>

 SSLEngine on
 SSLCertificateFile /etc/letsencrypt/live/nextcloud.ichasco.com/cert.pem
 SSLCertificateKeyFile /etc/letsencrypt/live/nextcloud.ichasco.com/privkey.pem
 SSLCertificateChainFile /etc/letsencrypt/live/nextcloud.ichasco.com/fullchain.pem

 SSLCompression off
 SSLProtocol All -SSLv2 -SSLv3
 SSLHonorCipherOrder on
 SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4

 <IfModule mod_headers.c>
   Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains; preload"
 </IfModule>

 ErrorLog ${APACHE_LOG_DIR}/error-nextcloud.log
 CustomLog ${APACHE_LOG_DIR}/access-nextcloud.log combined env=!client-ip-request
 CustomLog ${APACHE_LOG_DIR}/access-nextcloud.log proxy env=client-ip-request

</VirtualHost>

Habilitar el site de nextcloud

a2ensite nextcloud.conf

Habilitar los modulos necesarios

a2enmod ssl
a2enmod headers
a2enmod rewrite
Comprobar que la sintaxis de apache sea correcta
apachectl configtest

Una vez todo esté bien, reiniciar apache

service apache2 restart

Una vez hecho esto, abrir un navegador y empezar con la configuración de la base de datos

https://nextcloud.ichasco.com

Si se quiere hacer un hardening del servidor web, véase el siguiente post. Hay que tener cuidado, porque la propia instalación de nextcloud en el .htaccess trae varias cabeceras implementadas.

11 comments

  1. Buenas, gran manual. No había encontrado hasta ahora un tutorial tan actual con la versión de Nextcloud 11.0.1 y con Apache 2 y PHP 7. Sólo una duda, por qué el puerto 443 y no el 80? Es para agilizar el tráfico de red o por temas de seguridad? Y te vuelvo a felicitar por el trabajo hecho de este manual.

    Un saludo,
    TitoDrew

    1. Buenas,

      El uso del puerto 443, es por seguridad. Se podría utilizar el puerto 80 sin ningún problema. Incluso se podrían utilizar ambos. Pero la configuración mas correcta sería tener un virtualhost en el puerto 80 pero con un permanent redirect al 443. Si quieres mas info sobre como securizar un servidor web, te dejo otro post que hice: https://blog.ichasco.com/securizacion-de-apache/

      Comentar que el propio nextcloud en su .htacces, trae implícitas varias cabeceras de seguridad.

      Si te gustaría agilizar las conexiones, te recomendaría el compilar un apache con HTTP2 o un nginx que en las últimas versiones trae esta función de serie, e implementar un memcache.

      Si tienes cualquier duda o problema, no dudes en comentar.

      Un saludo

      1. De acuerdo, lo tendré en cuenta lo que me comentas porque voy a montar el Nexcloud en una Banana Pi M2 Ultra y me interesa eso de agilizar las conexiones.. Lo que sucede es que leí que muchos módulos de Nexcloud no son compatibles con nginx y por eso quiero implementarlo con Apache. Muchas gracias por tu respuesta.

        Un saludo,
        TitoDrew

  2. Es un curso excelente trabajo el qué haces, tus post me han servido mucho para implementar varios servicios, muchas gracias

  3. Hola Ismael,

    excelente guia! aunque mira, tengo un problemilla compañero y resulta que realizo y sigo los pasos, todo correcto hasta aquí ——> Instalar todas las dependencias
    en la que me saca este error

    “Leyendo lista de paquetes… Hecho
    Creando árbol de dependencias
    Leyendo la información de estado… Hecho
    El paquete mariadb-server no está disponible, pero algún otro paquete hace referencia
    a él. Esto puede significar que el paquete falta, está obsoleto o sólo se
    encuentra disponible desde alguna otra fuente

    E: No se ha podido localizar el paquete php7.0
    E: No se pudo encontrar ningún paquete con la expresión regular «php7.0»”

    y así con todos los paquetes, me imagino que será por el repositorio que no está on o algo ¿Cual uso? cabe aclarar que es la primera vez que me pongo a tocar OpenMediaVault……

    Gracias por tu tiempo y atención!

    1. Buenas,

      si, el problema es que no has metido el repositorio de php7.0 que es el primer paso:

      Añadir los repositorios de php7.0

      vim /etc/apt/sources.list
      deb http://packages.dotdeb.org jessie all

      Y meter las claves:

      wget https://www.dotdeb.org/dotdeb.gpg
      apt-key add dotdeb.gpg

      Esto sería para debian jessie. Una vez hecho esto, tienes que actualizar los repositorios.

      apt update

      Y con esto ya tendrías habilitados los repositorios para poder instalar el paquete.

      Si tienes algún problema mas, no dudes en comentarme.

      Un saludo

  4. si Ismael, ya realize los pasos de añadir repositorio y key etc….. este es mi sources:

    # deb cdrom:[Debian GNU/Linux 7.0.0 _Wheezy_ – Official Snapshot amd64 LIVE/INS$

    #deb cdrom:[Debian GNU/Linux 7.0.0 _Wheezy_ – Official Snapshot amd64 LIVE/INST$

    deb http://ftp.es.debian.org/debian/ wheezy main
    deb-src http://ftp.es.debian.org/debian/ wheezy main

    deb http://security.debian.org/ wheezy/updates main contrib non-free
    deb-src http://security.debian.org/ wheezy/updates main contrib non-free
    deb http://packages.dotdeb.org jessie all
    deb-src http://packages.dotdeb.org jessie all

    Y este el error que me da:

    root@Burga-Cloud:~# apt-get install php7.0 php7.0-gd php7.0-json php7.0-xml php7.0-zip php7.0-mysql php7.0-curl php7.0-bz2 php7.0-intl php7.0-mcrypt php7.0-imap php7.0-ldap php7.0-imagick php7.0-mbstring php7.0-intl apache2 libapache2-mod-php7.0 mariadb-server unzip
    Leyendo lista de paquetes… Hecho
    Creando árbol de dependencias
    Leyendo la información de estado… Hecho
    El paquete mariadb-server no está disponible, pero algún otro paquete hace referencia
    a él. Esto puede significar que el paquete falta, está obsoleto o sólo se
    encuentra disponible desde alguna otra fuente

    E: El paquete «mariadb-server» no tiene un candidato para la instalación

    Gracias por tu tiempo y atencion master, gracias.

    1. Vale, el primer problema que veo es que estás usando un debian wheezy. El post está hecho para jessie. Los paquetes de mariadb no están para wheezy. Cambia mariadb-server por mysql-server y en los repositorios de php7.0 cambia jessie por wheezy

      Resumiendo los paquetes a instalar son:

      apt-get install php7.0 php7.0-gd php7.0-json php7.0-xml php7.0-zip php7.0-mysql php7.0-curl php7.0-bz2 php7.0-intl php7.0-mcrypt php7.0-imap php7.0-ldap php7.0-imagick php7.0-mbstring php7.0-intl apache2 libapache2-mod-php7.0 mysql-server unzip

      Y los repositorios que tienes que tener:

      deb http://packages.dotdeb.org wheezy all
      deb-src http://packages.dotdeb.org wheezy all

      Con esto te funcionará.

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *