En esta oportunidad me tocó instalar un servidor Nextcloud, fork de ownCloud creado por su propio autor, y que mantiene la gran mayoría de los desarrolladores principales del mismo. Nexcloud es un software de gestión de archivos en la nube similar a Dropbox pero open source, lo cual permite implementar nubes privadas instalando el servidor Nexcloud en cualquiera de nuestros sistemas.

Además de utilizar un servidor Web con Nginx y PHP-FPM, y una base de datos PostgreSQL, lo interesante de este artículo es proveer una configuración que impida el acceso público a los documentos (que no sean navegables a través de HTTP/HTTPS) sino que sólo sea posible acceder a los mismos a través de la aplicación Web.

Requisitos

Anteriormente expliqué detalladamente como compilar Nginx con soporte para SSL/TLS y cómo instalar y configurar el servidor PHP FastCGI (PHP-FPM):

Por otro lado, los siguientes artículos cubren todos los aspectos relacionados al servidor de bases de datos PostgreSQL:

Manos a la obra

El primer paso consiste en descargar el servidor Nextcloud:

# cd
# wget https://download.nextcloud.com/server/releases/nextcloud-12.0.0.zip

Crear un directorio nextcloud dentro de /usr/local:

# cd /usr/local/
# mkdir nextcloud

Dentro de este directorio, crear un subdirectorio data que contendrá los datos (archivos de los usuarios) y será no navegable:

# cd nextcloud/
# mkdir data

Luego extraer el contenido del ZIP en /usr/local/nextcloud:

# unzip ~/nextcloud-12.0.0.zip

Esto crea el directorio nextcloud. Renombrarlo a www.

De esta forma nos queda la siguiente configuración:

  • /usr/local/nextcloud/www: directorio que contiene los archivos del servidor Nextcloud.
  • /usr/local/nextcloud/data: directorio de datos de los usuarios.

Configuración de permisos

A continuación, crear un usuario específico para el pool de PHP dedicado a Nextcloud, exclusivo para el acceso a los datos:

# useradd -s /usr/sbin/nologin -m -c "Usuario nextcloud" -d /home/nextcloud nextcloud

Este usuario debe pertenecer al grupo www-data (usuario con el que corre el servidor Nginx), para que PHP pueda acceder a los archivos del servidor Nextcloud:

# usermod -a -G www-data nextcloud

A continuación, ajustar los permisos del directorio para datos, y del directorio de archivos de Nextcloud:

# cd /usr/local/nextcloud
# chmod -R o-wrx .
# chown -R www-data:nextcloud www/
# chown -R nextcloud:nextcloud data/
# chown nextcloud:nextcloud .
# chmod 755 .
# find www/ -type f -exec chmod 0660 {} \;
# find www/ -type d -exec chmod 0770 {} \;

De esta forma, Nginx no tiene acceso de lectura a los archivos de los usuarios, sólo tiene acceso el servidor PHP-FPM. Gracias a esta configuración de permisos (además de no tener una configuración de location en Nginx) se garantiza la no-navegabilidad de los archivos de los usuarios.

Configuración de FPM

El siguiente paso consiste en definir un nuevo pool de FPM, exclusivo para Nextcloud. Crear el archivo nextcloud.conf dentro del directorio de definición de pooles:

# nano /etc/php5/fpm/pool.d/nextcloud.conf

Utilizar el usuario y grupo "nextcloud" para el pool, y usuario y grupo www-data para el socket (así Nginx puede acceder al mismo).

[nextcloud]
user = nextcloud
group = nextcloud
listen = /var/run/php5-fpm-$pool.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
access.log = /var/log/php5-fpm/$pool.access.log
slowlog = /var/log/php5-fpm/$pool.log.slow
chdir = /

La configuración para la gestión de procesos del pool depende de cada escenario, volumen de usuarios, etc. Verificar detenidamente la documentación oficial al respecto.

Reiniciar el servidor FastCGI para que se inicie el nuevo pool:

# service php5-fpm restart

Configuración de Nginx

Para gestionar la activación de sitios Web tal como lo hace Apache en Debian (a través de los directorios sites-available y sites-enabled), se deben realizar los siguientes pasos.

Cambiar al directorio de configuración de Nginx:

# cd /usr/local/nginx/conf/

Crear los directorios para sitios disponibles y habilitados:

# mkdir sites-available
# mkdir sites-enabled

