Instalar y configurar MediaGoblin | Algo de Linux

lunes, 17 de marzo de 2014

Instalar y configurar MediaGoblin

Uno de los problemas que solemos tener habitualmente en los centros es la dificultad para reproducir contenidos multimedia alojados en plataformas como YouTube, Vimeo, etc... en muchas ocasiones motivado porque no se dispone de suficiente ancho de banda para todos los usuarios y servicios que se están utilizando a la vez. Para salvar estas dificultades, en ocasiones los usuarios recurren a almacenar sus contenidos en dispositivos externos como discos duros o pendrives USB. 

Mediagoblin es la plataforma web de software libre diseñada para alojar y compartir archivos multimedia que he escogido para solventar este problema. 



Con Mediagoblin creamos una serie de usuarios con permisos para subir contenidos tales como:
  • imágenes.
  • vídeos.
  • audios.
  • pdf.
Naturalmente, dependiendo del uso que le déis a la plataforma, es posible permitir a los usuarios registrarse, además de usar ldap o incluso oauth.

De este modo, los usuarios registrados podrán subir sus propios contenidos a la plataforma de una manera muy sencilla y organizarlos en colecciones y disponer de ellos cuando los necesiten de una forma interna en la red del centro. 

Una de las ventajas de esta plataforma es que cualquier usuario registrado puede añadir contenidos de otro a sus colecciones, con lo que no duplicamos la subida de archivos que se usen comúnmente. Además, cualquier usuario no registrado podrá visualizar los contenidos.

La pega que tiene es que no resulta sencillo de instalar porque no hay paquetes de instalación y es necesario hacerlo desde el código fuente mediante git. 

Así que dejo aquí el procedimiento que he seguido para instalarlo paso a paso:

Instalación.-

1.- Instalamos git:
# apt-get install git 

2.- Instalamos algunas dependencias necesarias: 
# apt-get install python python-dev python-lxml python-imaging python-virtualenv

3.- Mediagoblin usa PostgreSQL como base de datos, así que lo instalamos:
# apt-get install postgresql postgresql-client python-psycopg2

4.- Nos logueamos con el usuario postgres para crear un usuario y la B.D:
# su postgres

5.- Ahora, con el usuario postgres, creamos el usuario de la B.D. Le llamáis por ejemplo: mediagoblin (qué original):
$ createuser mediagoblin

6.- Nos hará tres preguntas. Se entiende bien cada una de ellas. Respondemos que no a las tres:
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) n

7.- A continuación creamos la B.D. donde se van a guardar todos los datos de mediagoblin:
$ createdb -E UNICODE -O mediagoblin mediagoblin

8.- Y para terminar con esta parte, abandonamos el usuario postgres:
$ exit

9.- A continuación, como administrador creamos una cuenta de usuario de sistema sin privilegios:
# adduser --shell /bin/bash --system --group mediagoblin

10.- Aunque es posible usar apache, Mediagoblin está pensado para usar por defecto nginx como servidor web, así que, para no complicarnos, haremos la configuración con nginx. Creamos un directorio para la plataforma /srv/mediagoblin.valledeljerte3:

# mkdir /srv/mediagoblin.valledeljerte3

11.- Asignamos como propietario y grupo al usuario mediagoblin:
# chown -hR mediagoblin:mediagoblin /srv/mediagoblin.valledeljerte3

12.- Nos identificamos con el usuario mediagoblin y dentro de la carpeta donde vamos a alojar el servidor, descargamos el proyecto mediante git:
# su mediagoblin
$ cd /srv/mediagoblin.valledeljerte3
$ git clone git://gitorious.org/mediagoblin/mediagoblin.git
$ cd mediagoblin
$ git submodule init && git submodule update 

13.- A continuación instalamos todos los recursos python que la aplicación va a necesitar:
$ (virtualenv --system-site-packages . || virtualenv .) && ./bin/python setup.py develop

14.- Por último, estando dentro del directorio mediagoblin.valledeljerte3/mediagoblin, instalamos flup:
$ ./bin/easy_install flup

Y si todo ha ido bien, habremos instalado Mediagoblin. El siguiente paso será configurarlo.

Configuración.-

Partimos de que nos encontramos situados dentro del directorio de Mediagoblin, concretamente dentro de /srv/mediagoblin.valledeljerte3/mediagoblin.

1.- Copiamos mediagoblin.ini a mediagoblin_local.ini:
$ cp mediagoblin.ini mediagoblin_local.ini

2.- Editamos mediagoblin_local.ini:

Descomentamos la línea:
# sql_engine = postgresql:///mediagoblin

Cambiamos el mail por uno nuestro:
email_sender_address = "notice@mediagoblin.example.org"

Desactivamos el envío de notificaciones de email en modo debug:
email_debug_mode = false

Desactivamos el registro de usuarios porque no queremos registro automático de usuarios:
allow_registration = false

3.- Copiamos paste.ini a paste_local.ini:
$ cp paste.ini paste_local.ini:

4.- Ejecutamos el siguiente comando para actualizar las bases de datos de Mediagoblin:
$ bin/gmg dbupdate

Comprobación de que funciona.-

