8 de enero de 2015

Instalación de OwnCloud sobre Debian Wheezy

Para empezar bien el año voy a ver si escribo unas líneas para el blog, hace tiempo que lo tengo abandobado y es proposito de año nuevo escribir más a menudo siempre y cuando el tiempo me lo permita. Como dicta el titular de la entrada, voy a describir los pasos que he seguido para instalar un servidor OwnCloud con un backend MySQL en un sistema Debian Wheezy actualizado a la última versión.

Si os preguntáis de que trata ese servidor OwnCloud, qué es lo que hace o deja de hacer... Os recomiendo una pasadita por la página de la documentación oficial, por el manual de administración y de usuarios que son de fácil lectura y os podeis hacer una idea del potencial de este software. Mejor que ellos, yo no lo podría definir asi que manos a la obra.

Inicialmente es necesario añadir el repositorio propio de OwnCloud. En el caso de un sistema operativo Debian Wheezy es necesario agregar el siguiente:
deb http://download.opensuse.org/repositories/isv:/ownCloud:/community/Debian_7.0/ /
Tras ello añadiremos la clave pública con la que verificar el paquete:
wget http://download.opensuse.org/repositories/isv:ownCloud:community/Debian_7.0/Release.key 
apt-key add - < Release.key
Actualizamos el listado de paquetes con nuestro gestor de paquetes favorito, apt-get o aptitude, e instalamos el paquete owncloud junto con el resto de dependencias.


OwnCloud por defecto utiliza una base de datos SQLite, pero en entornos en producción y con un mayor número de usuarios recomiendan usar otros sistemas de bases de datos relacionales. Entre las distintas opciones de sistemas de bases de datos encontramos: MySQL/MariaDB, SQLite, PostgreSQL y Oracle.

En la instalación de OwnCloud, como dependencia se ha instalado el paquete mysql-server que es el servidor de bases de datos recomendado por los desarrolladores[1]. Nos conectamos al servidor, creamos la base de datos y el usuario SQL para la configuración de OwnCloud.
mysql> CREATE DATABASE owncloud; 
mysql> GRANT ALL ON owncloud.* TO 'owncloud'@'localhost' IDENTIFIED BY 'owncloud'; 
mysql> FLUSH PRIVILEGES;
Estos datos serán los que utilicemos posteriormente en la configuración de la base de datos de nuestro servidor, siendo necesario también introducir un nombre y una contraseña para el usuario administrador.


Durante la instalación de OwnCloud se genera el archivo de configuración principal[2], situado en /var/www/owncloud/config.php y en el mismo directorio también se encuentra un archivo llamado config.sample.php con la documentación de todas las opciones que el servidor permite en tiempo real.


En dicho archivo podemos encontrar desde las claves e Ids únicas del servidor, la versión del programa, la configuración de la base de datos y algunas otras opciones que también describire.

Hay que decir que la configuración de la base de datos se puede hacer desde el archivo config.php, pero es más sencillo y más cómodo realizarlo desde la interfaz gráfica. Por contra, también es necesario conocer dónde modificar los valores en el caso de que sea necesario.


Para garantizar, en la medida de lo posible, la seguridad en la conexión de los clientes a nuestra nube particular configuraremos el servicio HTTPS del servidor Apache.
openssl req -new -x509 -days 365 -nodes -out /etc/ssl/localcerts/apache.pem -keyout /etc/ssl/localcerts/apache.key 
chmod 600 /etc/ssl/localcerts/apache*
En mi caso se trata de un entorno de pruebas en el que no cuento con más páginas Web a servir en la misma máquina. Por ello utilizo los archivos de configuración por defecto que el paquete de apache2 proporciona: default y default-ssl; ambos disponibles en la ruta /etc/apache2/sites-availables.

/etc/apache2/sites-availables/default


/etc/apache2/sites-availables/default-ssl


Es necesario habilitar los módulos ssl y rewrite de Apache así como habilitar el archivo por defecto del servidor Web seguro:
a2enmod ssl 
a2enmod rewrite 
a2ensite default-ssl
Reiniciamos el servicio para que se apliquen los cambios realizados:
/etc/init.d/apache2 restart
Podemos comprobar que la configuración realizada es correcta conectándonos a través de un navegador a la dirección IP del servidor utilizando indistintamente protocolo seguro e inseguro. 


Existen varias maneras de realizar las tareas programadas que el servidor necesita, por defecto se utiliza AJAX para ejecutarlas cuando las distintas páginas Web son cargadas. Como recomiendan en la guia de administración[3], configuraremos Cron para la realización de las mismas.

Creamos una nueva tarea programada para el usuario www-data con el comando:
crontab -u www-data -e
E incluimos la siguiente línea para que se ejecute cada 15 minutos el script /var/www/owncloud/cron.php durante todos los días del año:
*/15 * * * *  php -f /var/www/owncloud/cron.php > /dev/null 2>&1
En el caso de acceder a la aplicación desde un directorio que no es la raiz del servidor Web será necesario sobreescribirla añadiendo la siguiente directiva en el archivo de configuración /var/www/owncloud/config/config.php:
'overwritewebroot' => '/owncloud',
En nuestro caso no será necesario incluir dicha opción dado que hemos modificado las directivas de Apache definiendo DocumentRoot como el directorio por defecto de OwnCloud, /var/www/owncloud.

Una vez hecho esto, a través de la interfaz Web accedemos a la zona de administración y modificamos el valor por defecto para la realización de las tareas programadas a Cron como se muestra en la siguiente captura.