Configurar Nginx para que levante automáticamente todos los archivos con extensión .conf que encuentre dentro de sites-enabled/:

# nano nginx.conf

Dentro de las secciones correspondientes a la configuración de los servidores HTTP y HTTPS, agregar la línea include sites-enabled/*.conf. Debe quedar de la siguiente forma:


    server {
        listen 80;
        
        [...]
        
        include sites-enabled/*.conf;
    }


    server {
        listen 443 ssl;
        
        [...]
        
        include sites-enabled/*.conf;
    }

Además, dentro de la configuración del protocolo "http", es necesario definir el acceso al nuevo pool dedicado a Nextcloud:


http {

    [...]
    
    upstream php5-fpm-nextcloud-sock {
        server unix:/var/run/php5-fpm-nextcloud.sock;
    }
    
    [...]

Ahora es posible definir la configuración para el alias "nexcloud":

# cd /sites-available/
# nano nextcloud.conf

location /nextcloud {

   alias /usr/local/nextcloud/www;

   location ~ \.php {
      fastcgi_pass php5-fpm-nextcloud-sock;
      fastcgi_param SCRIPT_FILENAME $request_filename;
      include fastcgi_params;
      # AcceptPathInfo On
      fastcgi_split_path_info  ^(.+\.php)(/.+)$;
      fastcgi_param PATH_INFO $fastcgi_path_info;
   }
}

Sólo resta habilitar el nuevo sitio (lo que haría el comando a2ensite en Debian y derivados):

# cd ../sites-enabled/
# ln -s ../sites-available/nextcloud .

Recargar la configuración de Nginx para que el nuevo sitio se ponga en funcionamiento:

# service nginx reload

Consideraciones adicionales al utilizar Nextcloud sobre Nginx

Cuando se utiliza un servidor Nextcloud sobre Nginx es necesario configurar una serie de variables adecuadamente (especialmente en lo que a headers respecta) para que todas las características de Nextcloud funcionen correctamente. La configuración de Nginx presente en este artículo es básica, y es probable que muchas características no funcionen correctamente, o no como es esperado. Para configurar adecuadamente el servidor Nginx (acorde a las necesidades de Nextcloud) el Manual de Administración de Nextcloud incluye diferentes configuraciones de ejemplo para diferentes situaciones, explicando el uso de cada sección:

Nextcloud 12 Server Administration Manual - Nginx Configuration

Es indispensable revisar cuidadosamente la configuración presente en el manual para garantizar el buen funcionamiento del servidor.

Instalación de la base de datos de Nextcloud

Habiendo configurado el servidor, es posible acceder al wizard de instalación de la base de datos de Nextcloud. A tal fin sólo basta con acceder al alias configurado anteriormente ("/nextcloud"), desde un navegador Web.

En el primer acceso a la aplicación Web, se ofrece la creación de la base de datos. Si hay dependencias no cumplidas, configuraciones de permisos erróneas, o módulos de PHP faltantes, Nexcloud notifica detalladamente. En mi caso particular, tuve la necesidad de instalar los módulos de PHP PostgreSQL (para el acceso al servidor de bases de datos Postgres), GD (necesario para el procesamiento de imágenes) y cURL (para acceso a URLs):

# apt-get install php5-pgsql php5-gd php5-curl

Dependiendo de cada servidor Web, puede ser necesario instalar módulos de PHP adicionales.

Una vez cumplidos todos los requisitos, es posible instalar la base de datos. En la parte superior de la página se debe especificar el nombre de usuario y contraseña del administrador, y el directorio de datos (creado anteriormente):

En la parte inferior, se indican las credenciales de acceso a la instancia de PostgreSQL:

Presionar "Finish setup" para finalizar la instalación:

La configuración de Nextcloud queda en el archivo /usr/local/nextcloud/www/config/config.php.

Finalmente, verificar el acceso desde cualquier cliente. En sistemas operativos FreeBSD es posible utilizar el cliente ownCloud, el cual se instala ejecutando pkg install owncloudclient. El artículo Cómo instalar un servidor ownCloud en FreeBSD cubre en detalle la configuración de dicho cliente en sistemas FreeBSD. De igual forma, el artículo Cómo instalar el cliente ownCloud en CentOS 7 cubre la instalación y configuración del cliente en sistemas CentOS 7.

Referencias


Tal vez pueda interesarte


Compartí este artículo