Instalando MediaGoblin

¿Que es MediaGoblin?

MediaGoblin es una plataforma de software libre que busca la descentralizacion de contenidos multimedia y que se presenta como alternativa a servicios de publicación privados como flickr,youtube. Lo que ha día de hoy es una manera excelente de librarse de servicios privativos de publicación multimedia existentes totalmente centralizados y auditados por gobiernos y agencias de espionaje.

Instalacion en Debian jessie

Partimos de una instalacion limpia de debian Jessie, en anteriores versiones de debian he tenido problemas para instalarlo, por problemas de dependencias de pip y python por lo que recomiendo usar esta version para no tener problemas.

Instalamos las dependecias de python requeridas

 apt-get install git-core python python-dev python-lxml \
    python-imaging python-virtualenv npm nodejs-legacy automake \
    nginx

Instalamos postgresql(tambien se puede usar sqlite)

 apt-get install postgresql postgresql-client python-psycopg2

Creamos nuestra base de datos dentro de postgresql

su - postgres
createuser -A -D mediagoblin
createdb -E UNICODE -O mediagoblin mediagoblin

Creamos una cuenta en el sistema y le damos los permisos necesarios

useradd -c "Cuenta MediaGoblin" -d /var/lib/mediagoblin -m -r -g www-data mediagoblin

Creamos un grupo para añadir al usuario

groupadd mediagoblin && sudo usermod --append -G mediagoblin mediagoblin

Como la cuenta que hemos creado no tiene password para logearnos usamos el siguiente comando

su mediagoblin -s /bin/bash (este comando es muy importante porque necesitaremos para entrar como usuario mediagoblin en el virtualenv y instalar y configurar cosillas)

Creamos un directorio de trabajo para Mediagoblin(crea el directorio en la carpeta que quieres el path es solo de ejemplo

mkdir -p /srv/mediagoblin.prueba && sudo chown -hR mediagoblin:www-data /srv/mediagoblin.prueba

Ahora instalamos MediaGoblin en nuestro virtualenv

Descargamos la ultima version(0.9.0) desde git

git clone git://git.savannah.gnu.org/mediagoblin.git -b stable

Actualizamos los repositorios

 git submodule init && git submodule update

Configuramos y compilamos el software

./bootstrap.sh && ./configure && make

Creamos un directorio para subir los archivos multimedia

 mkdir user_dev && chmod 750 user_dev

Activamos FastCGI

./bin/easy_install flup==1.0.3.dev-20110405(para python2)

Terminamos la instalación actualizando el virtualenv

Configuracion

Creamos una copia de los archivos originales para no dañarlos

cp -av mediagoblin.ini mediagoblin_local.ini && cp -av paste.ini paste_local.ini

Editamos el fichero de configuración mediagoblin_local.ini y descomentamos la linea de postgresql

postgresql

Actualizamos la base de datos

./bin/gmg dbupdate

Testeamos

 ./lazyserver.sh --server-name=broadcast

para ver que todo funciona lanzamos http://mediagoblin.prueba:6453 en nuestro browser

Si todo ha ido bien salimos de nuestro virtualenv con exit y seguimos con la instalacion/configuracion de nginx

Instalacion nginx

Aunque mediagoblin trae un servidor web por defecto, es evidente que no es lo mas recomendable para sitios en produccion por lo que vamos a configurarlo en nginx creando un archivo nginx.conf con la siguiente estructura

    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.example.org www.mediagoblin.example.org;
 access_log /var/log/nginx/mediagoblin.example.access.log;
 error_log /var/log/nginx/mediagoblin.example.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 "";
 }
}

Creamos un enlace simbolico

 ln -s /srv/mediagoblin.prueba/nginx.conf /etc/nginx/sites-enabled/

Iniciamos mediagoblin

cd /srv/mediagoblin.prueba/mediagoblin/
su mediagoblin -s /bin/bash
./lazyserver.sh --server-name=fcgi fcgi_host=127.0.0.1 fcgi_port=26543

mediagoblin_login

Como no tenemos usuario creamos uno y listo

cd /srv/mediagoblin.prueba/mediagoblin/
./bin/gmg adduser

8 Comments

  1. Poco se de mediagoblin.

    Pero he leído que están los servidores federados (no es mesh puro).

    Y me surgen preguntas:
    ¿Cómo se comunican entre ellos?
    ¿Cómo se validan entre ellos?
    ¿Cómo ves el contenido de un server en otro server?
    ¿Qué sucede cuando un server se cae?

Leave a Reply

Your email address will not be published. Required fields are marked *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax