Los recientes artículos dedicados a FreeBSD publicados en este blog, fueron una suerte de preámbulo para llegar al objetivo final: implementar una nube personal utilizando ownCloud sobre un servidor FreeBSD con las siguientes características: Nginx como servidor HTTP; PHP-FPM como servidor de aplicación (PHP en modo FastCGI); Postgres como motor de bases de datos; y ZFS como sistema de archivos. Una combinación muy ambiciosa que, a pesar de no estar soportada oficialmente por ownCloud, pretende utilizar la mejor alternativa disponible para implementar cada componente, con el fin de alcanzar la máxima eficiencia y rendimiento posible. En términos futboleros sería una especie de "selección", poner el mejor jugador disponible para cada posición: ownCloud+FreeBSD+Nginx+PHP-FPM+Postgres+ZFS.
Este artículo documenta únicamente la instalación y configuración de ownCloud, es decir, se asume que se cuenta con un servidor FreeBSD con ZFS, Nginx, PHP-FPM y PostgreSQL correctamente instalados y configurados. Por ende, si se parte desde una instalación fresca de FreeBSD (sobre la cual sólo se han realizado algunas tareas de post-instalación mínimas), se deberán llevar a cabo previamente las siguientes tareas:
- Configurar un pool ZFS y optimizar un dataset para ser utilizado por Postgres
- Instalar PostgreSQL
- Instalar Nginx y PHP con soporte para SSL
Instalación de ownCloud
Para instalar ownCloud simplemente ejecutar:
# pkg install owncloud
Luego, crear un directorio de trabajo, donde se guardarán los archivos de los usuarios de ownCloud:
# mkdir /zdata/www/owncloud # chown www:www /zdata/www/owncloud
Durante la instalación del port, un mensaje indica que se debe definir el siguiente alias en la configuración de Apache:
Alias /owncloud /usr/local/www/owncloud AcceptPathInfo On <Directory /usr/local/www/owncloud> AllowOverride All Require all granted </Directory>
Aunque, si se utiliza Nginx en vez de Apache, la configuración es diferente. Agregar la siguiente configuración de sitio (en el artículo Instalar Nginx y PHP expliqué cómo funcionan los directorios sites-available
y sites-enabled
) en el archivo owncloud.conf
:
# nano /usr/local/etc/nginx/sites-available/owncloud.conf
location /owncloud { root /zdata/www; location ~ \.php { fastcgi_pass php5-fpm-sock; fastcgi_param SCRIPT_FILENAME $request_filename; include fastcgi_params; # AcceptPathInfo On fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_param PATH_INFO $fastcgi_path_info; } }
Guardar el archivo y habilitar el nuevo sitio:
# cd /usr/local/etc/nginx/sites-enabled/ # ln -s ../sites-available/owncloud.conf . # service nginx reload
Opcionalmente, crear un archivo de error 404 personalizado:
# nano /usr/local/www/nginx-dist/404.html
<center> <p style="font-size: 150px;">404</p> </center>
En la configuración del sitio en Nginx se observa que la raíz de la aplicación se ha definido como /zdata/www
. Esto supone que se ha creado y optimizado un dataset ZFS dedicado al al mismo (ver Instalar Nginx y PHP).
Sin embargo, el port utiliza como directorio de trabajo de la aplicación al directorio /usr/local/www/owncloud
. Lo que se debe hacer entonces, es copiar estos archivos a la ubicación deseada (/zdata/www/owncloud
). Esto tiene una ventaja inesperada, que es la posibilidad de actualizar el port sin preocuparse por los cambios. Es decir, al actualizar el port, se actualizarán los archivos dentro del directorio /usr/local/www/owncloud
. Esto permite poder hacer una revisión de los cambios y actualizar manualmente más tarde, utilizando probablemente rsync
.
# cp -a /usr/local/www/owncloud /zdata/www/ # cd /zdata/www/ # chown -R www:www owncloud
El último paso de la instalación consiste en habilitar HTTPS en Nginx. Esto es importante ya que se debe proveer un mecanismo para transmitir archivos de forma segura a través de la red (SSL).
Cabe recordar que para habilitar SSL se debe contar con un certificado. En anteriores artículos expliqué cómo crear un certificado SSL autofirmado en dos simples pasos, el cual sirve para hacer pruebas, ya que provee seguridad pero no es de confianza. También es posible obtener un certificado SSL gratuito.
Creación e inicialización de la base de datos de ownCloud
El siguiente paso consiste en ejecutar el script de instalación de ownCloud, el cual crea e inicializa la base de datos de ownCloud. Este script debe ser ejecutado a nombre del usuario que corre el servicio Web (www
). Para ello es necesario que el mismo tenga una shell asociada (de lo contrario no podrá ejecutar scripts). Por defecto, en sistemas FreeBSD, el usuario www
no posee una shell asociada, por ello es necesario asignar la shell sh
utilizando el comando pw
de la siguiente forma:
# pw user mod www -s /bin/sh
La última columna para el usuario "www" en el archivo /etc/passwd
debe indicar /bin/sh
:
root@freebsd-owncloud:/zdata/www/owncloud # cat /etc/passwd | grep www www:*:80:80:World Wide Web Owner:/nonexistent:/bin/sh
El script de instalación es el archivo PHP occ
. Para obtener ayuda acerca de la instalación, utilizar el parámetro -h maintenance:install
:
# cd /zdata/www/owncloud # su www -c "php occ -h maintenance:install"
La ayuda muestra los parámetros de instalación, entre los que se destacan todos aquellos relacionados a la base de datos:
ownCloud is not installed - only a limited number of commands are available Usage: maintenance:install [--database="..."] [--database-name="..."] [--database-host="..."] [--database-user="..."] [--database-pass[="..."]] [--database-table-prefix[="..."]] [--admin-user="..."] [--admin-pass="..."] [--data-dir="..."] Options: --database Supported database type (default: "sqlite") --database-name Name of the database --database-host Hostname of the database (default: "localhost") --database-user User name to connect to the database --database-pass Password of the database user --database-table-prefix Prefix for all tables (default: oc_) --admin-user User name of the admin account (default: "admin") --admin-pass Password of the admin account --data-dir Path to data directory (default: "/zdata/www/owncloud/data") --help (-h) Display this help message --quiet (-q) Do not output any message --verbose (-v|vv|vvv) Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug --version (-V) Display this application version --ansi Force ANSI output --no-ansi Disable ANSI output --no-interaction (-n) Do not ask any interactive question
Por supuesto, antes de ejecutar la instalación, se debe crear un usuario de base de datos ("owncloud" con contraseña "1234") y una base de datos ("owncloud"):
# su - pgsql $ psql postgres postgres=# create database owncloud template template0; postgres=# create user owncloud encrypted password '1234'; postgres=# alter user owncloud superuser; postgres=# alter database owncloud owner to owncloud; postgres=# \q $ exit
Inicialmente el usuario "owncloud" debe tener permisos de superusuario (superuser), pues con el mismo se crearán las tablas de la base de datos. Pero al finalizar la instalación se debe revocar este permiso.
Lógicamente, para conectarse a bases de datos Postgres desde PHP, será necesario contar con el módulo "pgsql":
# cd /usr/ports/databases/php56-pgsql/ # make install clean # service php-fpm restart # cd /zdata/www/owncloud
En este punto ya es posible ejecutar la instalación de la base de datos:
root@freebsd-owncloud:/zdata/www/owncloud # su www -c 'php occ maintenance:install --database="pgsql" --database-name="owncloud" --database-host="localhost" --database-user="owncloud" --database-pass="1234" --admin-user="admin" --admin-pass="****" -vv' ownCloud is not installed - only a limited number of commands are available ownCloud was successfully installed
Notar que durante la misma se crea el usuario "admin", con el cual se accederá al panel de control de la herramienta.
Por seguridad, quitar el rol de superusuario al usuario de base de datos "owncloud":
# su - pgsql $ psql postgres postgres=# alter user owncloud nosuperuser; postgres=# \q $ exit
A su vez, denegar el uso de una shell al usuario www
:
# pw user mod www -s /usr/sbin/nologin
Luego de la instalación, la configuración de acceso a la base de datos y URL del sitio se encuentra en el archivo config/config.php
:
# nano /zdata/www/owncloud/config/config.php
<?php $CONFIG = array ( 'instanceid' => '****', 'passwordsalt' => '****', 'secret' > '****', 'trusted_domains' => array ( 0 => 'localhost', 1 > 'owncloud.linuxito.com', ), 'datadirectory' > '/zdata/www/owncloud/data', 'overwrite.cli.url' > 'http://owncloud.linuxito.com', 'dbtype' => 'pgsql', 'version' => '8.1.3.0', 'dbname' => 'owncloud', 'dbhost' > 'localhost', 'dbtableprefix' =>'oc_', 'dbuser' > 'owncloud', 'dbpassword' => '1234', 'logtimezone' => 'UTC', 'installed' => true, );
Creación de usuarios
Finalizada la instalación y configuración de ownCloud, es posible acceder al panel de control ingresando la URL en un navegador (por ejemplo "https://owncloud.linuxito.com/owncloud") y utilizando las credenciales de administrador creadas durante la instalación de la base de datos:

En el primer acceso ofrece la posibilidad de descargar aplicaciones para dispositivos móviles:

En la página inicial se observan algunos archivos de ejemplo en la cuenta de "admin":

Con el objetivo de probar el cliente ownCloud, crear un usuario no privilegiado desde el menú desplegable "Admin > Users":

Luego de agregar el usuario, es posible configurar su "quota" (limitar el espacio en disco disponible para el mismo), por ejemplo 1 GB:

Configuración del cliente
La instalación del cliente ownCloud varía de acuerdo al sistema operativo utilizado.
En sistemas FreeBSD se instala desde el port owncloudclient
. Luego se inicia el cliente ejecutando owncloud
.
En el primer paso se debe ingresar la URL del servidor:

Luego un nombre de usuario y contraseña:

A continuación, es posible seleccionar la ubicación de la carpeta "ownCloud" en el sistema de archivos local (por defecto se crea en el $HOME
):

Con esto se termina el proceso de configuración del cliente:

En la barra de tareas del escritorio aparece el ícono con el tilde color verde, el cual indica que el cliente ha sincronizado exitosamente:

Para verificar el funcionamiento, crear un archivo en el directorio local:

Comprobar que el archivo haya sido subido al servidor:
root@freebsd-owncloud:/zdata/www/owncloud # cd data/ root@freebsd-owncloud:/zdata/www/owncloud/data # ll total 27 -rw-r--r-- 1 www www 284 Oct 19 15:07 .htaccess drwxr-xr-x 2 www www 2 Nov 5 14:53 .locks/ -rw-r--r-- 1 www www 0 Oct 19 15:08 .ocdata drwxr-xr-x 4 www www 4 Oct 19 15:42 admin/ drwxr-xr-x 4 www www 4 Nov 5 14:53 emiliano/ -rw-r--r-- 1 www www 0 Oct 19 15:07 index.html -rw-r----- 1 www www 23266 Nov 5 15:00 owncloud.log root@freebsd-owncloud:/zdata/www/owncloud/data # ll emiliano/ total 2 drwxr-xr-x 2 www www 2 Nov 5 14:53 cache/ drwxr-xr-x 4 www www 6 Nov 5 14:58 files/ root@freebsd-owncloud:/zdata/www/owncloud/data # ll emiliano/files/ total 2309 drwxr-xr-x 2 www www 3 Nov 5 14:53 Documents/ -rw-r--r-- 1 www www 2 Nov 5 11:59 PRUEBA.txt drwxr-xr-x 2 www www 5 Nov 5 14:53 Photos/ -rw-r--r-- 1 www www 2241884 Nov 5 14:53 ownCloudUserManual.pdf
Referencias
ownCloud Server Administration Manual
Installing ownCloud From the Command Line