Este artículo pretende ser una pequeña ayuda para aquellos interesados en instalar una implementación del archiconocido Menéame.
Aunque lo publico aquí como referencia, puedes verlo en contexto (con el diseño original de Menéame) en la siguiente url que he preparado para la ocasión:
http://www.noticias-y-actualidad.com/instalacion.php
-
Situándonos en contexto
Menéame es una aplicación web de código abierto basada en PHP/MySQL que te permite enviar una historia que será revisada por todos y será promovida, o no, a la página principal. Cuando un usuario envía una noticia ésta queda en la cola de pendientes hasta que reúne los votos suficientes por parte de otros usuarios para ser promovida a su categoría correspondiente, o incluso a la página principal, creando un sistema de noticias gestionado por los propios usuarios, que son quienes juzgan y deciden qué es relevante y qué no.
El desarrollador principal es Ricardo Galli (http://mnm.uib.es/gallir/), colaborando con él Benjamí Villoslada (http://weblog.bitassa.net/) y Guillem Cantallops (http://cantallops.net/)
- Página principal (y la mejor de las demos) del proyecto: http://www.meneame.net
- Wiki de desarrollo: http://meneame.wikispaces.com/
- Código fuente del proyecto: http://meneame.net/archives/meneame-src.tgz
- Licencia: http://meneame.net/COPYING
- Licencia de los gráficos: http://creativecommons.org/licenses/by-sa/2.5/
- En caso de querer conservar la tipografia de Menéame,TTF Steinem, se puede descargar de la web de Pedro Reina (http://apostrophiclab.pedroreina.net/0097-Steinem/steinem.html) tras comprobar su licencia (http://apostrophiclab.pedroreina.net/info.html).
-
¿ Quien puede y quien no puede instalar Menéame ?
La respuesta corta es cualquiera, el proyecto es open source y puede ser instalado por cualquiera que cumpla las normas recogidas en la licencia…
La respuesta práctica es un poco más compleja, al menos en esta fase del desarrollo (peta, que no beta)
La instalación de Menéame está dirigida por ahora a programadores o personas con conocimiento de, al menos, PHP y MySQL. Un mínimo de conocimientos de crontab (http://en.wikipedia.org/wiki/Crontab , en inglés – http://es.wikipedia.org/wiki/Cron_%28unix%29 , en español de España) son útiles si pretendes instalar el script como entorno de pruebas, para entornos de «producción» se tornan cuasi imprescindibles, como explicaremos más adelante.
Ante todo quiero indicar que aquí no voy a daros ninguna fórmula de la coca-cola para acabar con un sitio único y perfecto que pueda ser utilizado desde ya. Este tutorial se va a limitar a indicarte como instalar el software, configurar la BD, etc… para obtener un precioso sitio vacio y con similar layout a meneame.net
-
Veamos los ingredientes… martillo, destornillador, broca del ocho…
Para que puedas (y otros puedan) meneártela, vas a necesitar:
- Un servidor web (En principio cualquiera sirve, Apache, LighHTTPD, etc…)
- Un servidor MySQL (Al menos versión 3.23.23, donde se empezó a implementar MySQL FullText search, 4.0.1 si usas búsquedas Boolean. Este artículo ha sido testeado sobre MySQL 4.1)
- Soporte para PHP (Versión sin confirmar, este artículo ha sido testeado sobre PHP 4.3.11)
- Soporte cliente de acceso a MySQL desde PHP (Versión sin confirmar, este artículo ha sido testeado sobre la versión 3.23.58 – En principio si cumples lo anterior, ni te preocupes por esto)
- Soporte GD para PHP (Se utiliza en las imágenes de confirmación en varias partes de la web, para evitar el uso de programas automatizados que podrían hacer spam de noticias de forma indiscriminada – Versión sin confirmar, este artículo ha sido testeado sobre la versión 2.0.28 compatible)
Si tienes dudas sobre si cumples alguna de estas condiciones, crea un fichero info.php (tienes uno ya creado en el código de meneame) y escribe en el la linea: <?php phpinfo(); ?> , súbelo a tu servidor y carga en el navegador http://www.tuservidor.com/info.php , te dará información extendida de varios de estos requerimientos que, por básicos y obvios, dejaremos en este punto.
Ah, casi lo olvidaba, a mi me ayudó en este proyecto el disponer también de:
- UltraEdit, para editar ficheros en formato UTF-8 de forma nativa
- Un poco de Paciencia (No demasiada)
- Seis tazas de café negro
- Un paquete de Ducados
-
Manos a la obra, esto está chupado
Antes de nada descomprimiremos el fichero meneame-src.tgz para tener a mano los ficheros que componen el sistema.
- Linux: tar -xvf meneame-src.tgz
- Windows: Descomprimir con winrar (http://www.rarlabs.com), nos generará un fichero meneame-src sin extensión, lo renombramos a .rar o .zip (da lo mismo) y lo descomprimimos con winrar a su vez… etvoilá
Esto nos generará dos carpetas, www y scripts.
- La carpeta www es la parte pública del sitio, contiene toda la estructura de archivos php, css, imágenes, etc, que hacen funcionar el menéame. Obviamente, debemos subirlo a nuestro sitio web. En este tutorial, y a partir de ahora, el sitio web será http://www.noticias-y-actualidad.com
- La carpeta scripts es un conjunto de utilidades que deben ser ejecutadas cada X tiempo para actualizar y hacer moverse el contenido de nuestro menéame particular. A su vez, generan unos archivos de log que pueden ser de utilidad por medio de la API (Si! Tiene hasta una rudimentaria API!) de menéame. Aunque estos scripts podrían hacerse privados en cualquier carpeta del sitio web, por comodidad vamos a incluirlos en nuestro ejemplo dentro de la carpeta /scripts de nuestro servidor, en la forma http://www.noticias-y-actualidad.com/scripts
Pero no lo haremos todavía… antes necesitamos unos pequeños pasos previos, unas caricias, un… «precalentamiento»
-
Creación de la base de datos
Lo primero es crear una base de datos donde almacenar el contenido de nuestro menéame. Casi todos los hostings te proveen para ello de un panel de control privado, una implementación de phpMyAdmin, etc… si no sabes crear una base de datos, vende tu alma a tu administrador de sistemas o, mejor todavía, no sigas leyendo esta guía.
En nuestro ejemplo crearemos la base de datos NOMBRE_DE_LA_BASE_DE_DATOS, con usuario de acceso USUARIO_DE_LA_BD y contraseña PASSWORD_DE_LA_BD. Cada user en su home, y root en la de todos, que dicen.
Una vez creada, necesitaremos una estructura de tablas, esto nos lo facilita menéame por medio de un fichero meneame.sql dentro de la carpeta /archives . Este fichero contiene una secuencia de instrucciones SQL que debemos ejecutar para recrear la susodicha estructura de tablas. Ojo aquí a la configuración y el juego de caracteres de nuestro servidor MySQL, si meneame.sql nos da problemas, probad a jugar con los valores de las primeras lineas. Asi que creamos las tablas :
- Por medio de nuestro panel de control del hosting
- Por medio de shell situándonos en la carpeta /archives y usando el comando mysql -uUSUARIO_DE_LA_BD -pPASSWORD_DE_LA_BD NOMBRE_DE_LA_BASE_DE_DATOS < meneame.sql
- Pagando a algún chupasangres para que lo haga por nosotros
-
Cirugía y Configuración
Antes de proceder a modificar los ficheros de configuración, recomiendo (de nuevo) el uso de UltraEdit o similar para trabajar en formato UTF-8 directamente (usuarios de Linux, ni caso a esta parte), o en su defecto abrir los ficheros con notepad y, antes de realizar ningún cambio, guardarlos en el susodicho formato UTF-8 antes de continuar.
El primer fichero que podriamos modificar sería el config.php que encontraremos en la carpeta www . Sin embargo, Ricardo ha previsto un sistema de actualización sencillo, al menos para esta parte. El script config.php busca en su misma carpeta un hostname-local.php con directrices de configuración, es decir, que podemos crearnos, siempre siguiendo los valores del ejemplo mencionado anteriormente, un www.noticias-y-actualidad.com-local.php que contenga nuestra configuración personalizada, sin tocar para nada el código de menéame. ¿ Y esto para qué ? Pues para que cuando salga la próxima versión, en principio podamos simplemente descargarla y subirla al servidor machacando la anterior sin perder por ello nuestra configuración personal.
Asi que en nuestro ejemplo creamos el fichero www.noticias-y-actualidad.com-local.php y lo rellenamos con las siguientes directrices de configuración:
[php]
$server_name = $_SERVER[‘SERVER_NAME’];
// El script detecta automáticamente nuestra url, no es necesario editarlo$dbname=»NOMBRE_DE_LA_BASE_DE_DATOS»;
// Ni lo explico$dbuser=»USUARIO_DE_LA_BD»;
// Lo mismo$dbpassword=»PASSWORD_DE_LA_BD»;
// Idem$dblang = ‘es’;
// Futuras funcionalidades? Especifica el idioma del entorno, español por defecto$page_size = 30;
// Noticias por página$anonnymous_vote = true;
// Los anónimos pueden votar ? true/false$external_ads = true;
//$globals[‘external_ads’] = false;
// Se admiten banners externos? true/false$globals[‘tags’] = ‘tecnologia, internet, cultura, software libre, linux, open source’;
// Futuras funcionalidades? No tengo ni idea de para qué sirve esto :)$globals[‘time_enabled_votes’] = 864000; // 10 dias
// Las noticias más antiguas de $globals[‘time_enabled_votes’] dias no pueden ser ya votadas$globals[‘mysql_persistent’] = true;
// Usar conexiones persistentes al servidor MySQL? true/false
// Ojo a esto si va a ser un sitio con mucho tráfico//$globals[‘redirect_feedburner’] = false;
// Redirigir a Feedburner? true/false$globals[‘min_karma_for_comments’] = 0;
// Karma mínimo necesario para comentar$globals[‘do_gravatars’] = true;
// Utilizar el servicio de avatares de gravatars en nuestro menéame? true/false)$anon_to_user_votes = 3;
// La relación máxima de votos de usuarios anónimos vs registrados en 1 hora,
// es decir, en este ejemplo puede haber un máximo del triple de votos anónimos
// que de usuarios registrados por hora, cuando se supere ésto no se permitirá
// votar a los anónimos hasta que el porcentaje baje a niveles aceptables.$site_key = 12345679;
// Futuras funcionalidades? No tengo ni idea de para qué sirve esto :)$anon_karma = 4;
// Karma por defecto para los usuarios anónimos[/php]
Recomiendo tambien crear un noticias-y-actualidad.com-local.php sin las www en el nombre y con el mismo contenido para evitar que no se lea nuestra configuración adicional si alguien nos enlaza a noticias-y-actualidad.com en lugar de a www.noticias-y-actualidad.com
Y con esto y un sufflé… nuestro menéame debería estar listo para su primer pase de largo, asi que accedemos a http://www.noticias-y-actualidad.com/ y comprobamos que todo carga perfectamente… aunque es un todo un poco «descafeinado»… ya que se encuentra completamente vacío.
-
Menéame y El Teorema del caos
Es hora de organizar un poco la aparciencia de nuestro menéame:
- Administrador
Lo primero es crear un usuario administrador, para ello nos registraremos utilizando el enlace de nuestro flamante meneame y, una vez confirmado el email, entraremos en nuestro gestor de MySQL (PHPMyAdmin o el que sea que utilizeis) y modificaremos nuestro usuario en la tabla users fijando su user_level a god (dios) ¿ Para qué ? Pues no tengo ni idea, pero seguro que tener un usuario administrador sirve de algo en el futuro, por ahora, si esperabais una sección de administración desde la que controlar vuestro menéame… lamento decepcionaros… no existe. Asi que por ahora a hacerlo todo a mano, como los hombres de verdad. Una pequeña reseña de los campos de la ficha de usuario:
- user_id: identificador único de usuario, autonumérico, se rellena sólo, ni lo toques
- user_login: el login de usuario que escogiste al darte de alta
- user_level: el nivel del usuario, por ahora no lo tiene demasiado en cuenta, pon tu usuario en level god para el futuro, el resto por ahora en normal
- user_modification: fecha de la última modificación del usuario, por ahora no es necesario que lo toques
- user_date: fecha de alta del usuario, idem de lo mismo
- user_validated_date: fecha en que el usuario validó su cuenta de correo, idem de lo mismo
- user_ip: tu ip de usuario, que no toques, hombre de dios…
- user_pass: tu contraseña, encriptada para evitar miradas curiosas
- user_email: el email con que te diste de alta en el sistema
- user_names: tu nombre real (o no), que puedes modificar desde tu ficha de menéame
- user_lang: por defecto, si vas a usar español, no lo toques, déjalo en 1, si no pon el id que corresponda en la tabla languages, que además tendrás que rellenar.
- user_karma: karma de que dispone tu usuario, si ya sabes cómo funciona menéame este término te sonará, si no… bueno, usa un poco menéame antes de querer hacer un clon de algo que no sabes cómo funciona, y por ahora déjalo como está.
- user_url: la url de tu página web/club de fans/buscador preferido… una url… la que tu quieras (no olvides los http://, por dios…)
- Categorías
Tras la creación de nuestro usuario administrador, toca generar nuestras categorías. Para ello iremos a la tabla categories e iremos insertando registros. Aquí no es necesario que nos preocupemos por el orden, ya que menéame se encargará de ordenarlas el solito por orden alfabético. Los campos a rellenar son:
- category__auto_id: No lo relleneis, se rellenará automágicamente, y es el identificador único de esta categoría
- category_lang: dejadlo siempre como es, en el futuro será el nombre de las categorías en instalaciones multiidioma
- category_id: identificador único de esta categoría para este idioma, rellenadlo consecutivamente, por ejemplo 1 Tecnologia, 2 Ciencia, 3 Friki… etc…
- category_parent: categoría padre a la que pertenece esta categoría… en principio se supone que para hacer un árbol de categorías anidadas, pero esto por ahora no funciona, podeis dejarlo todo como 0
- category_name: nombre de la categoría, siguiendo el ejemplo anterior sería: Tecnología, Ciencia, Friki… etc…
Una vez rellenado esto, y si todo ha ido bien, al navegar por el sitio veremos que la cosa ya va cogiendo forma… tenemos categorías por las que podemos navegar sin problema.
- Administrador
-
Menéalo… y ellos vendrán
Si, bueno… seguro que el bueno de Ricardo tiene en mente crear el bot de fetch automágico de noticias que además las organiza, vota, lustra y da esplendor en alguna fase más avanzada del desarrollo, pero por ahora, ajo y agua, nos toca a nosotros crear contenido para nuestro sitio, asi que…
- Anda, pulsa el enlace Enviar noticia y sigue las instrucciones paso a paso. Aconsejo dar de alta 5 o 6 noticias en este paso, y a ser posible relacionadas entre sí, luego veremos por qué.
- Cuando acabes de dar de alta tus noticias verás que, por cómo está diseñado menéame, éstas no pasan directamente a portada, sino que se quedan en el limbo de las noticias en espera de ser promocionadas. Ahora es cuando viene bien tener 3 o 4 amigos que se registren en el sistema y te ayuden a menear tus noticias, asi que ale.. al irc/msn/email de turno a recolectar usuarios que te ayuden con las pruebas, se registren y le den unos cuantos meneos a tus noticias.
-
Tras comprarte unos cuantos amigos o bajártelos de internet, y aún habiendo estos diligentemente meneado tus noticias, verás que éstas aún se resisten a aparecer en la página principal. Y te preguntas porqué. Y sudas. Y pasas miedo. Pero en vano: El sistema actualiza a tiempo real muchas cosas en la base de datos, pero no así el cálculo de qué noticias deben y cuales no aparecer en la página principal, asi como muchos otros factores. El sistema requiere que dicha actualización se realice de forma periódica (cada x tiempo) para trabajar con un conjunto de datos lo más fiables posible. Aquí es donde entran en juego los scripts que colocamos en la carpeta /scripts de nuestro menéame, y que os explicaré siguiendo el ejemplo de http://www.noticias-y-actualidad.com:
- http://www.noticias-y-actualidad.com/scripts/promote2.php?period=100 – Este es el script que se encarga de promover a la página principal las noticias que han sido lo bastante meneadas, por lo tanto, si cargamos ahora esta url, veremos que a continuación nuestras noticias (siempre que hayan recibido suficientes meneos) ya salen en la página principal, como queríamos.
- http://www.noticias-y-actualidad.com/scripts/discard.php – Este es el script que se encarga de eliminar la basura residual que se va produciendo a nivel de noticias, votos negativos, etc… en nuestro sistema, debemos correrlo de vez en cuando exactamente igual que el anterior
- http://www.noticias-y-actualidad.com/scripts/karma2.php – Este es el script que recalcula el karma de los usuarios en función de su actividad en nuestro menéame, de nuevo lo mismo, hay que correrlo de cuando en cuando.
En estos tres scripts es donde podreis retocar además el algoritmo que indica el número mínimo de meneos y karma que necesita una noticia para pasar a la página principal, los factores de pérdida o ganacia de karma, etc…
-
Mantenimiento indoloro de tu Menéame
Si bien la actualización del sistema funcionará perfectamente actualizándola tú a mano, hay partes de la misma (como el promote) que es mejor que se ejecuten en intervalos cortos de tiempo, lo que requerirá alguna forma de recargar dichas urls en períodos regulares. Para ello hay varias soluciones:
-
Cron, la recomendada La forma más cómoda y fiable de actualizar nuestro menéame es instalar en nuestro cronjob (crontab -e) (http://en.wikipedia.org/wiki/Crontab , en inglés – http://es.wikipedia.org/wiki/Cron_%28unix%29 , en español de España) las siguientes líneas de configuración, sustituyendo el ejemplo http://www.noticias-y-actualidad.com/ por vuestra propia url y /usuario/noticias-y-actualidad.com/scripts/ por la ruta interna de nuestro sistema:
- */5 * * * * wget -q -O – ‘http://www.noticias-y-actualidad.com/scripts/promote2.php?period=100’ > /usuario/noticias-y-actualidad.com/scripts/promote.log
- */37 * * * * wget -q -O – ‘http://www.noticias-y-actualidad.com/scripts/discard.php’ > /usuario/noticias-y-actualidad.com/scripts/discard.log
- 3 0,8,13 * * * wget -q -O – ‘http://www.noticias-y-actualidad.com/scripts/karma2.php’ > /usuario/noticias-y-actualidad.com/scripts/karmal.log
- 17 5 * * * /usuario/noticias-y-actualidad.com/scripts/affiliation.pl > /usuario/noticias-y-actualidad.com/scripts/affiliation.log
Estas lineas recargan los scripts de actualización de menéame en intervalos regulares, y además guardan en la carpeta /scripts el resultado de dichas actualizaciones, que podremos después cargar manualmente o por medio de nuestras propias herramientas para ver como ha ido todo (a eso me refería antes con la rudimentaria API). Una vez hecho esto, podemos dejar que la cosa funcione como debe realmente: en manos de los usuarios.
- Pseudo-cron es un sistema que, incluido en nuestras páginas web, y configurado de forma sencilla en un fichero de texto en el mismo formato que el cron habitual, comprobará en cada pageview si hay tareas pendientes, y las 3ejecutará si es así. Una solución cómoda para usuarios sin acceso shell a su servidor.http://www.bitfolge.de/pseudocron-en.html
- Contratando un sistema de cron remoto, esto es, un servicio ofrecido por una empresa que recargará cada x tiempo que tu indiques las x urls que tú indiques desde sus sistemas. (http://www.fastcron.com/ o http://www.webbasedcron.com/ por ejemplo) Barato en general. La solución para casos extremos en los que el usuario no tiene acceso shell y no se ve tampoco capaz de configurar Pseudo-cron…
-
-
Errores frecuentes (o no) al comenzar a usar tu menéame
Nada más instalar mi primera copia de menéame me puse a probar todo como un loco, al ser una fase «peta» de desarrollo esperaba encontrar bugs y pequeños problemas por todas partes, pero lo curioso es que no fue así, todo funcionaba con la máxima normalidad… salvo un par de cosas que, al final, resultaron ser problema mío.
-
Al probar el buscador, me encontré con que ninguna búsqueda, por muy exacta que fuese, me devolvía resultado alguno Para las pruebas tenía dos noticias introducidas y con meneos, ya publicadas en la página principal, una «El Google buscador es el mejor» y otra «El Yahoo buscador puede hacerlo mejor», ambas etiquetadas con la palabra común buscadores, asi que… algún resultado debía darme la búsqueda buscador, no creeis ? Pues no, y por un motivo muy sencillo: El mortor de búsqueda FullText Search de MySQL no devuelve resultados si los mismos suponen el 50% o más del total de registros. Esto evita, por ejemplo, que entre 50000 artículos, la búsqueda de la palabra por o sus deje a nuestra base de datos sobrecargada de trabajo. Es por esto que, al coincidir todas mis noticias con el término buscado, el sistema no delvolvia ningún resultado, comportamiento lógico y normal que se resolverá sólo según vayamos insertando contenido en nuestra base de datos.
-
Al pulsar en los tags de las noticias, pasaba exactamente lo mismo, aunque esta vez no me sorprendió, al hacerse las búsqueda de etiquetas por el mismo sistema de MySQL FullText Search, el problema anterior se repetía, como digo, se arregla sólo en cuanto tenemos algo de contenido en la base de datos.
-
Otra cosa que puede sorprender a los no acostumbrados a trabajar con bases de datos MySQL es que se encuentren con que no pueden realizar búsquedas de cadenas inferiores a 4 caracteres, es decir, buscar «java» funcionará pero buscar «PHP» no… esto es debido a vuestra configuración de MySQL, para definir el tamaño de la búsqueda mínima debeis retocar vuestro my.ini/my.conf/mysql.conf (http://www.mysql.com para más referencia) y agregar o editar la línea:
- ft_min_word_len=3
… y reiniciar MySQL, esto indicará al servidor que admitimos búsquedas a partir de 3 caracteres. No hagais esto a la ligera, si notais un empeoramiento en el rendimiento de vuestra base de datos, volved a dejarlo todo como estaba, ya que éste parámetro puede multiplicar el trabajo de vuestra base de datos de forma considerable.
-
Y listo… tenemos nuestra base de datos cálida y virginal, esperando a que la meneen. (uh…) Ya sólo nos queda indicarle a menéame cómo conectarse con la misma, pasándole los datos que hemos utilizado. Y eso lo haremos en la…
Y eso es todo amigos… para más información, consulta el wiki de menéame.
145 comentarios en “Instrucciones de instalación de Menéame en 10 no-tan-retorcidos pasos”