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:
- Compilar e instalar PostgreSQL desde los fuentes
- Cómo crear una instancia de PostgreSQL
- Configuración básica de un servidor PostgreSQL
- Crear una base de datos y usuario en un servidor 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
- Nextcloud 12 Server Administration Manual - Installation on Linux
- Nextcloud 12 Server Administration Manual - Installation Wizard
- Nextcloud 12 Server Administration Manual - Nginx Configuration