Después de probar sin éxito el almacenamiento de objetos de IBM Cloud con el plugin de Almacenamiento Externo de Nextcloud, he buscado otras alternativas, y parece que si queremos aprovechar esos 25GB gratis que nos ofrecen, no queda otra que montar el bucket con Fuse y decirle a Nextcloud que use un punto de montaje local.
Esto implica renunciar a ciertas comodidades. La primera es que requiere una configuración bastante avanzada en el servidor, lo que dificulta mucho la puesta en funcionamiento del almacenamiento. La otra comodidad es que no podemos permitir a otros usuarios que no sean administradores en Nextcloud crear puntos de montaje locales.
La herramienta que mejor parece funcionar es s3fs, que además viene por defecto en los repositorios de muchas distribuciones. Así que lo primero que hacemos es instalarlo. En Debian/Ubuntu hacemos lo siguiente:
sudo apt install s3fs
Lo siguiente es configurar las credenciales. S3FS permite usar un fichero de configuración personalizado por cada punto de montaje, así que vamos a crearnos uno en una ruta (por ejemplo /opt/ibm-s3fs
), y después copiamos las credenciales como ACCESS_KEY_ID:SECRET_ACCESS_KEY
. En el artículo anterior sale cómo conseguirlas en IBM Cloud. Con este comando lo podemos hacer rápidamente, si no, siempre está la opción de abrir un editor de textos como vim
o nano
y escribirlo a mano:
echo ACCESS_KEY_ID:SECRET_ACCESS_KEY > /opt/ibm-s3fs
Después es requisito imprescindible darle permisos de lectura sólo al usuario que consumirá el bucket. En nuestro caso será solamente el usuario www-data
, con el grupo del mismo nombre.
chown www-data:www-data /opt/ibm-s3fs
chmod 600 /opt/ibm-s3fs
Ahora crearemos la ruta de montaje, igualmente le daremos permisos al usuario www-data
:
mkdir /mnt/ibm_mount
chown www-data:www-data /mnt/ibm_mount
Y el último paso en la configuración del servidor es ejecutar el servicio s3fs como un servicio de Systemd, que nos facilitará la gestión del proceso en segundo plano. Antes de escribir nuestro fichero, debemos tener a mano los siguientes parámetros
- Nombre del bucket (por ej.
mi_ibm_bucket
) - Ruta de montaje (que acabamos de crear)
- Ruta al fichero de credenciales (creado anteriormente)
- Ruta del endpoint S3 (por ej.
s3.eu-fr.cloud-object-storage.appdomain.cloud
)
Ahora que tenemos todo esto localizado, escribimos en el archivo /etc/systemd/system/s3-ibmcloud.service
el siguiente contenido. Asegúrate de sustituir los parámetros por los que te correspondan:
[Unit]
Description=S3FS - IBMCloud
After=network.target
[Service]
User=www-data
Group=www-data
ExecStart=s3fs mi_ibm_bucket /mnt/ibm_mount -o passwd_file=/opt/ibm-s3fs -o url=https://s3.eu-fr.cloud-object-storage.appdomain.cloud/ -o allow_other -o use_path_request_style -f
Restart=always
[Install]
WantedBy=multi-user.target
Es importante fijarse en que en este caso, el comando acaba con un argumento -f
. Esto nos permite que el comando ejecutado no lance un hilo dedicado en background y devuelva el control a la misma terminal, sino que quedará «bloqueado» mientras que el punto de montaje esté activo.
Nos queda un paso previo, y es hacer que fuse nos deje usar el parámetro -o allow_other
. Es sencillo, abrimos el fichero /etc/fuse.conf
y añadimos al final la siguiente línea.
user_allow_other
Como punto final, para poner en marcha este servicio solo debemos poner estos dos comandos. En el segundo, pone enable
, y significa que es un servicio que se iniciará junto con la máquina.
systemctl start s3-ibmcloud
systemctl enable s3-ibmcloud
A partir de ahora sólo tenemos que añadirlo en Nextcloud. Navegamos a Ajustes > Administración > Almacenamiento externo y añadimos el punto de montaje que hemos configurado con el tipo Local. Insisto en que este tipo de almacenamiento sólo se podrá configurar siendo administrador, ya que permitir hacer lo mismo a usuarios no administradores significaría meterse en problemas de seguridad por razones triviales, que quedan como ejercicio al lector.
Asegúrate de guardarlo pulsando en el tick de la derecha y comprueba si tienes acceso desde la aplicación de archivos.
PD: En la sección de ejemplos de s3fs es posible ver algunos comandos que nos facilitarán la vida en caso de que algo falle. Os recomiendo que lo primero que hagáis es habilitar las opciones de debug
.
Un saludo!