Instalar ownCloud en un servidor dedicado (IaaS)
ownCloud es un software libre y multiplataforma, muy similar a Dropbox, que permite la propia gestión y seguridad de los datos almacenados. Como su nombre indica, se trata de una nube propia donde almacenar todo tipo de archivos: documentos, fotografías, vídeos, música…
Muchos optan por instalar su propio servidor ownCloud debido a los constantes y recientes casos de revelación de datos subidos a «la nube». Otros, buscando romper las limitaciones que les imponen otros servicios en cuanto a espacio se refiere.
Además, dispone de un repositorio de apps donde ampliar este servicio con cliente de correo, calendarios, notas, galería de imágenes, estadísticas de almacenamiento, etc.
Podéis ver una demo oficial de ownCloud aquí: https://demo.owncloud.org
En la práctica Despliegue de una aplicación web desarrollada en PHP en un servidor dedicado (IaaS), se detalla que el despliegue se hará en dos servidores utilizando para su configuración una receta Ansible.
Consulta la entrada Despliegue de servidores Vagrant con Ansible para ver el proceso de despliegue de estos dos servidores utilizando Ansible.
Instalación de ownCloud en dos máquinas Vagrant
Una vez automatizado el proceso de despliegue de las dos máquinas Vagrant con Ansible, en la que tendremos una máquina que hace de servidor web y otra que hace de servidor de base de datos, es importante configurar las direcciones IP privadas de ambas máquinas en el fichero de configuración Vagrantfile. El parámetro a ajustar es: config.vm.network "private_network", ip: "10.0.0.5"
, siendo la 10.0.0.5 para SBBDD y la 10.0.0.10 para SWeb.
Tras ello, comenzamos con la instalación de ownCloud en el host web.
Con wget
descargamos el paquete en nuestra máquina Vagrant llamada SWeb y con dirección IP 172.22.9.115. Tras ello, ejecutamos unzip owncloud-8.2.1.zip
y con privilegios de root cp -R owncloud/* owncloud/.* /var/www/html/
. Luego establecemos recursivamente www-data como propietario del directorio /var/www/html con el comando chown -R www-data:www-data /var/www/html/
.
- El módulo PHP GD no está instalado. Consulte al administrador de su servidor para instalar el módulo.
- El módulo PHP cURL no está instalado. Consulte al administrador de su servidor para instalar el módulo.
- Los módulos PHP se han instalado, pero aparecen listados como si faltaran. Consulte al administrador de su servidor para reiniciar el servidor web.
Estos tres avisos se solucionan instalando el módulo GD y el módulo cURL de PHP. Así pues, ejecutamos apt-get install php5-curl
y apt-get install php5-gd
.
En el host SBBDD accedemos a la base de datos MySQL para crear un usuario con privilegios para ownCloud. Esto lo realizamos ejecutando las instrucciones CREATE USER 'ownuser'@'10.0.0.10' IDENTIFIED BY 'password';
y GRANT ALL PRIVILEGES ON *.* TO 'ownuser'@'10.0.0.10';
en la terminal de comandos de MySQL.
Despliegue de ownCloud de entorno de desarrollo a entorno de producción
El siguiente paso es recrear un escenario idéntico en el servidor cloud privado. Así pues, accedemos al panel de administración de OpenStack del IES Gonzalo Nazareno para crear dos instancias Debian Jessie 8.2 con nombres SWeb y SBBDD.
- SWeb: Debian Jessie 8.2 / IP flotante: 172.22.204.61 / IP interna: 10.0.0.17
- SBDDD: Debian Jessie 8.2 / IP flotante: 172.22.204.62 / IP interna: 10.0.0.18
Despliegue en un servidor dedicado IaaS
El despliegue de ambos servidores en el cloud privado del IES Gonzalo Nazareno se realizará haciendo uso de la misma receta Ansible, modificando los parámetros del fichero hosts (dirección IP y nombre de usuario). También debemos modificar la instalación de módulos necesarios para el funcionamiento de ownCloud como son php5-curl y php5-gd.
1 2 3 4 |
[Servidores_Web] SWeb ansible_ssh_host=172.22.204.61 ansible_ssh_user=debian [Servidores_BBDD] SBBDD ansible_ssh_host=172.22.204.62 ansible_ssh_user=debian |
Igualmente copiamos la clave SSH a ambas instancias del cloud, añadiéndolas al fichero authorized_keys.
Al ejecutar ansible-playbook automatizacion_iaw/main.yml
nos saldrá información con errores debido a que las máquinas de nuestro cloud privado no tienen la función aptitude.
Accedemos a las instancias y realizamos la instalación de aptitude, para que el playbook de Ansible pueda ejecutar las instalaciones.
En la instancia SWeb, instalamos git, creamos un directorio e inicializamos una rama git donde se sincronizarán los ficheros del entorno de desarrollo.
1 2 3 4 5 |
root@SWeb:/home/debian# apt-get install git root@SWeb:/home/debian# exit debian@SWeb:~# mkdir git debian@SWeb:~# cd git debian@SWeb:~# git --bare init |
También establecemos una contraseña para el usuario debian o incluimos nuestra clave SSH para poder realizar la clonación.
Mientras que, en nuestra máquina SWeb de Vagrant, clonamos el repositorio git creado en la instancia del cloud privado con git clone debian@172.22.204.61:~/git
y posteriormente cambiamos su nombre a owncloud.
En este repositorio copiamos recursivamente el contenido de /var/www/html con el comando cp -R /var/www/html/* owncloud
con privilegios de superusuario.
Modificamos el fichero config.php ubicando en el directorio config. Los parámetros resaltados en negrita son los que yo he modificado, si has realizado alguna otra configuración debes reflejarlo en la copia de este fichero que se sincronizará con el servidor de producción.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php $CONFIG = array ( 'instanceid' => 'oc6v3atqk9ia', 'passwordsalt' => 'pNJ00cellC1mi6u6DMWk7bjvtSd2aY', 'secret' => 'gQKRl5CGw8u6foDgChcNefqV485GKucGmiCq18y/kV7Fp3+h', 'trusted_domains' => array ( 0 => '172.22.204.61', ), 'datadirectory' => '/var/www/owncloud/data', 'overwrite.cli.url' => 'http://172.22.204.61', 'dbtype' => 'mysql', 'version' => '8.2.1.4', 'dbname' => 'ownbase', 'dbhost' => '172.22.204.62', 'dbtableprefix' => 'oc_', 'dbuser' => 'ownuser', 'dbpassword' => 'contraseña', 'logtimezone' => 'UTC', 'installed' => true, ); |
Ubicándonos en el repositorio del directorio /home/vagrant/owncloud añadimos los ficheros con cambios con git add --all
, realizamos un commit y git push
para sincronizar con la rama master.
1 2 3 |
vagrant@web:/home/vagrant/owncloud$ git add --all vagrant@web:~/owncloud$ git commit -am "Sicronización con el servidor del entorno de producción" vagrant@web:~/owncloud$ git push |
Ahora, en la instancia creada en el cloud privado creamos el directorio owncloud para clonar la rama git ubicada en la misma máquina. La secuencia de comandos ejecutada en la instancia SWeb es:
1 2 3 4 5 6 7 |
debian@sweb:~$ mkdir owncloud debian@sweb:~$ cd owncloud/ debian@sweb:~/owncloud$ git clone ../git/ Cloning into 'git'... done. Checking out files: 100% (10466/10466), done. debian@sweb:~$/owncloud$ |
Por consiguiente, es necesario realizar un enlace simbólico en el directorio /var/www que apunte a nuestro contenido. En este caso tenemos dos métodos:
- Eliminar el directorio /var/www/html y su contenido para crear un enlace simbólico en el directorio /var/www/ con el nombre html.
- Crear en /var/www un enlace simbólico con cualquier nombre (owncloud en nuestro caso) y modificar el parámetro DocumentRoot.
Eligiendo la segunda opción, esta han sido mis acciones en la terminal de comandos. En la edición del 000-default.conf se ha modificado la ruta del DocumentRoot.
En la clonación se asignan otro usuario y grupo como propietarios de los ficheros, establecemos www-data nuevamente con chown -R www-data:www-data *
Ahora, ingresamos en la máquina Vagrant que contiene la base de datos llamada BBDD. Exportaremos la base de datos a un fichero con nombre ownbase.sql y lo copiamos mediante scp al servidor de producción. Utilizamos el comando scp y no sincronizamos mediante un repositorio git pues, supuestamente, los datos del entorno de pruebas no deben ser cargados nuevamente al servidor de producción.
Los comandos, como se muestran en la imagen, son: mysqldump -u root -p ownbase > ownbase.sql
y scp ownbase.sql debian@172.22.204.62:
Accedemos al servidor de base de datos de producción y, tras loguearnos en MySQL, creamos la base de datos. Luego salimos de la terminal de MySQL y ejecutamos el comando mysql -u root -p ownbase < ownbase.sql
para importar la base de datos.
Si todo está correcto, no nos falta ningún módulo de PHP ni tenemos ningún parámetro mal establecido en config.php, debemos de poder accede correctamente a nuestro servidor de ownCloud mediante la dirección IP flotante de nuestra instancia cloud.
Como consecuencia de la implantación de estos dos entornos, a la hora de realizar cualquier modificación en nuestro entorno de desarrollo/pruebas, estas no podrán ser exportadas directamente al entorno de producción. El motivo es debido a que, ante cualquier instalación de plugins, modificación de ajustes o cualquier otra configuración, éstas quedarán reflejadas en la base de datos, no siendo posible exportar únicamente los cambios realizados en la base de datos sin sobreescribir los ya implantados en producción.