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:

  1. Configurar un pool ZFS y optimizar un dataset para ser utilizado por Postgres
  2. Instalar PostgreSQL
  3. 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

Installation Wizard

Using the occ Command

Manual Installation on Linux


Tal vez pueda interesarte


Compartí este artículo