Inicio
Sobre MíSobre MíProyectosProyectosBlogBlogContactoContacto

Self-hosting Nextcloud

13 de enero de 2024

Beneficios

  • Más privacidad y seguridad
  • Rentabilidad
  • Escalabilidad
  • Mayor control y personalización

Requisitos previos

  • Una computadora que ejecute Ubuntu o alguna distribución basada en Debian.
  • Verifica si tu proveedor de internet permite habilitar el reenvío de puertos [Opcional].
  • Poseer un dominio [Opcional].

Configuración inicial del servidor

Actualiza tu distribución de Linux

sudo apt update
sudo apt full-upgrade
sudo apt autoremove
  • Instala todos los paquetes necesarios (algunos pueden ser opcionales según tus requerimientos)
sudo apt install neovim wget mariadb-server php php-apcu php-bcmath php-cli php-common php-curl php-gd php-gmp php-imagick php-intl php-mbstring php-mysql php-zip php-xml unzip nmap

Actualiza el nombre del host (Opcional)

  • Modifica el archivo y asigna un nombre de host o dominio adecuado a tu servidor
sudo nvim /etc/hostname

hostname.png

sudo nvim /etc/hosts

hosts.png

  • Reinicia tu servidor para aplicar los cambios realizados hasta ahora
sudo reboot

Descargando Nextcloud

  • Descarga el archivo ZIP de Nextcloud
wget https://download.nextcloud.com/server/releases/latest.zip

Configuración de MariaDB

  • Verifica el estado del servicio mariadb
systemctl status mariadb
  • Ejecuta el script de instalación segura
sudo mysql_secure_installation
  • A continuación, verás varias preguntas. Responde siguiendo las indicaciones proporcionadas:
Solicitud de contraseña --> Presiona Enter
¿Cambiar a unix_socket_auth [Y/n] --> n
¿Cambiar la contraseña de root [Y/n] --> Y
Ingresa tu contraseña segura:
¿Eliminar usuarios anónimos [Y/n] --> Y
¿Deshabilitar el inicio de sesión remoto para root [Y/n] --> Y
¿Eliminar la base de datos de prueba y su acceso [Y/n] --> Y
¿Recargar las tablas de privilegios ahora [Y/n] --> Y

Configuración de la base de datos de Nextcloud

  • Accede a MariaDB
sudo mariadb
  • Crea la base de datos
CREATE DATABASE nextcloud;
  • Configura los permisos
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost' IDENTIFIED BY 'mypassword';

FLUSH PRIVILEGES;
  • Presiona CTRL+D para salir

Servidor Web Apache

  • Habilita estas extensiones de PHP
sudo phpenmod bcmath gmp imagick intl
  • Descomprime el archivo de Nextcloud
unzip latest.zip
  • Mueve los archivos a la ubicación de servicio y establece los permisos correspondientes
mv nextcloud your.domain.name
  • Cambia los permisos
sudo chown -R www-data:www-data your.domain.name
  • Mueve el directorio a /var/www
sudo mv your.domain.name /var/www
  • Desactiva el sitio por defecto de Apache
sudo a2dissite 000-default.conf

Configurar el host de Nextcloud

  • Crea un archivo de configuración de Apache para servir Nextcloud
sudo nvim /etc/apache2/sites-available/your.domain.name.conf
  • Inserta el siguiente contenido en el archivo, asegurándote de modificar la parte que menciona your.domain.name:
<VirtualHost *:80>
    DocumentRoot "/var/www/your.domain.name"
    ServerName your.domain.name

    <Directory "/var/www/your.domain.name/">
        Options MultiViews FollowSymlinks
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>

    TransferLog /var/log/apache2/your.domain.name_access.log
    ErrorLog /var/log/apache2/your.domain.name_error.log

</VirtualHost>
  • Habilita el sitio
sudo a2ensite your.domain.name.conf

PHP

  • Debes ajustar ciertas líneas para que Nextcloud funcione correctamente
sudo nano /etc/php/8.1/apache2/php.ini
  • Dentro del archivo, localiza y modifica estos parámetros:
memory_limit = 3G #(Aumenta el valor si tienes más RAM)
upload_max_filesize = 50G #(Aumenta/Disminuye el valor según tus necesidades)
max_execution_time = 3600
post_max_size = 50G #(Aumenta/Disminuye el valor según tus necesidades)
date.timezone = Europe/London #(Consulta el siguiente enlace para ajustar tu zona horaria)
opcache.enable=1
opcache.interned_strings_buffer= 128
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

Zonas horarias

  • Habilita los módulos de PHP para Apache
sudo a2enmod dir env headers mime rewrite ssl
  • Reinicia Apache
sudo systemctl restart apache2

Configurar el servidor web de Nextcloud

  • Al ingresar por primera vez a la página, deberías ver algo similar a esto: admin.png
  • Ingresa la siguiente información en los campos correspondientes:
Username --> Tu nombre de usuario
Password --> Establece una contraseña segura para iniciar sesión en Nextcloud

Data Folder --> Déjalo por defecto

Database user --> nextcloud
Database password --> Contraseña de la base de datos de Nextcloud
Database name --> nextcloud
  • Luego, instala las aplicaciones recomendadas

Opcional

  • Como se mencionó anteriormente, para establecer una conexión a tu Nextcloud desde fuera de tu red privada, debes habilitar el reenvío de puertos en tu router.
  • Para proceder, en este ejemplo, configuro el reenvío de puertos en un router Movistar.
  • Lo primero que debes hacer es buscar tu IP privada utilizando el siguiente comando:
ifconfig -a

ifconfig.png

  • A continuación, ingresa al portal de tu router para configurar el reenvío de puertos. Introduce la dirección IP y selecciona "web-server" en el puerto 80, luego actívalo.
  • Para verificar si el puerto 80 está abierto, ejecuta el siguiente comando:
sudo nmap -n -PN -sT -sU -p80 {IP}
  • Verifica si la página de Nextcloud es accesible ingresando tu IP pública en el navegador:
    • Deberías ver algo similar a esto:

untrusted.png

Extra

  • Si deseas acceder a tu Nextcloud a través de tu IP pública:
  • Edita el archivo config.php
sudo nvim /var/www/your.domain.name/config/config.php
  • En trusted_domains, añade tu IP pública.

trusted.png

Configura tu dominio

  • Inicialmente, necesitas un dominio, el cual puede ser adquirido o obtenido de forma gratuita.
  • Existen varios sitios web que ofrecen opciones de dominios a precios accesibles:

Configuración en Namecheap

  • Una vez que hayas adquirido un dominio, procede a la configuración avanzada de DNS y establece un registro de host.
  • En la sección "IP Address", ingresa tu dirección IP pública.
  • Luego, en la sección "HOST", coloca "@".

namecheap_host.png

  • Procede a editar el archivo config.php
sudo nvim /var/www/your.domain.name/config/config.php
  • Agrega tu nombre de dominio al array trusted_domains.

domain_trusted.png

  • Ahora, puedes acceder a Nextcloud a través de tu dominio.

Certificado TLS

  • Instala snapd
sudo apt install snapd
sudo snap install core && sudo snap refresh core
  • Instala certbot
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
  • Obtén e instala tus certificados
sudo certbot --apache

Solución de problemas

  • Para solucionar problemas, busca en internet. La mayoría de los foros suelen tener soluciones.
  • En caso de que no sepas cómo resolver el problema, por favor, no dudes en contactarme vía correo electrónico.

Recursos

En caso de errores o sugerencias, por favor envía un pull request