Esta pagina se ve mejor con JavaScript habilitado

ownCloud, tu propia nube

 ·   ·  ☕ 8 minutos lectura  ·  🦎 Odair

El almacenamiento en la nube

Almacenar nuestros archivos en uno o varios servidores en internet no es algo reciente; muchos recordamos las buenas épocas del MegaUpload, que creció exponencialmente de manos del negocio de la piratería de contenido multimedia, sin embargo, su esencia era simple y legítima “guarda tus archivos donde no se te pierdan”. ¿Y quién no ha sufrido de pérdida de información por no tener un backup confiable?

Ciertamente la motivación principal para tener almacenamiento en la nube fue prevenir la pérdida de información por fallas en tus copias locales, como sabes, cualquier golpe o fallo eléctrico en tus unidades de almacenamiento puede causar la tan temida pérdida; incluso, algunos clics u órdenes descuidadas te pueden hacer perder tu preciada información. A pesar de esto, las características adicionales que el almacenamiento en la nube puede proveer, han cobrado mayor importancia que el simple hecho de tener un backup remoto, como lo son, la posibilidad de compartir y colaborar con archivos, acceder a un historial de versiones, y hoy en día, poder almacenar aplicaciones que corren sobre dichos servicios de almacenamiento.

El rebelde del vecindario

Con un mercado dominado por soluciones como Dropbox, Mega, Google Drive y Microsoft OneDrive, entre otros; ownCloud irrumpe como una solución que corre tanto en tu propia infraestructura, ya sea local, remota o como IaaS, así como en los mismos servidores de ownCloud con un servicio de pago que a partir de los 25 usuarios se hace más económico que otras alternativas. Sin embargo, la opción que nos trae aquí es ownCloud Community, que instalaremos en nuestra propia infraestructura basada en servidores virtuales Ubuntu Server 18.04 virtualizados con hypervisor KVM. La lista de requerimientos y de infraestructura soportada la puedes encontrar aquí.

Requisitos previos

Ya que este es esencialmente un servicio de almacenamiento, con lo primero que debes contar es con un sistema físico para tal cosa. Este sistema puede estar en una nube como IaaS (servidores virtuales por ejemplo), puede tener un NAS asociado, o simplemente un servidor local conectado a tu proveedor de internet. Las posibilidades son variadas y cada una trae sus beneficios y falencias; pero en general, será tu infraestructura actual, tu presupuesto y tus necedades lo que definirá la configuración del hardware. De lo que no podrás escapar es de la necesidad de usar discos SSD tanto para el almacenamiento como para la base de datos, ya que los discos mecánicos pueden reducir el desempeño de ownCloud sustancialmente.

Configuración para un sólo servidor

Este es la opción más popular en la comunidad, pero debes saber que si deseas autenticar usuarios mediante LDAP o ActiveDirectory, necesitarás un servidor alterno.

También necesitarás un registro A en tu administrador de dominios, apuntando a la dirección ip pública del servidor que alojará el ownCloud. Para esta instalación hemos escogido el nombre cloud.example.com, podrás usar el subdomio que se ajuste a tus gustos o necesidades; lo menciono porque muchas guías indican que el subdomio debe ser owncloud, pero no es necesario. De hecho, esta guía difiere un poco de la guía oficial, ya que usamos una configuración de servidor virtual de Apache un poco más estándar.

Software requerido

Deberás tener instalado en tu servidor el siguiente software:

  • Apache2 con libapache2-mod-php
  • Mysql Server ó MariaDB
  • OpenSSL
  • PHP 7.4 o mayor, con los módulos: php-imagick php-common php-curl php-gd php-imap php-intl php-json php-mbstring php-mysql php-ssh2 php-xml php-zip php-intl php-apcu php-redis
  • Redis Server
  • Wget

Eso será suficiente.

Nota: ownCloud también puede ser desplegado en un contenedor de Docker, las instrucciones están aquí.

Preparando la instalación en Ubuntu 18.04 Server LTS

El primer paso será tener nuestro sistema actualizado:

1
sudo apt update && sudo apt upgrade -y

