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
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.
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
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
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
Buenas,
Lo de los módulos de nextcloud y nginx desconozco si funcionan bien o no… He encontrado un post que igual te sirve de ayuda: https://www.c-rieger.de/nextcloud-installation-guide/
Un saludo.
Muchas gracias!
Un saludo,
TitoDrew
Es un curso excelente trabajo el qué haces, tus post me han servido mucho para implementar varios servicios, muchas gracias
Me alegro de que te hayan valido Daniel 🙂
Un saludo
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!
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
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.
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
pormysql-server
y en los repositorios de php7.0 cambiajessie
porwheezy
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á.