Bien, pues ahora que la instalación está completa, comprobamos que nuestro sitio funciona, ejecutando:
$ ./lazyserver.sh --server-name=broadcast

A continuación, abrimos un navegador y nos conectamos al servidor en la siguiente dirección:
http://mediagoblin.valledeljerte3:6453

Si nuestro sistema está bien instalado, se abrirá la interfaz de Mediagoblin.

Configuración de Mediagoblin con nginx y FastCGI.-

Como hemos visto en el apartado anterior, Mediagoblin nos proporciona un servidor web, aunque nos dicen que este servidor es más bien para realizar testeos y no es adecuado para mantener un servidor en producción, por lo que nos recomiendan usar Nginx o Apache.

Veamos cómo instalar y configurar nuestro servidor con Nginx.

1.- Lo primero de todo será instalar nginx:
# apt-get install nginx

2.- Una vez instalado, creamos un archivo para el servidor mediagoblin en /etc/nginx/sites-available con el siguiente contenido:
cat /etc/nginx/sites-available
server {
 #################################################
 # Stock useful config options, but ignore them :)
 #################################################
 include /etc/nginx/mime.types;

 autoindex off;
 default_type  application/octet-stream;
 sendfile on;

 # Gzip
 gzip on;
 gzip_min_length 1024;
 gzip_buffers 4 32k;
 gzip_types text/plain application/x-javascript text/javascript text/xml text/css;

 #####################################
 # Mounting MediaGoblin stuff
 # This is the section you should read
 #####################################

 # Change this to update the upload size limit for your users
 client_max_body_size 8m;

 # prevent attacks (someone uploading a .txt file that the browser
 # interprets as an HTML file, etc.)
 add_header X-Content-Type-Options nosniff;

 server_name mediagoblin.valledeljerte3;
 access_log /var/log/nginx/mediagoblin.valledeljerte3.access.log;
 error_log /var/log/nginx/mediagoblin.valledeljerte3.error.log;

 # MediaGoblin's stock static files: CSS, JS, etc.
 location /mgoblin_static/ {
    alias /srv/mediagoblin.example.org/mediagoblin/mediagoblin/static/;
 }

 # Instance specific media:
 location /mgoblin_media/ {
    alias /srv/mediagoblin.example.org/mediagoblin/user_dev/media/public/;
 }

 # Theme static files (usually symlinked in)
 location /theme_static/ {
    alias /srv/mediagoblin.example.org/mediagoblin/user_dev/theme_static/;
 }

 # Plugin static files (usually symlinked in)
 location /plugin_static/ {
    alias /srv/mediagoblin.example.org/mediagoblin/user_dev/plugin_static/;
 }

 # Mounting MediaGoblin itself via FastCGI.
 location / {
    fastcgi_pass 127.0.0.1:26543;
    include /etc/nginx/fastcgi_params;

    # our understanding vs nginx's handling of script_name vs
    # path_info don't match :)
    fastcgi_param PATH_INFO $fastcgi_script_name;
    fastcgi_param SCRIPT_NAME "";
 }
}

En este fichero, cambiamos mediagoblin.example.org por nuestro nombre de dominio. En mi caso: mediagoblin.valledeljerte3.

3.- A continuación creamos un enlace en /etc/nginx/sites-enabled para activar el sitio:
# ln -s /etc/nginx/sites-available/nginx.conf /etc/nginx/sites-enabled/

4.- Por último, reiniciamos nginx:
# /etc/init.d/nginx restart

Y listo. Con ésto ya habremos terminado de configurar nginx para servir la aplicación Mediagoblin.

Activando medios.-

Bien. Ahora que tenemos nuestro sitio recién configurado, veréis que tan sólo os permite subir imágenes. Como nosotros también queremos poder subir vídeos, audios y archivos pdf, vamos a configurar el servidor para activar este tipo de medios.

Activando videos.-

1.- Siguiendo las instrucciones del manual de Mediagoblin, instalamos los paquetes de gstreamer:
# apt-get install python-gst0.10 \
    gstreamer0.10-plugins-base \
    gstreamer0.10-plugins-bad \
    gstreamer0.10-plugins-good \
    gstreamer0.10-plugins-ugly \
    gstreamer0.10-ffmpeg

2.- Añadimos [[mediagoblin.media_types.video]] a la sección [plugins] de nuestro fichero /srv/mediagoblin.valledeljerte3/mediagoblin/mediagoblin_local.ini

3.- Ejecutamos:
# su mediagoblin
$ cd /srv/mediagoblin.valledeljerte3/mediagoblin
$ ./bin/gmg dbupdate

4.- Iniciamos el servidor de pruebas:
$ ./lazyserver.sh --server-name=broadcast

5.- A continuación, abrimos un navegador y nos conectamos al servidor en la siguiente dirección:
http://mediagoblin.valledeljerte3:6453

Con ésto, ya deberíamos poder subir videos a Mediagoblin.

Activando audios && ascii art.-