Actualmente tenemos un servidor OwnCloud funcional pero con todas las opciones por defecto tras la instalación. Ahora toca modificar algunos aspectos para customizarla a nuestro gusto y en este caso lo realizaré a través del archivo de configuración comentado anteriormente.

Una de las directivas básicas que el servidor necesita es el directorio donde se almacena la información de los usuarios, por defecto en /var/www/owncloud/data. Dicha opción podremos modificarla tanto a través de la interfaz Web durante la configuración inicial del servidor o a través de la siguiente opción en el archivo de configuración:
'datadirectory' => '/var/www/owncloud/data',
Otra de las directivas importantes es la que determina desde que nombres domínios o direcciones IP se puede acceder al servidor.
'trusted_domains' => 
array ( 
  0 => '192.168.173.103', 
  1 => 'domain.name', 
),
En nuestro caso como hemos modificado la directiva DocumentRoot de Apache, será recomendable modificar la siguiente opción del fichero de configuración que sobreescribe la url en el navegador del cliente:
'overwrite.cli.url' => 'https://192.168.173.103/',
El idioma por defecto es el Inglés, pero podemos modificarlo utilizando la siguiente opción junto con el código correspondiente a nuestro lenguaje según el archivo /var/www/owncloud/settings/languageCodes.php:
'default_language' => 'es',
Una vez que hemos configurado el servicio HTTPS de Apache, la siguiente directiva fuerza el uso del protocolo seguro para acceder al servidor:
'forcessl' => true,
Podemos quitar el enlace de ayuda del menu de usuario situado en la esquina superior derecha utilizando la siguiente opción en el archivo de configuración:
'knowledgebaseenabled' => false,
A la hora de eliminiar los datos de los usuarios, éstos se envían a una papelera que el servidor incorpora por defecto y de la que podremos modificar el comportamiento con las siguientes opciones:
'trashbin_auto_expire' => true,
Con esta directiva activamos la eliminación automática de los archivos que hayan sido enviados a la papelera una vez hayan superado el tiempo de espera definido en la siguiente directiva:
'trashbin_retention_obligation' => 30,
Está opción fuerza que los archivos almacenados en la papelera sean guardados el número de días que se definan como valor de la misma, en este caso 30 días.

Por defecto, OwnCloud crea un avatar personalizado en función de la primera letra del nombre para el usuario. A través de la siguiente directiva podremos desactivar el uso de los mismos:
'enable_avatars' => false,
Otra opción que puede ser interesante en diferentes entornos en producción es denegar a los usuarios cambiar dichos nombres que serán únicamente generados por los administradores del servidor.
'allow_user_to_change_display_name' => false,
Hay muchas otras opciónes que están documentadas en el archivo config.sample.php así como en la documentación oficial comentada anteriormente.

OwnCloud viene por defecto con un montón de aplicaciones preinstaladas, muchas de ellas imprescindibles, algunas interesantes y otras de ellas a voluntad del administrador en función del tipo de servicio que se requiera dar. Algunas aplicaciones por defecto instaladas son: Calendario, Contactos, Actividad, visores de documentos, imágenes, vídeos, Editor de texto, etc...


Una aplicación interesante a tener en cuenta es la de cifrar los archivos de los usuarios que por defecto viene deshabilitada. En la documentación oficial podreis encontrar información sobre la misma así como algunas limitaciones y como asegurar los documentos de los usuarios en caso de olvido de la contraseña.

También podemos instalar la aplicación Antivirus para los archivos de nuestros usuarios, para lo que será necesario instalar una aplicación de terceros que podemos encontrar en la página oficial de OwnCloud. Nos descargamos el paquete y lo descomprimimos en el directorio /var/www/owncloud/apps. Tras ello, nos diriguimos al gestor de aplicaciones y veremos la nueva aplicación Antivirus para poder habilitarla.


Es necesario instalar el software de ClamAV para que actué en modo demonio en el servidor:
aptitude install clamav clamav-daemon

Como el error anterior indica, no tenemos firmas de antivirus disponibles por lo que primero actualizaremos las bases de firmas y después arrancaremos el demonio ClamAV con los comandos:
freshclam 
/etc/init.d/clamav-daemon start
Una vez hecho esto y una vez habilitada la aplicación Antivirus, nos diriguimos al apartado de administración donde encontramos nuevas opciones de configuración de la nueva aplicación que acabamos de instalar.


Configuraremos el modo Demonio y será necesario introducir el fichero utilizado por el servicio como socket de conexión, por defecto viene correctamente configurado para la ruta /var/run/clamav/clamd.ctl.

Con esto termina la instalación, configuración y customización de nuestro propio servidor cloud de una manera fácil y sencilla. El servidor tiene muchas funcionalidades que en esta entrada no han sido descritas pero de las que podeis encontrar mucha información en la documentación oficial.

Referencias

1 - Administrator Manual. 4.9 Database Configuration - Página 62:
The MySQL or MariaDB databases are the recommended database engines. However, because it is a file based database with the least administrative overhead, SQLite is chosen by default. 
Note: Because SQLite has some difficulties handling multiple users, we recommend that it be used only for single user ownCloud installations.
2 - Administrator Manual. 4.7.1 Default Parameters - Página 48:
These parameters are configured by the ownCloud installer, and are required for your ownCloud server to operate.
3 - Administrator Manual. 4.3.2 Cron Jobs - Página 45:
You can schedule cron jobs in three ways – using AJAX, Webcron, or cron. The default method is to use AJAX. However, the recommended method is to use cron.
Un saludo, Brixton Cat.