A continuación instalaremos una nube Nextcloud en Ubuntu 18.04, con el servidor web Nginx, php-fpm 7.2 y MariaDB. La nube Nextcloud que montaremos estará perfectamente optimizada para ser usada en un entorno plenamente productivo. Para ello seguiremos los siguientes pasos.
INSTALAR EL SERVIDOR WEB NGINX
Una vez logueados a nuestro equipo instalaremos el servidor web Nginx. Para ello tan solo tenemos que ejecutar el siguiente comando en la terminal:
sudo apt install nginx
Acto seguido iniciaremos el servidor web ejecutando el siguiente comando:
sudo systemctl start nginx
Finalmente haremos que el servidor web se inicie de forma automática cada vez que arranquemos nuestro servidor. Para ello ejecutaremos el siguiente comando en la terminal:
sudo systemctl enable nginx
INSTALAR Y CONFIGURAR PHP 7.2 PARA USAR NEXTCLOUD EN UBUNTU
A continuación instalaremos la versión 7.2 de PHP. Para ello ejecutaremos el siguiente comando en la terminal:
sudo apt install php7.2-fpm php7.2-curl php7.2-cli php7.2-mysql php7.2-gd php7.2-common php7.2-xsl php7.2-json php7.2-intl php-pear php-imagick php7.2-dev php7.2-common php7.2-mbstring php7.2-zip php7.2-soap php7.2-opcache
Configuración de PHP-FPM
Accedemos al archivo de configuración php.ini ejecutando el siguiente comando en la terminal:
sudo nano /etc/php/7.2/fpm/php.ini
Cuando se abra el editor de textos buscaremos la siguiente línea:
;date.timezone =
Una vez encontrada la descomentamos y añadimos la zona horaria de forma que quede del siguiente modo:
date.timezone = Europe/Madrid
Nota: Si lo precisan pueden consultar las zonas horarias que admite PHP.
Acto seguido buscamos la siguiente línea:
;cgi.fix_pathinfo=1
Una vez encontrada la descomentaremos y le daremos el valor 0 de forma que quede del siguiente modo:
cgi.fix_pathinfo=0
Finalmente guardamos los cambios y cerramos el fichero. El siguiente paso consistirá en repetir las mismas modificaciones que acabamos de aplicar en el fichero /etc/php/7.2/fpm/cli/php.ini. Por lo tanto ejecutamos el siguiente comando:
sudo nano /etc/php/7.2/fpm/cli/php.ini
Cuando se abra el editor de texto fijaremos la zona horaria y desactivaremos cgi.fix_pathinfo. Por lo tanto las variables date.timezone y cgi.fix_pathinfo tendrán los siguientes valores:
date.timezone = Europe/Madrid cgi.fix_pathinfo=0
Una vez aplicadas las modificaciones guardaremos los cambios y cerraremos el fichero.
El último paso consistirá en editar el fichero fpm/pool.d/www.conf. Para ello ejecutaremos el siguiente comando en la terminal:
sudo nano fpm/pool.d/www.conf
Cuando se abra el editor de textos descomentamos las siguientes líneas:
env[HOSTNAME] = $HOSTNAME env[PATH] = /usr/local/bin:/usr/bin:/bin env[TMP] = /tmp env[TMPDIR] = /tmp env[TEMP] = /tmp
Guardaremos los cambios y cerraremos el fichero. Finalmente reiniciaremos y habilitaremos php 7.2 ejecutando los siguientes comandos:
sudo systemctl restart php7.2-fpm sudo systemctl enable php7.2-fpm
De esta forma tan sencilla PHP 7.2 ya estará operativo.
INSTALAR MARIADB PARA GESTIONAR NUESTRA BASE DE DATOS
Instalaremos MariaDB para gestionar nuestra base de datos. Para ello ejecutaremos el siguiente comando en la terminal:
sudo apt install mysql-server mysql-client
Para asegurar que el servidor está levantado y funcionando ejecutaremos el siguiente comando en la terminal:
sudo systemctl start mysql
Para finalizar el proceso de instalación ejecutaremos el siguiente comando para asegurar que cada vez que reiniciemos nuestro servidor se inicie MariaDB.
systemctl enable mysql
Securizar el servidor de base de datos MariaDB
Para mejorar la seguridad de MariaDB ejecutaremos el siguiente comando en la terminal:
mysql_secure_installation
Acto seguido se nos pedirá que introduzcamos la contraseña del usuario root. Como no hemos establecido ninguna presionamos Enter.
Enter current password for root (enter for none):
A continuación nos preguntarán si queremos establecer una contraseña para el usuario root. En mi caso respondo que Sí y presiono Enter.
Set root password? [Y/n]: Y
Seguidamente tendremos que introducir por duplicado la contraseña que queremos que tenga el usuario root de MariaDB:
New password: contraseñ@rootmariadb Re-enter new password: contraseñ@rootmariadb
Acto seguido nos preguntarán si queremos eliminar el usuario anónimo que está creado por defecto en MariaDB. Respondemos que Sí y presionar enter.
Remove anonymous users? [Y/n]: Y
En el siguiente paso se nos preguntará si queremos revocar el acceso remoto al usuario root. En nuestro caso responderemos que Sí y presionaremos enter.
Disallow root login remotely? [Y/n]: Y
A continuación nos preguntarán si queremos borrar la base de datos de prueba de MariaDB. Recomiendo que la borren respondiendo Sí.
Remove test database and access to it? [Y/n]: Y
Finalmente responderemos que Sí para asegurar que la totalidad de configuraciones realizadas se apliquen correctamente.
Reload privilege tables now? [Y/n]: Y
De está forma tan sencilla habremos incrementado la seguridad del sistema de datos MariaDB.
Crear y configurar la base de datos de Nextcloud en Ubuntu con MariaDB
El siguiente paso consiste en crear la base de datos que usará Nextcloud en ubuntu. Para ello nos loguearemos a nuestra base de datos ejecutando el siguiente comando:
sudo mysql -u root -p
Una vez ejecutado el comando introducimos la contraseña del usuario root que creamos en el apartado anterior y presionamos enter. Acto seguido nos loguearemos a la base de datos y ejecutaremos los siguientes comandos:
Para crear una base de datos que se llamará nextcloud:
CREATE DATABASE nextcloud;
Para crear el usuario joan y hacer que la base de datos tenga la contraseña contraseña_base_datos:
CREATE USER 'joan'@'localhost' IDENTIFIED BY 'contraseña_base_datos';
Para que el usuario joan disponga de la totalidad de permisos en la base de datos nextcloud:
GRANT ALL PRIVILEGES ON nextcloud.* TO 'joan'@'localhost';
Para actualizar los privilegios que tiene el usuario joan:
FLUSH PRIVILEGES;
Para desloguearnos de la base de datos:
exit;
Una vez finalizada la configuración de la base de datos podemos proseguir con la instalación de un certificado SSL para Nextcloud.
CONFIGURAR EL FIREWALL DEL SERVIDOR UBUNTU QUE ALOJA NEXTCLOUD
A estas altura ya podemos configurar el firewall de nuestro servidor Ubuntu. En nuestro caso abriremos los puertos 80, 443 y 22. Para ello ejecutaremos el siguiente comando para asegurar que ufw está instalado:
sudo apt install ufw
Finalmente ejecutaremos los siguientes comandos para abrir los puertos:
sudo ufw start sudo ufw enable sudo ufw allow http sudo ufw allow https sudo ufw allow ssh
Una vez ejecutados los comandos ya podemos continuar con el siguiente apartado.
INSTALAR UN CERTIFICADO LET’S ENCRYPT
Obviamente es importante securizar nuestra nube mediante un certificado SSL. Para ello ejecutaremos el siguiente comando en la terminal:
sudo apt install letsencrypt
Acto seguido detendremos el servidor web ejecutando el siguiente comando en la terminal:
sudo systemctl stop nginx
Una vez parado el servidor ejecutaremos el siguiente comando para generar el certificado SSL para nuestro dominio:
certbot certonly --standalone -d cloudjoan.tk -d www.cloudjoan.tk
Nota: Deberéis reemplazar cloudjoan.tk por su nombre de dominio.
Después de ejecutar el comando empezará el proceso de creación del certificado SSL. Durante el proceso de instalación tan solo tienen que ir leyendo y respondiendo las preguntas. Una vez finalizado el proceso se habrán creado los siguientes ficheros:
/etc/letsencrypt/live/cloudjoan.tk/fullchain.pem /etc/letsencrypt/live/cloudjoan.tk/privkey.pem
Nota: Deberéis reemplazar cloudjoan.tk por su nombre de dominio.
Finalmente crearemos una clave de 2048 bits para el intercambio de claves Diffie-Hellman. Para ello ejecutaremos el siguiente comando en la terminal:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
De esta forma la comunicación entre el cliente y el servidor se hará de una forma más segura. A estas alturas ya podemos empezar con el proceso de instalación de Nextcloud en Ubuntu.
DESCARGAR LA ULTIMA VERSIÓN DE NEXTCLOUD EN UBUNTU
Inicialmente instalaremos la totalidad de paquetes necesarios para instalar Nextcloud en Ubuntu. Para ello ejecutaremos el siguiente comando en la terminal:
sudo apt install wget unzip zip -y
Acto seguido accederemos a la raíz de nuestro servidor web ejecutando el siguiente comando:
cd /var/www
Descargaremos la última versión de Nextcloud con el siguiente comando:
wget https://download.nextcloud.com/server/releases/latest.zip
Descomprimiremos el archivo .zip que acabamos de descargar ejecutando el siguiente comando:
unzip latest.zip
Crearemos el directorio /var/www/nextcloud/data que almacenará los datos de nuestra nube Nextcloud. Para ello ejecutaremos el siguiente comando en la terminal:
mkdir -p /var/www/nextcloud/data/
Nota: Una buena práctica de seguridad seria guardar los datos fuera de nuestro servidor web. Por lo tanto, si quieren pueden usar otra ubicación como por ejemplo /nextcloud-data.
Seguidamente ejecutaremos el siguiente comando para que la totalidad de archivos de instalación y datos almacenados en nuestra nube pertenezcan al grupo y al usuario www-data.
sudo chown -R www-data:www-data /var/www/nextcloud/
A continuación ya podemos realizar realizar la configuración del Virtualhost para Nextcloud.
CONFIGURAR NGINX PARA ACCEDER A NEXTCLOUD DE FORMA SEGURA
El siguiente paso consiste en configurar un VirtualHost para que nuestra nube sea accesible de forma segura. Para ello ejecutamos el siguiente comando en la terminal:
sudo nano /etc/nginx/sites-available/nextcloud
Acto seguido pegamos el siguiente código. Los únicos valores del código que tenéis que cambiar son los que están en color azul. Por lo tanto tendréis que reemplazar cloudjoan.tk por vuestro dominio.
|
Una vez pegado el código y realizadas las modificaciones guardamos los cambios y cerramos el fichero.
A continuación habilitamos el VirtualHost mediante un enlace simbólico. Para ello ejecutamos el siguiente comando en la terminal:
ln -s /etc/nginx/sites-available/nextcloud /etc/nginx/sites-enabled/
Finalmente iniciamos/reiniciaremos el servidor web y PHP para que se haga efectiva la configuración que hemos aplicado. Para ello ejecutaremos los siguientes comandos:
sudo systemctl start nginx sudo systemctl restart php7.2-fpm
A estas alturas ya podemos iniciar la instalación de Nextcloud en Ubuntu.
INSTALAR NEXTCLOUD EN UBUNTU 18.04
Abriremos un navegador y accederemos a nuestro dominio. En mi caso el dominio es el siguiente:
https://cloudjoan.tk/
Nota: Tendréis que reemplazar cloudjoan.tk por vuestro dominio.
Acto seguido rellenaremos cada uno de los campos que veremos en el navegador web.
Las opciones de configuración a introducir en cada uno de los campos son las siguientes:
- Nombre de usuario del administrador: Podéis poner el nombre que queráis. En mi caso he usado joancarles.
- Contraseña del usuario administrador: Usad la que queráis pero asegurad que sea una contraseña segura. En mi caso he elegido 12345678910.
- Ubicación donde se guardaran los datos: En mi caso quiero que los datos se guarden en /var/www/nextcloud/data. Recordad que en apartados anteriores creé la ubicación que estoy detallando en este campo.
- Usuario de la base de datos: En mi caso introduzco joan porque el usuario que en apartados anteriores creé para la base de datos
- Contraseña de las base de datos: Tenemos que introducir la contraseña de la base de datos que creamos y definimos en apartados anteriores. En mi caso la contraseña es contraseña_base_datos.
- Nombre de la base de datos: Tan solo tenemos que escribir el nombre que pusimos a la base de datos de Nextcloud. El nombre que puse a la base de datos fue nextcloud.
- Ubicación del sistema de gestión de base de datos: MariaDB está instalado en el mismo servidor que Nextcloud, por lo tanto tenemos que indicar localhost.
Una vez rellenados los campos clican encima del botón Completar la instalación. Acto seguido se iniciará la instalación de Nextcloud en nuestro VPS con Ubuntu 18.04. Una vez finalizada la instalación verán la siguiente pantalla.
ACTIVAR EL SISTEMA DE CACHE OPCACHE
Para optimizar el rendimiento de nuestra nube activaremos opcache. Para ello ejecutaremos el siguiente comando en la terminal:
sudo nano /etc/php/7.2/fpm/conf.d/10-opcache.ini
Una vez se abra el editor de ficheros añadiremos el siguiente código:
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
Para finalizar el proceso guardaremos lo cambios, cerraremos el fichero y reiniciaremos Nginx y PHP ejecutando los siguientes comandos en la terminal:
sudo systemctl restart php7.2-fpm sudo systemctl restart nginx
MEJORAR EL RENDIMIENTO DE NUESTRA NUBE CON REDIS Y APCU
Usaremos un sistema de cache para mejorar el rendimiento de nuestra nube Nextcloud. Para ello instalaremos Redis y APCu ejecutando el siguiente comando en la terminal:
sudo apt-get install redis-server php-redis php-apcu
Una vez instalados los paquetes necesarios accederemos a la configuración de Nextcloud ejecutando el siguiente comando en la terminal:
sudo nano /var/www/nextcloud/config/config.php
Cuando se abra el editor de textos tendremos que añadir el contenido que está marcado en color rojo:
|
Una vez modificado el código guardamos los cambios y cerramos el fichero.
Finalmente reiniciaremos PHP y Nginx ejecutando los siguientes comandos en la terminal:
sudo systemctl restart php7.2-fpm sudo systemctl restart nginx
TRANSFORMAR LA BASE DE DATOS AL FORMATO BIGINT
En mi caso, algunas de las columnas de la base de datos no se han creado con el formato bigint. Para que todos los datos numéricos estén en formato bigint haremos lo siguiente:
Accedemos al directorio raíz de Nextcloud ejecutando el siguiente comando en la terminal:
cd /var/www/nextcloud
A continuación ejecutamos el siguiente comando para asegurar que la totalidad de columnas de la base de datos se convierta a bigint:
sudo -u www-data php occ db:convert-filecache-bigint
Al ejecutar el comando se nos preguntará si queremos transformar las columnas filecache.mtime y filecache.storage_mtime. Responderemos que Sí y presionaremos Enter.
Following columns will be updated: * filecache.mtime * filecache.storage_mtime This can take up to hours, depending on the number of files in your instance! Continue with the conversion (y/n)? [n] y
Finalmente reiniciaremos PHP, MariaDB y Nginx ejecutando los siguientes comandos:
sudo systemctl restart php7.2-fpm sudo systemctl restart nginx sudo systemctl restart mysql
En estos momentos deberíamos tener nuestra nube Nextcloud instalada y perfectamente configurada.
ENLACES DE INTERÉS
A continuación les dejo el siguiente enlace que considero de interés. Si lo leen encontrarán opciones alternativas para la instalación y la configuración:
https://www.c-rieger.de/nextcloud-installation-guide-ubuntu/
Ver los comentarios (21)
Buenas, no consigo que funcione, hay dos pasos que no me salen los archivos al abrirlos, son los siguientes, al ejecutar: sudo nano /etc/php/7.2/fpm/cli/php.ini y sudo nano /etc/php/7.2/fpm/cli/php.ini me dice para crear nuevos archivos, porque no existen.
Luego a la hora de instalar el certificado ssl, en nombre de dominio quería saber a que se refiere exactamente, ya que no sé si es necesario tener un dominio web, o se refiere al nombre de mi ubuntu.
Lo estoy ejecutando en ubuntu 18.04 desktop
Probé a ver si funcionaba el nextcloud pero no accedía.
Un saludo y gracias.
Hola
Si te pone que no existen los archivos es que no has instalado php 7.2. Cuando lo hayas instalado siguiendo las instrucciones del artículo podrás editar estos archivos.
El dominio se refiere a la dirección vinculada a la IP Pública de tu servidor. En otras palabras la URL que usarás en el navegador para conectarte a tu nube. Si no tienes dominio puedes comprarlo, usar dominios gratuitos como los .tk, o si quieres tener el servidor en tu casa puedes usar el dominio que te ofrecerán servicios DNS dinámicos como NO-IP o Duck DNS.
Lo que se detalla en el tutorial también esta montado en un Ubuntu 18.04. Por lo tanto deberías tener los mismos paquetes y archivos que yo.
Saludos
Buenas, los archivos no me salen, y realize los procesos de instalación de php7.2 siguiendo a rajatabla las instrucciones del artículo. Y también quería saber, como enlazo el dominio a mi ubuntu, gracias
Un saludo
Hola
Como te dije en mi caso tengo los archivos y los 2 usamos Ubuntu 18.04. Si no tienes los archivos y no es que lo que te digo ni idea del motivo. A pesar de esto deberías puedes seguir adelante con el tutorial sin modificar los archivos. Arrancar te debería arrancar.
Tema dominio ya te he comentado que tienes 3 opciones. Si dentro del blog haces una búsqueda por no-ip y por Instalar Nextcloud en una raspberry Pi encontrarás información de como hacerlo con un servicio de direccionamiento dinámico DNS.
Saludos
Buenas, pero yo lo que quiero es acceder desde fuera de mi red local, con mi IP que tengo fija, ya que el mi proeveedor de internet me la tiene puesta fija. Osea poniendo mi IP desde otra red y accediendo a nextcloud, aunque de todas formas yo lo que voy a hacer es descargarme la aplicación de nextcloud cliente en otros pcs, y configurarlo con el nextcloud server. Pero ya te digo, no hay forma de configurarlo sabiendo yo mi IP fija y accediendo con mi IP desde fuera de mi red.
Un saludo
Hola
Ya te he respondido sobre las posibles formas que tienes para localizar tu nube cuando estás fuera de tu red local. Si buscas información en el buscador del blog encontrarás como hacerlo. (Haz una búsqueda por el término NO-IP)
Pero si tienes IP fija entonces como dominio puedes usar tu IP y no hace falta hagas nada más.
Si haces lo que se pone en el blog y abres los puertos de tu Router y del Firewall de tu equipo podrás acceder a tu nube sin problema.
Saludos
hola, realice todos los pasos indicado correctamente, pero al querer acceder al servidor por localhost no encuentra la pagina, es posible configurarlo para que también accede desde localhost?
Hola
Primero de todo una observación. En el tutorial explico como montar Nextcloud en un servidor remoto y por tus preguntas deduzco que en tu caso lo haces en un servidor local. Por lo tanto siguiendo los pasos no obtendrás el resultado esperado a no ser que sepas bien lo que estás haciendo.
Si has montado Nextcloud en un servidor remoto no tiene sentido tu pregunta. No puedes acceder con localhost porque el servidor remoto está fuera de la red local.
Si lo has montado en local entonces deberías poder acceder sin problema con localhost o 127.0.0.1. Si quieres acceder al servidor local con otros equipos de la red local tienes que configurar tu firewall y modificar el apartado trusted domains del fichero de configuración
/var/www/nextcloud/config/config.php
. Por ejemplo si tu servidor tiene la IP 192.168.1.20 deberías agregar:1 => '192.168.1.20',
. En vez de 192.168.1.20 podrías intentar poner 127.0.0.1 o localhost.Saludos
Buenas!
Estoy siguiendo el tutorial y he tenido el mismo error, el sistema decía que no encontraba /etc/php/7.2/fpm/cli/php.ini así que he ido directo al directorio y haciendo directamente sudo nano php.ini si que lo he conseguido. Saludos!
Es erroneo, el directorio /etc/php/7.2/fpm/cli/php.ini
El correcto es /etc/php/7.2/cli/php.ini
Tu comentario es incorrecto.
Ambas ubicaciones pueden ser válidas. Si usas PHP FastCGI entonces la dirección que mencionas es correcta, pero en este post se usa PHP-FPM (FastCGI Process Manager). Por lo tanto el tutorial es correcto.
Saludos
gracias por la ayuda
Si no lo encontraba es porque no tecleabas bien el comando. Si haces un copiar y pegar te debería entrar directo porque creo que la dirección del comando de lo que está publicado es correcta.
Que tal, yo quiero instalar Nextcloud en una maquina virtual de Ubuntu 18.04, ¿Éste tutorial me sirve?
Hola
El 99% te servirá pero deberás aplicar algunos pasos adicionales como configurar tu máquina virtual en modo bridge, Disponer de un servicio de direccionamiento DNS y dar acceso a los equipos de tu red local a la nube. Para realizar todo lo comentado encontrarás información en el blog,
Saludos
Muy buenas
En primer lugar feliciades por el tutorial, lo estoy siguiendo y no me encuentra el archivo fpm/pool.d/www.conf
Me sale vacío, imagino que habré hecho algo mal, lo estoy instalando en un pc con Linux Mint 19.1
Muchas gracias por anticipado
Un saludo
David
Hola David
Intenta navegar manualmente desde la terminal para encontrar el archivo. Seguro que está
O prueba con este comando:
sudo nano /etc/php/7.2/fpm/pool.d/www.conf
Entiendo que Mint 19.1 utiliza php 7.2. Sino modifica 7.2 por la versión de PHP que use.
Saludos
Amigo gracias por este esto, mañana lo intento parece muy bueno el tutorial llevo todo el dia de hoy y ayer intentando montar nextcloud en un dominio que he comprado,
Una preguntilla... solo con el nombre del dominio ya se asocia la dirección al servidor o hay que poner algun dato más?
es decir tu usas " cloudjoan.tk " todo el rato en ningun momento se usa por ejemplo la dirección ip que te da la página donde registras el dominio? o direcciones como esta por ejemplo nw34.service-online.net.
Saludos
Hola
En el sitio donde hayas comprado el dominio deberás aplicar la configuración pertinente para asociar el nombre de dominio a la dirección IP de tu servidor.
Si estás aplicando el tutorial en tu casa entonces dudo que te sirva el dominio que has comprado porque la IP de tu casa será dinámica. En este caso deberás usar un servicio de direccionamiento dinámico como NO-IP o DuckDNS y usar el router o un cliente para que cada vez que se actualice la IP de tu casa el dominio se enteré que ha cambiado la IP. Si miràs dentro del blog verás tutoriales para hacer esto y para instalar Nextcloud en una Raspberry Pi.
Saludos
Gracias por el valioso tutorial!
Segui todo al pie de la letra y me quedo atascado creando los certificados. El error es el siguiente:
IMPORTANT NOTES:
- The following errors were reported by the server:
Domain: xxxxxxxxxx
Type: None
Detail: DNS problem: NXDOMAIN looking up A for cloudraf.tk - check
that a DNS record exists for this domain
Hola
Mi recomendación es que no uses un dominio .tk. Utiliza un .ml o alternativo y no deberías tener problemas.
Saludos