1.- Siguiendo las instrucciones del manual de Mediagoblin, instalamos los paquetes de gstreamer:
# apt-get install python-gst0.10 \
    gstreamer0.10-plugins-base \
    gstreamer0.10-plugins-bad \
    gstreamer0.10-plugins-good \
    gstreamer0.10-plugins-ugly \
    gstreamer0.10-ffmpeg \
    python-numpy \
    python-scipy

Algunos de ellos ya se encuentran instalados, si seguimos los pasos del apartado anterior para activar el video, y, por tanto, sólo se instalarán python-numpy y python-scipy.

2.- Instalamos también los paquetes libsndfile1-dev y libasound2-dev:
# apt-get install libsndfile1-dev libasound2-dev

3.- A continuación, haciendo uso de easy_install:
$ cd /srv/mediagoblin.valledeljerte3/mediagoblin
$ ./bin/easy_install chardet
$ ./bin/easy_install scikits.audiolab
$ ./bin/easy_install mock

3.- Ejecutamos:
$ ./bin/gmg dbupdate

4.- Iniciamos el servidor de pruebas:
$ ./lazyserver.sh --server-name=broadcast

5.- A continuación, abrimos un navegador y nos conectamos al servidor en la siguiente dirección:
http://mediagoblin.valledeljerte3:6453

Con ésto, ya deberíamos poder subir audios y ascii art a Mediagoblin.

Activando pdf.-

1.- Según dice el manual de Mediagoblin, para poder mostrar archivos pdf es necesario disponer de pdftocairo y pdfinfo. Por lo tanto, en Debian tendremos que instalar el paquete poppler-utils:
# apt-get install poppler-utils

2.- También necesitamos el paquete unoconv para convertir documentos:
# apt-get install unoconv

3.- A continuación, para instalar el módulo pdf.js ejecutamos:
$ cd /srv/mediagoblin.valledeljerte3/mediagoblin
$ git submodule init
$ git submodule update

Si tenéis cualquier problema, también es posible descargar el módulo pdf.js manualmente desde la web de desarrollo:
https://github.com/mozilla/pdf.js/archive/master.zip

Y descomprimirlo directamente en:
/srv/mediagoblin.valledeljerte3/mediagoblin/mediagoblin/static/extlib/

Se creará una carpeta pdf.js dentro de este directorio

Si tenemos algún problema con el procesamiento de pdf's debemos mirar en ese directorio.

4.- Añadimos [[mediagoblin.media_types.pdf]] en la seción [plugins] de nuestro archivo de configuración mediagoblin_local.ini.

5.- Ejecutamos:
$ cd /srv/mediagoblin.valledeljerte3/mediagoblin
$ ./bin/gmg dbupdate

6.- Iniciamos el servidor de pruebas:
$ ./lazyserver.sh --server-name=broadcast

7.- A continuación, abrimos un navegador y nos conectamos al servidor en la siguiente dirección:
http://mediagoblin.valledeljerte3:6453

Y con ésto, deberíamos poder subir archivos pdf a nuestro servidor Mediagoblin.

Gestión de usuarios.-

En nuestra instalación, he desactivado el registro automático de usuarios por razones de seguridad y controlar quién puede subir vídeos. En este caso, solamente el administrador podrá crear cuentas usando la herramienta gmg:

$ cd /srv/mediagoblin.valledeljerte3/mediagoblin/
$ ./bin/gmg adduser

Este script nos preguntará el nombre del usuario, su password y su e-mail para crear la cuenta.

Si queremos crear el usuario de una vez, podemos especificar sus datos mediante parámetros:
$ ./bin/gmg adduser -u <usuario> -p <contraseña> -e <email>

Para convertir un usuario en administrador, también usaremos gmg:
$ cd /srv/mediagoblin.valledeljerte3/mediagoblin/
$ ./bin/gmg makeadmin 

Para cambiar el password de un usuario, lo haremos de la siguiente manera:
$ cd /srv/mediagoblin.valledeljerte3/mediagoblin/
$ ./bin/gmg changepw  



Observaciones.-

CUIDADO CON LOS PERMISOS!!!
Hay que tener mucho cuidado con los permisos. Los archivos del servidor se almacenan en /srv/mediagoblin.valledeljerte3/mediagoblin/user_dev/

En mi caso, por algún error, el directorio user_dev tenía permisos 700 y era propiedad de mediagoblin:mediagoblin  Para solucionarlo, he dado permisos 755 y listo.


PACIENCIA AL SUBIR CONTENIDOS!!!
Cuando subimos contenidos de archivos grandes, puede que tardemos un poco en poder verlos añadidos. Esto es porque requiere un procesamiento, que se tarda en realizar. Para comprobar el estado de subida de un archivo no tenemos más que entrar en el "Panel de procesamiento de contenido" del usuario. Allí veremos básicamente tres categorías:

* El contenido que se está procesando.
* Los archivos que no pudieron ser procesados.
* Los 10 últimos envíos exitosos.

Publicado por primera vez en http://enavas.blogspot.com.es

2 comentarios:

Anónimo dijo...

Sólo quería darte las gracias. Le he dado vueltas al tema para solucionar el mismo problema y me acabas de dar la solución y completamente detallada.

Anónimo dijo...

Muchas gracias!! Ha quedado todo clarísimo