Introducción
Hace años que uso ownCloud para guardar mis archivos en la nube. Aunque, hasta hace poco, estaba usando una versión desatendida (ownCloud 4) y, sobre todo por pereza, no había actualizado. Pero quería actualizar, comprobar las nuevas características, y verificar que las antiguas seguían funcionando bien (sincronización con dispositivos, con el ordenador y velocidad en transacciones).
Mi conclusión ha sido que, el nuevo ownCloud trae muchas mejoras (tanto en contactos, calendario, archivos, sistema de complementos, seguridad y velocidad). Pienso que está entrando de lleno en un sistema preparado para usarse en la empresa y grupos de trabajo. Antes, tenía la sensación de que faltaba algo, algunas opciones no se completaban como debían, pero ahora, la considero lo suficientemente robusta y con buenas características como para usarse sin problema en un entorno de producción.
Desde aquí quiero dedicar esta serie de posts sobre ownCloud a la instalación desde cero en un servidor LAMP, configuración, buenas prácticas, sincronización con dispositivos, etc. Quiero hacer una guía bastante completa. Mis posts, más o menos suelen ser de entre 1000 y 1500 palabras, por lo que no quiero hacerlos muy pesados, siento dejar colgado a todo el mundo mientras se van publicando los posts.
Un servidor propio para ownCloud
No estoy hablando de que tenga que ser un gran servidor, podemos utilizar un ordenador viejo en casa (si utilizamos la nube desde fuera de casa, y más si somos varias personas tenemos que tener una conexión más o menos buena, sobre todo subida), o si me apuras una Raspberry PI o cualquier otro dispositivo donde podamos enchufar un disco duro. En el caso de utilizar un ordenador en casa, tendremos tanto almacenamiento como tenga ese disco duro y la disponibilidad dependerá de nuestra conexión de red (si se va la luz en casa, lógicamente no estará disponible, a no ser que utilicemos SAIs, por ejemplo).
Pero también podemos instalarlo en un servidor nuestro que hayamos montado o contratado, puede ser desde un servidor compartido hasta un dedicado, pasando por un VPS, y tampoco tiene que tener unas características bestiales. Yo mismo he montado uno en un servidor con un sólo procesador, 1Gb de RAM y 20Gb de disco duro libres y va de escándalo, es más, perfectamente puede convivir con otras aplicaciones y otras webs. Por supuesto, esto depende del uso que hagamos y de los usuarios que tengamos conectados, no es lo mismos un servidor con unas 20 personas conectadas (pensemos que cada persona puede sincronizar sus datos con varios dispositivos y eso genera una carga en el servidor), que con 2000 personas. Aunque cómo escalemos nuestro servidor ya es otro asunto.
Instalando en un LAMP
Quiero centrarme en un servidor LAMP, aunque podemos utilizar cualquier otra configuración, ésta es la que he probado y para la que creo esta guía.
No voy a detenerme mucho en este aspecto, ya que por Internet encontráis bastantes guías para instalar, incluso yo he hecho un par de ellas ( esta es la última). Me basaré en esa configuración ya que es una de las más comunes. Podéis mirar en esa web para ver cómo podemos instalar PHP como CGI o FPM, que también es muy interesante.
Debemos asegurarnos de tener al menos PHP 5.4, aunque es recomendable utilizar una versión más nueva.
Copiando archivos
Una vez tenemos Apache y PHP instalado, así como un servidor de base de datos MySQL o MariaDB (podemos instalar también ownCloud sobre un PostgreSQL o un Oracle entre otros. Procedemos a crear nuestra estructura de archivos. Como habréis visto en otras guías, suelo ser muy mecánico en este proceso, crear un árbol de directorios parecido siempre y guardar los archivos comprimidos, lo recomiendo, no ocupan mucho yen alguna ocasión nos pueden salvar la vida (por ejemplo si borramos o modificamos por accidente un archivo y tenemos que reemplazarlo con el original, en la misma versión y revisión, dato que puede que no recordemos exactamente).
$ mkdir -p ~/www/owncloud.miservidor.com/tarballs
$ mkdir -p ~/www/owncloud.miservidor.com/logs
$ chgrp www-data logs
$ chmod g+w logs
Como vemos, no creamos todavía www, ya lo haremos luego cuando tengamos todo descargado. Opcionalmente creamos un directorio para los logs de Apache sobre este proyecto y damos permisos al grupo www-data (generalmente utilizado para el servidor) para poder escribir en el directorio. Si nuestra distribución, o nuestra configuración utiliza otro grupo para el servidor, debemos darle permisos al grupo correspondiente.
Ahora vamos al directorio tarballs y descargamos la última versión de ownCloud (en el momento de la escritura del artículo, la 8.2, pero podemos verlo aquí):
$ wget https://download.owncloud.org/community/owncloud-8.2.0.tar.bz2
$ tar xvjf owncloud-8.2.0.tar.bz2
$ # Como todo se habrá descomprimido en el directorio owncloud
$ mv owncloud ../www
Permisos en directorios
ownCloud debe poder escribir en los directorios de datos y de configuración. Mucha gente preferirá hacer un:
dentro del directorio de ownCloud, pero, personalmente no lo recomiendo. Soy un poco más paranoico con la seguridad, en su lugar, prefiero dar permisos sólo a los directorios que hace falta y sólo dar permisos al grupo del proceso Apache. En realidad podemos crear un grupo especial donde tengamos al usuario de administración (no root) que utilicemos y al usuario de Apache, pero eso ya es liar las cosas un poco para esta guía.
Lo que haremos será crear el directorio data y dar permisos de escritura para el grupo www-data tanto a data como a config y apps y sus contenidos:
$ mkdir apps
# Como root, o con sudo delante
# chgrp -R www-data apps config data
# chmod -R g+w apps config data
Creando base de datos
En esta guía lo instalaremos en un servidor MySQL (aunque sería compatible con MariaDB), para ello, crearemos un schema o base de datos en nuestro servidor, un usuario y le asignaremos una contraseña (si tenemos varias aplicaciones conviviendo en el servidor es conveniente que cada una tenga un usuario diferente). En este caso, la base de datos será MyCloud, el usuario clouder y la contraseña será generada (podemos generar contraseñas fácilmente con pwgen.
Así que, para crear estos elementos, podemos hacerlo desde un phpMyAdmin que tengamos instalado o desde consola, accediendo como root a mySQL:
$ mysql -uroot -p
> CREATE SCHEMA MyCloud;
Query OK, 1 row affected (0.00 sec)> GRANT ALL PRIVILEGES ON MyCloud.* TO 'clouder'@'localhost' IDENTIFIED BY 'qEf0 Query OK, 0 rows affected (0.00 sec)
En este ejemplo, suponemos que la base de datos estará en el mismo servidor que la web. En el caso en el que no sea así, es decir, tengamos la base de datos en otro servidor, en lugar de 'clouder'@'localhost' debemos poner 'clouder'@'hostweb' o 'clouder'@'%' para poder acceder desde cualquier host. En lugar de hostweb, también podemos poner la IP del servidor web. En este caso, es el servidor web el que va a acceder a la base de datos, por lo que la base de datos comprueba de dónde viene la petición.
Creando el VirtualHost
Aunque más adelante profundizaremos en la seguridad, en principio vamos a crear un VirtualHost más sencillo, con el que podremos acceder desde ya al servicio y configurarlo.
Para ello, debemos crear (como root) un nuevo archivo llamado /etc/apache2/sites-available/owncloud.miservidor.com (si usamos Apache 2.4 el archivo deberá llamarse /etc/apache2/sites-available/owncloud.miservidor.com.conf) y la sintaxis será ligeramente diferente. El contenido del archivo deberá ser algo así:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName owncloud.miservidor.com
DocumentRoot /home/cloud/www/owncloud.miservidor.com/www
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /home/cloud/www/owncloud.miservidor.com/www/>
Options Indexes FollowSymLinks MultiViews +ExecCGI
AllowOverride All
# En Apache 2.4 estas dos líneas se cambiarán por
# Require all granted
Order allow,deny
allow from all
</Directory>
# Logs esto es opcional
ErrorLog "/home/cloud/www/owncloud.miservidor.com/logs/error.log"
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog "/home/cloud/www/owncloud.miservidor.com/logs/access.log" vhost_combined
</VirtualHost>
Tu VirtualHost, por supuesto, puede ser mucho más grande, para especificar el intérprete PHP a utilizar, configurar módulos de seguridad (ya veremos algo más tarde), etc. Pero esto es lo básico. En lugar de empezar un archivo desde cero, podemos también copiar el archivo default que veremos en el mismo directorio (/etc/apache2/sites-available/)
Una vez hecho esto, sólo queda activar el sitio y recargar la configuración del servidor (como root):
# a2ensite owncloud.miservidor.com
# service apache2 reload
También es necesario tener activado el módulo Mod Rewrite de Apache:
# a2enmod rewrite
# service apache2 restart
Nota: Si tu Linux usa systemd deberás hacer:
# systemctl restart httpd.service
Ahora, para tener acceso al software, debemos tener la dirección preparada. Esta puede ser un dominio o subdominio que tengamos contratado, o una red privada, como puede ser una red en casa. En el caso de tener un dominio, o subdominio, tenemos que entrar en el panel de control de nuestro dominio (con el proveedor con el que tengamos contratado) y editar las DNS para introducir como dirección de tipo A, la IP de nuestro servidor. Este proceso suele tardar un tiempo, dependiendo del estado de la red, en qué puntos del planeta estén el servidor y estés tú, de con quién tengamos contratado el dominio, y de la extensión del mismo. Puede variar entre unos segundos y hasta 72h. En este tiempo, este cambio que hemos hecho en nuestro dominio debe propagarse entre todos los servidores web del mundo o, al menos el servidor al que conecta tu ordenador para averiguar esa dirección IP. (Nota, según mi experiencia, el más rápido en propagar es el DNS de GoDaddy, el de DigitalOcean le sigue de cerca, aunque ahí no podemos contratar dominios, es sólo DNS, luego está el de CloudFlare y por la cola, es decir, los más lentos, con una diferencia de varias horas, 1&1)
En el caso en el que sea un servidor de casa, o incluso que estemos esperando que la dirección se propague y queremos empezar a configurar ya, podemos editar el archivo hosts de cada uno de los ordenadores que vayan a tener acceso.
En archivo hosts tiene una localización distinta dependiendo del sistema operativo en el que estemos:
- En Linux, y muchos sistemas Unix estará localizado en /etc/hosts
- En Windows, lo tendremos en C:\Windows\System32\drivers\etc\hosts
- En Mac y en iPhone, en /private/etc/hosts
- En Android, /system/etc/hosts
Siempre necesitaremos privilegios especiales para modificar estos archivos, en ellos, debemos introducir la siguiente línea:
xxx.xxx.xxx.xxx owncloud.miservidor.com
Donde xxx.xxx.xxx.xxx es la dirección IP del equipo que tiene el software instalado.
Ya podemos entrar en http://owncloud.miservidor.com y empezar a trabajar.
Configuración básica
Al acceder al servidor, si todo va bien, veremos una pantalla como la que tenemos aquí. Donde podemos crear un usuario administrador para nuestro ownCloud, nos pregunta sobre la localización del archivo de datos (/home/cloud/www/owncloud.miservidor.com/www/data/ aunque la imagen diga lo contrario) y sobre la configuración de base de datos que, por defecto selecciona SQLite, pero aquí debemos seleccionar MySQL/MariaDB donde nos preguntará por el usuario/contraseña/base de datos y host de nuestro servidor de base de datos.
Ya estamos listos para empezar a trabajar con nuestra nueva nube privada. En el siguiente artículo de la serie trataremos parte de la configuración básica, aplicaciones y usuarios.
Fotos: Lim Changwon (Unsplash), Anthony DELANOIX (Unsplash)