Ahora instalemos los paquetes necesarios:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
~:$ sudo apt install -y \
  apache2 \
  libapache2-mod-php \
  mysql-server \
  openssl \
  php-imagick php-common php-curl \
  php-gd php-imap php-intl \
  php-json php-mbstring php-mysql \
  php-ssh2 php-xml php-zip php-intl \
  php-apcu php-redis redis-server \
  wget

Nota: si la instalación de redis-server falla, es posible que tu no uses IPV6, por lo que es necesario editar su configuración en ‘/etc/redis/redis.conf’, para indicarle que no use el loopback de IPV6, esto es, quitando el ::1 de la siguiente línea: bind 127.0.0.1 ::1, quedando así: bind 127.0.0.1. Guardas el archivo, reinicias el servicio con sudo systemctl restart redis-server y arreglas la instalación con sudo apt -f install.

Habiendo instalado los paquetes necesarios, requerirás configurar MySql, revisa el aparte de la guía sobre Matomo dónde explico cómo.

ownCloud viene con un comando que facilita las tareas de instalación y mantenimiento, por lo que es conveniente crear el script para que lo ejecute de manera global en el sistema. Vamos a crearlo:

1
sudo nano /usr/local/bin/occ
1
2
3
4
5
6
7
FILE="/usr/local/bin/occ"
/bin/cat <<EOM >$FILE
#! /bin/bash

cd /var/www/cloud.example.com/public_html
sudo -u www-data /usr/bin/php /var/www/cloud.example.com/public_html/occ "\$@"
EOM

Nota: cloud.example.com/public_html será el directorio dentro del servidor apache, el cual podrás nombrar como lo prefieras.

Ahora hay que darle permiso de ejecución al script.

1
sudo chmod +x /usr/local/bin/occ

Ahora creemos el servidor virtual dentro de Apache:

1
2
sudo mkdir -p /var/www/cloud.example.com/public_html \
sudo nano /etc/apache2/sites-available/cloud.example.com.conf
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
<VirtualHost *:80>
   ServerAdmin admin@example.com
   DocumentRoot /var/www/cloud.example.com/public_html/
   ServerName cloud.example.com
   ErrorLog ${APACHE_LOG_DIR}/cloud-error.log
   CustomLog ${APACHE_LOG_DIR}/cloud-access.log common

   Alias /cloud "/var/www/cloud.example.com/public_html/"

   <Directory /var/www/cloud.example.com/public_html/>
      Options +FollowSymlinks
      AllowOverride All

      <IfModule mod_dav.c>
         Dav off
      </IfModule>

      SetEnv HOME /var/www/cloud.example.com/public_html
      SetEnv HTTP_HOME /var/www/cloud.example.com/public_html
   </Directory>

</VirtualHost>

Ahora hay que activar la configuración y recargar el Apache:

1
sudo a2ensite cloud.example.com.conf && sudo systemctl reload apache2

Asegúrate de tener los módulos de apache necesarios cargados, si faltare alguno por ser cargado, reinicia el apache:

1
sudo a2enmod dir env headers mime rewrite setenvif

Es hora de crear la base de datos de MySql:

1
mysql -u root -p
1
2
CREATE DATABASE IF NOT EXISTS owncloud;
GRANT ALL PRIVILEGES ON owncloud.* TO admin@localhost;

Aquí, el usuario admin será el que hayas creado en la configuración de MySql y el 'password' será el que le hayas asignado en dicho paso. A su vez, la contraseña que te pedirá el intérprete de mysql será la que hayas asignado para el usuario root.

Puedes ejecutar el siguiente comando para verificar que la DB se haya creado correctamente:

1
mysql -u root -p -e "SHOW DATABASES;"

Descarga e Instalación

Puedes configurar los repositorios para Ubuntu de ownCloud, o puedes seguir con esta instalación manual así:

1
2
wget https://download.owncloud.org/community/owncloud-10.6.0.tar.bz2 \
tar xvjf owncloud-10.6.0.tar.bz2

Nota: asegúrate de obtener la última versión en el sitio de descargas de ownCloud.

Ahora vamos a mover todos los archivos descargados al directorio raíz del servidor virtual creado anteriormente:

1
sudo mv owncloud/* /var/www/cloud.example.com/public_html/

Necesitarás darle permisos al usuario www-data para acceder a este directorio y sus archivos:

1
sudo chown -R www-data:www-data /var/www/cloud.example.com/

Ya está todo listo para la instalación, ejecuta el comando occ de la siguiente forma:

1
sudo occ maintenance:install --database "mysql" --database-name "owncloud" --database-user "admin" --database-pass "pass_del_usuario_mysql" --admin-user "admin" --admin-pass "pass_del_admin"

Donde --database-user será el usuario de la base de datos definido en los pasos anteriores con su respectivo password, mientras que el --admin-user será un nuevo usuario que se creará dentro de dicha DB con su respectivo password.

Si todo sale bien, verás el siguiente mensaje:

1
ownCloud was successfully installed

De lo contrario, el script te informará sobre algún paquete que hiciere falta o algún error de tu configuración.

Configuración

Ahora vamos a configurar los dominios confiables, que será la URL que debiste haber configurado al principio. En caso de no tener un dominio, puedes usar directamente tu ip pública. Deberás ver la siguiente salida >:

1
2
sudo occ config:system:set trusted_domains 1 --value="cloud.example.com"
>: System config value trusted_domains => 1 set to string cloud.centrodepensamiento.org

Nota: se pueden añadir más URL y direcciones ip confiables, sólo debes cambiar el número 1 a 2 y así sucesivamente.

Ahora vamos a crear una configuración de cron que ejecute el system:cron de ownCloud cada 15 minutos. Primero, configuremos el cron de ownCloud en modo background.

1
sudo occ background:cron

Ahora escribamos un nuevo archivo de cron para el usuario www-data y cambiemos sus permisos:

1
echo "*/15  *  *  *  * /var/www/cloud.example.com/public_html/occ system:cron" | sudo tee /var/spool/cron/crontabs/www-data
1
2
sudo chown www-data:crontab /var/spool/cron/crontabs/www-data
sudo chmod 0600 /var/spool/cron/crontabs/www-data

Nota: un comando a la vez.

Sólo nos falta un par de cosas, una de ellas es configurar la caché y el bloqueo de archivos, verás las respectivas salidas de cada comando:

1
2
sudo occ config:system:set memcache.local --value '\OC\Memcache\APCu'
>: System config value memcache.local set to string \OC\Memcache\APCu
1
2
sudo occ config:system:set memcache.locking --value '\OC\Memcache\Redis'
>: System config value memcache.locking set to string \OC\Memcache\Redis
1
2
sudo occ config:system:set redis --value '{"host": "127.0.0.1", "port": "6379"}' --type json
>: System config value redis set to json {"host": "127.0.0.1", "port": "6379"}

Seguido a esto, crearemos una configuración de rotación del log para al llegar a 10MB sea almacenado y comprimido, así se evita tener logs inmanejables.

1
sudo nano /etc/logrotate.d/owncloud
1
2
3
4
5
6
7
8
/var/www/cloud.example.com/public_html/data/owncloud.log {
  size 10M
  rotate 12
  copytruncate
  missingok
  compress
  compresscmd /bin/gzip
}

Agreguemos un paso adicional, vamos a usar el Certbot para obtener el certificado de nuestro nuevo dominio, si no has configurado Certbot para que puedas usar certificados de Let’s Encrypt, te recomiendo esta guía:

1
sudo certbot -d cloud.example.com

Con esto ya puedes acceder a https://cloud.example.com, verás la pantalla de inicio de sesión y podrás iniciar con el usuario administrador recién creado.

ownCloud Login
ownCloud: Inicio de sesión

La pantalla de bienvenida te propondrá la instalación de las aplicaciones de escritorio y móviles, con lo que tu suite quedará completa.

ownCloud Apps
ownCloud: Apps de ownCloud

Además, no olvides pasar por la tienda de ownCloud, recuerda que también puedes almacenar aplicaciones; a lo mejor te antojas de algo.

Espero que te sirva esta guía, si tienes dudas no olvides dejar tus comentarios.

compartir en

Odair Trujillo
Escrito por
Odair
Software Developer