Blog WidPlay

Redirigir sin malware

Os dejo un toque de seguridad extra que hemos implantado en WidPlay y os puede venir bien a otros desarrolladores.
Una red social (o cualquier web) no solo debes intentar que sea lo más segura posible en su núcleo, si no que además debe evitar la posibilidad que desde ella sus usuarios puedan acceder a contenido infectado.
Este pequeño truco que hemos implantado en WidPlay (versión en desarrollo), utiliza un servicio de Google para verificar que la página no tiene ningún malware que pueda poner en peligro al visitante.
La idea consiste en lo siguiente: A menudo un usuario en su muro o a través de cualquiera de las múltiples APPs que dispone WidPlay puede pinchar en un enlace que hay ahí publicado. Normalmente estos enlaces los publican amigos que raramente tengan una mala intención, pero ¿Y si se da el caso de que uno tiene esa mala intención? Pues bien, el atacante si encuentra que no es vulnerable aun tiene posibilidades de infectarte, simplemente publicando un enlace que tu luego visitarás.
Y es ahí donde nosotros como plataforma entramos en juego. Lo que hacemos es que todos los enlaces hacia afuera de WidPlay pasan por un sistema de control de calidad. Este sistema pregunta a Google que piensa sobre esa web, y de ser positivo el resultado dejamos que siga, pero en caso de contener malware le cortamos el acceso impidiendo que entre y notificándole del problema, una vez más le salvamos de una catástrofe :D !
Lo bueno es que aun así muchos navegadores ya comprueban antes si es fiable o no, y con esto haces un doble muro de seguridad.
El código libre para uso
Nosotros utilizamos JQUERY 1.7.2 en la parte de Javascript. Lo que necesitamos es que a cualquier enlace que pulse valla a la pagina de verificar (en nuestro caso un script llamado url.php en la carpeta extern), para ello esto os funcionará:

       /*
           CADA ENLACE EXTERNO QUE QUIERA VER DEBE PRIMERO MIRAR SI ES UN ENLACE VIABLE
       */
       $("#widplay").on("click", "a", function(e){
       var div = $(this),
           href = div.attr("href"),
           urlVerificar = 'extern/url.php?u=' + encodeURIComponent(href);

           // Cambiamos el href al de verificar
           if(e.type == "click"){
           div.attr('href', urlVerificar).attr("hrefBack", href);
           }

           // A los 200 milisegundos cambiamos el href de nuevo
           // Para setTimeout preferimos usar el plugin para jquery doTimeout, tu si no quieres usarlo puedes poner un setTimeout normal.
           $.doTimeout(200, function(){
           div.attr('href', div.attr("hrefBack"));         
           });
       });

En la parte del script usamos una tabla simple en la base de datos con dos campos URL (varchar – 255) y MALWARE (tinyint – 1).

En el script se llama a la base de datos primero para ver si ya había sido comprobada antes y así evitar hacer llamadas tontas a Google. Si se había comprobado miramos cual era el resultado. Pero si no estaba en la base de datos llamamos a Google a la API de safebrowsing (https://developers.google.com/safe-browsing/?hl=es-ES), y si en su contenido está la palabra “malware” entonces tenemos un problema :P .
Para las llamadas se usa curl pero yo para estas cosas de curls uso una clase que publicaron en Ontuts que es muy usable: http://web.ontuts.com/tutoriales/aprendiendo-a-utilizar-la-libreria-curl-en-php/

Notar que nosotros llamamos a una clase propia nuestra, esta la usamos para comprobar que el usuario está conectado y no usan nuestro script otras páginas jejeje.

También debereís pedirle a Google una KEYAPI para este servicio, en la misma página del servicio puedes pero necesitas tener una cuenta de usuario con Google.

<?php
/******************************************************/
/***************** SAFEBROWSING ***********************/
/******************************************************/

// La clave de la API de Google SafeBrowsing
$apiKeySafe = 'xxxxxxx';
    // Comprobamos que está conectado
    require('../nuestraClase.php');
    $login = new loginWP();
    $login->check('w/');

    // Recuperamos la url
    $url = $_GET[u];
    $urlDecode = urldecode($url);

    $urlLimpia = $login->clean($urlDecode);

    // Primero miramos en la base de datos si ya teniamos un veredicto sobre esta url
    // Esto aunque pueda ser lento lo hacemos para que google no nos banee la cuenta api
    $q = mysql_query("SELECT CAMPO_MALWARE FROM tabla_urls WHERE CAMPO_URL = '$urlLimpia' LIMIT 1");
    if(mysql_num_rows($q) == 1){
    // La teniamos ya comprobada    
        if(mysql_result($q, 0) == 1){
        // Es malware
        $malware = 1;    
        }
    }else{
    // No la teniamos, sacamos el resultado
    $malware = 0;
    $urlVerificar = 'http://sb-ssl.google.com/safebrowsing/api/lookup?client=api&apikey='.$apiKeySafe.'&appver=1.0&pver=3.0&url='.$url;

        // Llamamos, libreria de ontuts (La hemos incluido nosotros en la clase nuestra, tu añádetela donde quieras)
        // http://web.ontuts.com/tutoriales/aprendiendo-a-utilizar-la-libreria-curl-en-php/
        $http = new HttpConnection();  
        $http->init();  
        $resultado = $http->get($urlVerificar, true);  // True es para que siga la redireccion que hay
        $http->close();

        if(strstr($resultado, 'malware')){
        // Tiene malware    
        $malware = 1;
        }

        // Guardamos el veredicto para esa url
        mysql_query("INSERT INTO tabla_urls VALUES ('$urlLimpia', $malware)");
    }

    // Funcion para la redireccion
    function redirigir($url){
        // Por php si no se han mandado cabezeras
        if(!headers_sent()){
        header('location: '.$url);
        exit;
        }

        // Por js si habian sido mandadas
        exit('<meta http-equiv="refresh" content="0; url='.$url.'"/>');
        return;
    }

    // Si no es malware redirijimos a esa url
    if($malware != 1){
    redirigir($urlDecode);
    }

?>
<!DOCTYPE html>
<html lang="es">
    <head>
    <meta charset="utf-8">
    <title>WidPlay - Malware detectado!!</title>
    </head>

    <body>
        <div id="malware">
            <h1>Malware detectado!!</h1>
            <p>Nuestros sistemas han detectado que la página web a la que intentas acceder puede comprometer gravemente la seguridad de tu ordenador. Te hemos bloqueado el acceso a "<em><?php echo $url; ?></em>" para que no te infectes.</p>
            <b>Un servicio de WidPlay - Velando por tu seguridad</b>
        </div>
    </body>
</html>

Puedes ver como queda para el usuario en este video


HML5 + Youtube = Widget de música más óptimo

Como ya sabéis en WidPlay se puede escuchar casi toda la música del mundo en solo 2 clicks gratuitamente. Además no solo la canción, también el videoclip, cosa que a mí personalmente le aumenta el disfrute al escuchar una canción: Escuchar una de Lynyrd Skynyrd está muy bien, pero escuchar una de Lynyrd Skynyrd mientras los ves en un directo tocando las guitarras… pfff mejora considerablemente! Eso suponía un problema, usar Flash… L

Durante este mes estamos analizando muchas técnicas que usamos actualmente en WidPlay, enrevesado siempre un poco más para ver cómo mejorar tal o cual funcionalidad y así mejorar la experiencia con ella. Nos hemos dado cuenta que el reproductor de música, cuando está reproduciendo una canción, ralentiza mucho la interfaz de WidPlay al completo, así que analizando hemos detectado la causa. Como para el videoclip utilizamos la API de Youtube del reproductor para manejar el video, esto hacia que en una de las partes usásemos algo en contra de nuestra ideología: el Flash… Algo que teníamos que tragar por cada uno de nuestros orificios… pero hasta hace poco!, que era normal porque era la única opción que existía, gracias a dios (Google todopoderoso) la tecnología avanza, y estos chicos se han adaptado al HTML5 desde hace 1 año aproximadamente con una versión funcional. Aunque en su momento la cosa era bastante experimental, hoy en día es bastante sólida y hay una forma clara de usarse, y tras aprender con ella hemos decidido implementarla, y queremos compartir como.

Bueno a ver, como casi todos os habéis dado cuenta Youtube, en su forma normal de embeder videos, ha cambiado. Ahora nos proporciona un IFRAME en vez de un embed. Esto es bueno por muchas ventajas, pero además ahora Youtube puede valorar si darte dentro de ese iframe un embed flash (si tu navegador lo soporta) o un tag <video> de HTML5 (Lógicamente lo mejor, tengas o no soporte para Flash  :D ), y el webmaster o el usuario que pone el código ya no tiene que cambiar nada sea cual sea el tipo de usuario que visite esa página.

Esta forma tiene mucho que ver con como usarlo junto a la API. Pero claro, el caso es que WidPlay ama el HTML5, no queremos dar el video en flash!, ya que consume muchos recursos, cosa más que demostrada tanto en estudios como en experiencia. Así que la idea es que sea como sea tenemos que ponerlo en HTML5, y todo ello sin perder el absoluto control de las funcionalidades de API del reproductor.

Pues bien, el truco era sencillo, pero son de esos pequeños detalles que te complican un par de horas la vida buscando por todos lados, pero sabiendo o teniendo la esperanza de que es posible hacerlo.

Al añadir un iframe normal esto deja a Youtube la decisión de si mostrarlo con o sin HTML5, o en el mejor de los casos el usuario tiene que ir a Youtube para decir que quiere siempre los videos en HTML5, con lo que se guarda en una cookie la decisión y lo tendrá así. Pero eso es una mierda, lo suyo es que siempre cargue HTML5. Y el truco es solamente poner un atributo html5=1

<iframe frameborder="0" title="YouTube video player" type="text/html" height="390" width="640" src="http://www.youtube.com/embed/JW5meKfy3fY?controls=0&html5=1&enablejsapi=1&origin=http://mysite.com"></iframe>

Si os dais cuenta también hay un atributo que se llama controls, y que está a cero. Esto es para ocultar los controles del video (Los botones de play, volumen,…) y dejarlo igual que un embed Chrome típico. Después el atributo origin puedes ponerlo para darle a Youtube esa info para las típicas estadísticas que luego da el en la página del video.

Y para poder usar la api puedes cargar el JS de la forma recomendada, asíncronamente:

<script>
 var tag = document.createElement('script');
  tag.src = "http://www.youtube.com/player_api";
 var firstScriptTag = document.getElementsByTagName('script')[0];
  firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
  </script>

Después si quieres crear un player dinámicamente por JS puedes crear tu función como desees, incluso bindeando ya eventos. Algo similar a esto valdría:

var player;
  function onYouTubePlayerAPIReady() {
 player = new YT.Player('player', {
 height: '390',
  width: '640',
  html5: 1,
  videoId: 'u1zgFlCw8Aw',
events: {
 'onReady': onPlayerReady,
 'onStateChange': onPlayerStateChange
 }
});
 }

Esta función lo que hace es que al detectar que la librería js que hemos puesto anteriormente para que cargase asíncronamente lo ha hecho correctamente creará un nuevo iframe con los atributos que hemos puesto, y creará dos eventos, con sus respectivas funciones callbacks. Una forma mucho más bonita y ordenada de poner el js ;) , aunque cada uno puede hacerlo como le venga mejor.

Esta base desarrollándola más es lo que hemos hecho para la nueva adaptación a HTML5 del reproductor de música que estará operativo en la siguiente versión de WidPlay.

Podéis ver un ejemplo en funcionamiento aquí (Usar la vista de codigo fuente para ver el js y reutilizarlo o aprenderlo)

Más info en la página para desarrolladores de Youtube


WidPlay Alpha sale a la luz

 

1 de Enero y WidPlay Alpha en la calle. Desde el minúto uno tras las campanadas, las cuentas de Alphatesters fueron activándose, y desde el minuto 2 muchos de estos empezaron ha volverse locos haciendo cosas! :D Tiene buena acojida, eso si, hay mucho que mejorar!!

¿Pero aun no sabes que es WidPlay? A ver te comento… Alrededor de Junio de 2010 dejé (yo, Leif Ferreira) todo en lo que estaba metido, todos mis proyectos personales y profesionales para empezar algo propio, como hbaia hecho siempre hasta ese momento, pero esta vez algo mucho más radical. 1 año y 5 meses después tras solo dedicarme a esto casi 12 horas diarias muchas veces (La de noches y tardes delante de código… :D ) junto a Hector Zarco que se unió en Abril de 2011, WidPlay está lista en su versión Alpha. La hemos querido llamar Alpha y no Beta por que va a ser testeada por un círculo de usuarios muy reducido bajo una invitación muy controlada, más que nada para hacer piña entre unos cuantos dispuestos ha hacer que quede algo útil para el resto.

WidPlay es una red social única (con dos sentidos: No hemos encontrado ninguna igual, y en una sola red social tienes casi todo lo que usas a diario). Más Info.

Aunque ya no es tan tan prototipo, con un diseño muy claro, presentable (aunque no soy diseñador me gusta mucho), es 100% funcional (Aunque errores lógicamente van a salir, es Alpha :P ). Creemos que muchas cosas se pueden mejorar no solo corregir fallos, de hecho a los pocos minutos de ponerla online ya están saliendo errores, pero es algo comprensible al montar todo entre un par de personas, y ni que hablar tiene de todas las cosas que faltan por sacar para la versión Beta que hay en el tintero y luego la pública… :D ESTO VA SER MUY GRANDE!! WidPlay está desarrollada para que cuando demos el visto bueno esté en todos los idiomas, y todos los países, pero de momento solo España para salir al resto bien encaminados.

Que las redes sociales han hecho el planeta más humano es innegable. Toda herramienta que ayuda a que cualquiera pueda acceder a la información que necesite sin estar manipulada, o aunque la esté poder contrastarla, opinar, a ver un documental para culturizarse sea de donde sea, a sentirse motivado con la música que le gusta para el día a día, a que las injusticias corran en segundos por todo internet,… hacen que el mundo sea mejor para todos. Ese ha sido otro motivo para dedicarle tanto tiempo a esta iniciativa, creia que podia aportar mi granito de arena, y aun lo creo. Esto tiene que ser mucho mejor.

Nuestra tarea en esta fase será mejorar el código en las funcionalidades existentes, compactando el CORE y refactorizando, tanto en servidor como usuario, y solucionar errores que se vallan notificando incluso re definiendo algunas lineas de funcionalidad si fuese necesario para mejorar la experiencia del usuario.

WidPlay está pensado para cumplir una función, no depender de tu ordenador para las funciones básicas que suele hacer una persona de mi edad en su ordenador (Música, películas, red social) y que no sea iendo de una página a otra. Que no tenga que instalarme en cada ordenador lo mismo o ir siempre a las mismas paginas, tenerlo todo en un mismo sitio y sin miles de anuncios de publicidad que me estaban volviendo loco. Seguro que no solo a mi y a mis amigos les es útil esto, así que tu también estás invitado a usarlo si lo encuentras de utilidad, eres libre, incluso si eres desarrollador libre de copiar para tus proyectos si estás haciendo algo grande y chulo :D

WidPlay ha sido desarrollado con cero euros de ayuda externa (Ni inversores, ni bancos,… Menudos son estos…), con proyectos anteriores propios ha sido subvencionado un año y medio de trabajo a duras penas :P . Así que si te sirve de motivación y estás pensando en montarte tu también algo, deja de buscar ayuda y ponte a trabajar, no merecen la pena los inversores ni cosas similares :P .

A! Repito: si encuentras algún fallo gordo (Que esperemos que no, pero para excusarnos un poco), recordarte que WidPlay ha sido ideado, diseñado, estructurado, desarrollado, … en fin, en casi su totalidad, por 2 personas, que haya comprensión :P

Así que solo queda seguir programando y haciendo las cosas como hasta ahora durante los siguientes meses por que queda mucho por seguir haciendo.

A todo esto solo añadir que en todo momento puedes aportar ideas aquí, o contactar www.widplay.org/contacto.php , que si tienes una idea (por muy idealista que sea) y crees que puede encajar en WidPlay o en nuestra filosofia de hacer algo bueno y útil para los seres humanos, aquí nos tienes (No existen límites! Solo se necesitan ganas y programar mucho, equivocarse, reprogramar…. y al final sale algo bueno, es por cojones! :D )

Cabe destacar que estos primeros dias de WidPlay están siendo realmente productivos, la gente reporta fallos, se programa sin parar, interesados que ni conozco nos contactan, Nos publican en medios… Buen camino!

Además para los más curiosos hay un RodaMap público para leer:
http://widplay.com/tracker/info/widplay-alpha-roadmap_30

Señores y señoras…. WidPlay Alpha sale a la luz!


Ahorra en servidores: Aventura como SysAdmin

22/12/2012 – Versión 1

Como prometi a la gente del foro comparto esta guía con todo aquel que pueda serle útil.

Ahorrar dinero nos gusta a todos! :D , el problema es aprender lo necesario para ahorrárselo, y aunque está claro que vamos a cometer muchísimos errores, poco a poco lo iremos haciendo mejor si de verdad le dedicamos tiempo.

Empecé en el tema de las webs hace unos 5 años con los hostings de pago, primero  con hostings compartidos muy básicos, después dedicados administrados y ahora estoy en los dedicados sin administrar con casi cero conocimientos pero con muchas ganas!

A lo mejor tú no quieres uno dedicado, no lo necesitas, entonces este no será un tutorial para ti, pero talvez ni sepas que necesitas, si es así lo primero que haremos será aclarar que existen 3 tipos de hosting normales:

Hostings Compartidos por unos 50€ al año o menos como los de banahosting.com (Servidores en USA baratos y con soporte por chat en español). Estos servidores ya llevan todo instalado para que simplemente subas tu web por FTP. Los hostings compartidos son ordenadores que se comparten con decenas o cientos de usuarios, compartiendo la memoria RAM, los recursos de la CPU,… etc con lo que para paginas “importantes” dejan que desear.

Servidores Virtuales (VPS) por unos 15€ al mes. Son servidores donde se garantizan unas condiciones mínimas, con acceso control sobre tu parte del servidor.

Servidores dedicados.  Esta es la opción que nos interesa a nosotros, sobre todo porque se trata de un ordenador al completo donde el 100% de los recursos del ordenador son para ti, donde puedes personalizarte todo. Para este tipo de servidores encontrarás dos opciones: Servidores administrados y sin administrar.

Los servidores administrados te lo dejan todo listo como en la opción del compartido, para que simplemente arrastres tu web por el FTP. Esa opción suele estar sobre los 120€/Mes con los ordenadores más básicos. Pero si te los buscas sin administrar puedes ahorrar mucho, aunque lógicamente hay que aventurarse en el mundo del SysAdmin, y para esto es este tutorial.

WidPlay necesita una maquina normal, con un Apache, PHP y MYSQL. Poco más, que el servidor sea UTF8 de pies a cabeza, con algún plugin de PHP como CURL, el mod_rewritte del Apache y algunas cosas más secretas. Pues bien, tras rebuscar he encontrado la opción de Kemsirve.es. Son servidores dedicados muy baratos, pero claro, sin administrar. ¿El problema? No tengo ni idea de cómo preparar un servidor web, pero vamos, lo que viene siendo NI IDEA. En plan que no sé ni sobre que buscar en google, pero bueno empecemos por buscar “montar servidor linux”, es lo único que se con seguridad LINUX es mejor que Windows en tema de servidores. Esperemos no sea muy doloroso…

Anteriormente pagaba 125 euros mensuales, en los últimos 2 años he gastado más de 3000 euros en alojamiento. Hacia esto porque quería el alojamiento listo sin preocuparme de nada, no tenía muchos conocimientos. Pero sabiendo algunas nociones sobre admin solo habría pagado 400 euros en esos 2 años y encima, para más recochineo y gracia del asunto, por un ordenador 3 veces mejor y que ni decir tiene que todos los conocimientos adquiridos habrían sido increíbles.

Además de los quebraderos y problemas que tenia con el servidor dedicado, pese a ser administrado, hay que dar el paso por cuidar mi bolsillo, salud y autoestima :D

Se supone que para hacer estas cosas necesitas conocimiento de Linux… buscando por internet he encontrado algunos tutoriales que me he leído por encima…

Sinceramente no se si esto saldrá bien o que peeero… Empecemos sin pensarlo un minuto!

Una cosa que al menos es buena leerse para los que no sabemos la lógica de las carpetas de Linux seria esta de Forat. Es complicado memorizarlo, y aunque sea solo como apuntes, te queda más claro todo.

Y por último en este capítulo defenderme en mis errores que puede que no sea la mejor forma de hacer las cosas, y que si encuentras algún error o forma mejor de hacerlo la compartas con todos nosotros. Que el único objetivo de hacer esta guía es por la cantidad de cosas que hay por internet (aparte de dispersas… que manda cojones), muchas no me han funcionado. Asi que espero que esta sea una buena guia para dejarte todo a punto y luego seguir investigando más.

Paso 1: Adquisición del servidor

Tras búsquedas y recomendaciones al final yo personalmente me he decidido por los servidores de OVH, que tienen una gama llamada Kemsirve algo desconocida pero realmente barata… conocida casi solo por los más entendidos. Yo no soy entendido en servidores, pero si en mi bolsillo, así que elijo esta :D

Antes que nada aclarar que con esto no te conviertes realmente en sysadmin,  o al menos no en un sysadmin como dios manda, ya que lo único que enseño aquí es lo más básico para ahorrarse dinero al montar un proyecto.  Para hacerte un sysadmin deberías dedicarle que menos que 6 meses, 12 horas diarias sin perdonar ningún día, leyendo tutoriales, manuales, haciendo pruebas,… ahí podrías empezar a llamarte sysadmin…. Así que, como ahorrarse un par de miles de euros en los primeros meses o años es clave para un proyecto, vamos a explicar cómo hacer ese primer pasó aunque sea de un modo básico.

Vale, al lio!! Lo primero será contratar el servidor.  En mi caso he seleccionado la opción básica: Kemsirve 2G. Luego he seleccionado la opción Expertos: Distribución base. ¿Experto? ¿Yo? Jajaja, Con dos cojones y para adelante. Después la distribución Ubuntu Server  11.10… Aunque me han dicho que no es la mejor versión he decidido esta mas que nada por la cantidad de tutoriales que hay entorno a ella. Rellenamos datos de contacto del formulário… seleccionamos cuanto tiempo queremos el hosting… pagamos con la tarjeta de crédito, verificamos en el email… y al rato nos van llegando correos con los detalles de como van los procesos… Finalmente tendremos el server. Así que en líneas generales lo que vamos a necesitar es:

1. Servidor Apache2
2. Soporte PHP5
3. Soporte MySQL
4. Servidor DNS Bind
5. Servidor Correo Postfix

Paso 2: Configuración básica

Una vez tengamos el aviso de que el servidor ya no lo han preparado, con los datos que nos han adjuntado, tenemos que acceder a ese ordenador. Para ello aclarar que aunque acojone un poco no vamos a tener el típico escritorio delante ni un panel de control via web ya preparado con todo…NO… y no hay que hecharse nunca atras… va a ser usando un programa similar en apariencia al MS-DOS, usaremos acceso por SSH. Para Windows podemos usar el programa PUTTY.

Pero antes que nada sería conveniente hacer lo que comentan en Moontes. Me refiero a verificar que la ip que nos han proporcionado no está en ninguna lista oficial de baneados. Esto puede pasar por que el ordenador puede que lo haya tenido anteriormente otro usuario que lo usase para hacer cosas no permitas, o no bien vistas, y por mucho que haya sido formateado, la IP del ordenador es la misma con lo que el ordenador puede que no sea aceptado por destinatarios de email, motores de google,…

Tras comprobar que está correcto (en nuestro caso todo bien pero supongo que si en tu caso algo ha salido problemático tendrás que contactar con OVH y que te den otro servidor), lo primero que vas a hacer es conectar con PUTTY, introduces la IP y puerto 22 (es el de SSH). Lo primero que te va a pedir es el usuario (root), y después la contraseña que te han asignado. Tras conectarte el servidor te da la bienvenida. Lo que tenemos ahora mismo delante es el acceso total a todo el servidor que has contratado, puedes hacer con él lo que quieras desde comandos, es un ordenador al completo tuyo.

Un buen primer paso puede ser que verifiques que lo que te han instalado es lo que pediste:

uname -a

También podemos ver la distro que tenemos instalada  poniendo:

cat /etc/issue

Lo siguiente seria cambiar a una contraseña más personal que recuerdes fácilmente, así que pon:

passwd

Además, una medida de seguridad básica inicial buena es cambiar el puerto predeterminado de escucha del ssh. Uno que queramos mayor de 1000 para no coincidir con otros servicios, para ello poner lo siguiente y editar la línea que pone Port 22 a Port XXXX

nano /etc/ssh/sshd_config

Y reiniciamos el servicio de SSH:

service ssh restart

Algo que yo me he impreso es esta hoja para empezar a memorizar comandos:

Ahora sería bueno comprobar si hay actualizaciones o cosas nuevas que actualizar en tu sistema. Lo que más me ha gustado de Linux es esto exactamente. Existen una especie de listas con programas y donde se descargan que están públicas en internet (Se llaman repositorios). Nuestro linux tiene establecido que listas usa y solamente con poner el nombre del programa se nos instala de la siguiente manera:

aptitude install nombre_del_programa

Con lo que para actualizar sabe que cosas tienes en tu ordenador y donde mirar si hay novedades. Así que ponemos los siguientes dos comandos uno tras otro:

aptitude update
aptitude dist-upgrade

Se te actualizará todo lo necesario. Pues bien, ya tendremos el ordenador listo para empezar a prepararlo como servidor web.

Paso 3: Instalando programas básicos

Antes de preparar esta guía me he cargado el servidor 6 veces, he tenido que formatear y instalar todo muchas veces, y eso me da ventaja de averiguar algunas cosas necesarias para el correcto funcionamiento. Al iniciar WidPlay ya en el nuevo servidor me di cuenta de que las imágenes no las estaba tratando bien, algunas funciones para trabajar con ellas no estaban funcionando. Tras investigar me di cuenta que las librerías GD que instalé al instalar php5 no estaban actualizadas… pequeño FAIL… Para que se instale la versión adecuada tenemos que hacer lo siguiente:

Lo primero será añadir nuevos repositorios a los oficiales:

nano /etc/apt/sources.list

y añadimos esto al principio:

deb http://packages.dotdeb.org stable all
 deb-src http://packages.dotdeb.org stable all

Actualizamos repositorios

apt-get update

Entonces ahora ya podemos instalar la librería GD y cogerá la última versión que existe.

Antes que nada instalaremos Apache2, que es la plataforma sobre la que más tarde correrá PHP y MYSQL, la que le dá al ordenador su característica de servidor web. Después instalaremos MYSQL y después el PHP. Para ello ponemos lo siguiente uno a uno:

aptitude install apache2
aptitude install mysql-server mysql-client libmysqlclient15-dev
aptitude install php5-common php5-cli php5-mcrypt libapache2-mod-php5 php5-mysql php5-gd

Si te das cuenta en la línea del MYSQL y el PHP se ponen muchas más cosas, eso es porque al mismo tiempo dices que se instalen paquetes típicos que suelen venir bien.

Puede que el servidor te diga que ya estaba un paquete instalado y que si quieres sobrescribirlo, puedes decir que sí.

Puede verse más inflo de este paso en la página de Forat

Usuarios en mysql

Es lógico que un solo usuario no va a administrar todas las bases de datos, seguramente para cada proyecto se usará un usuario, e incluso a veces usuarios con determinados permisos donde terceros puedan usar nuestras bases de datos.

En mysql, tanto para conectar, como para el servidor de correo que instalaremos más adelante será bueno crear unos usuarios con los que conectarse. En estos dos enlaces se explica más información sobre el asunto:

http://luauf.com/2008/06/26/crear-usuario-y-asignar-permisos-en-mysql/
http://dev.mysql.com/doc/refman/5.0/es/adding-users.html

A continuación te pongo una consulta sql para crear un usuario (Hay que cambiar baseDatos, usuario, password):
GRANT ALL PRIVILEGES ON baseDatos.* TO ‘usuario’@'localhost’ IDENTIFIED BY ‘password’ WITH GRANT OPTION;

Aquí explican más detenidamente la estructura de una consulta para permisos:

phpmyadmin

Nosotros como hemos visto arriba usamos MySql, Ahora lo suyo es instalar un software que nos permite administrar las bases dedatos gráficamente vía web:

aptitude install phpmyadmin

Selecciona Apache como tipo de servidor cuando te lo pida, después en la siguiente pregunta selecciona YES.

Por temas de seguridad al igual que hemos hecho con el puerto ssh, una buena medida de seguridad sería cambian la forma predeterminada de abrir el phpmyadmin (normalmente se abre poniendo xxx.xxx.xxx.xxx/phpmyadmin) a por ejemplo  xxx.xxx.xxx.xxx/base-de-datos, por poner un ejemplo… Así que para editar el fichero de configuración de urls para el apache abre:

nano /etc/apache2/sites-enabled/000-default

Si está la siguiente línea cámbiala si no añádela al final del fichero antes de </VirtualHost>:

Alias /phpmyadmin /usr/share/phpmyadmin

Cambiar a:

Alias /base-de-datos /usr/share/phpmyadmin

Luego solo toca reiniciar el servidor de apache:

/etc/init.d/apache2 restart

Paso 4: Soporte FTP

Lógicamente necesitamos un método para subir los ficheros al hosting. Para ello se instala un servicio FTP. Luego con un programa como Filezilla (Que es gratuito y muy sencillo y completo) podremos subir nuestra web. Nosotros vamos a instalar el servidor Proftpd. Además también vamos necesitar Openssl para crear conexiones cifradas, que normalmente debe haberse instalado ya como dependencia de programas anteriores, pero puedes ponerlo de todas formas (que si ya lo tienes no hará nada y simplemente lo omitirá tranquilo). Así que ponemos lo siguiente:

aptitude install proftpd openssl

Cuando nos pida el tipo de configuración dejar independiente.

Vale ya tenemos servidor FTP, ¿Sencillo no? pero hay que configurarlo un poco.

De nuevo, por razones de seguridad lo  primero  será editar el fichero de configuración y personalizarlo también un poco:

nano /etc/proftpd/proftpd.conf

Yo lo que me voy a personalizar es el serverName para no dar pistas a crackers aparte de cambiarle el puerto a alguno mayor de 1000. Tb le voy a añadir  después de denyFilter:

DefaultRoot ~
 ServerIdent on "FTP Server ready."
 AccessGrantMsg    "¡Bienvenido al FTP de WidPlay!"
 AccessDenyMsg    "¡Vete para tu casa, fuera!"

Ahora vamos a crear un certificado ssl para el tls, así podremos conectar por ftp usando una conexión segura.

mkdir /etc/proftpd/ssl

Y creamos el certificado:

openssl req -new -x509 -days 365 -nodes -out /etc/proftpd/ssl/proftpd.cert.pem -keyout /etc/proftpd/ssl/proftpd.key.pem

Nos pedirá que configuremos el certificado, lo primero el país: ES
El estado o provincia: Valencia
Localidad: Torrent
Nombre de la organización: Widplay
Seccion: Pagina web
Tu nombre: Pues eso, tu nombre…
Tu email: Lo mismo, tu email.

Ya está creado! Ahora queda habilitar el proftpd para que use el certificado, editamos el fichero de config:

nano /etc/proftpd/proftpd.conf

Y descimentamos la línea de  incluir el tls:

Include /etc/proftpd/tls.conf

Por último editamos el fichero del tls para que podamos conectar tanto sin tls como con tls, según decidamos y donde estemos. Lo mejor será guardarnos el fichero default que dan, más que nada como referencia, y crearnos uno nosotros:

mv /etc/proftpd/tls.conf /etc/proftpd/tls.confORIGINAL

Y ahora creamos el nuestro:

nano /etc/proftpd/tls.conf

Ahí pegamos lo siguiente:

<IfModule mod_tls.c>
 TLSEngine                  on
 TLSLog                     /var/log/proftpd/tls.log
 TLSProtocol                SSLv23
 TLSOptions                 NoCertRequest AllowClientRenegotiations
 TLSRSACertificateFile      /etc/proftpd/ssl/proftpd.cert.pem
 TLSRSACertificateKeyFile   /etc/proftpd/ssl/proftpd.key.pem
 TLSVerifyClient            off
 TLSRequired                off
</IfModule>

La opción “TLSRequired off” Indica que no es exactamente necesario que conectemos mediante TLS. Si no que mediante una conexión normal también podemos.

Ya está. Reiniciamos el servidor FTP.

/etc/init.d/proftpd restart

 

Ahora cuando queramos conectar con Filezilla por ejemplo en la configuración del servidor que queremos conectar podemos seleccionar en Cifrado: Requiere FTP implícito sobre TLS (Si elegiste TLS Required ON) o  explicito si pusiste OFF que es lo que nosotros pusimos. Una captura sobre donde cambiar esta opción en el Filezilla:

Ya está! Ya tenemos un servidor FTP razonablemente chulo!!
Cada vez que queramos crear cuentas para nuevos FTP es muy simple. Otra de las cosas buenas de Linux es que al crear un usuario tiene cuentas en cosas como el ftp.

 

Paso 5: Configurando nuestro primer dominio

En Apache esto de ir creando dominios nuevos se les llama virtual hosts. Para ello Apache utiliza unos ficheros donde indica la configuración cara a apache de cada sitio.

En la carpeta /etc/apache/ hay dos directorios con los que se trabaja para este asunto: sites-available y sites-enabled

En la carpeta sites-available hay un fichero llamado default con un ejemplo básico de una configuración. Ese fichero podemos usarlo como template para cada dominio. Cuando lo configuremos solo hay que decirle que habilite ese dominio. Vamos allá.

El primer paso será crear la zona donde guardar la web. Para no tener todo en la carpeta /var/www/ (Que perfectamente podría estar, pero lo más normal es que vayas a tener diferentes webs en el servidor y teniendolo todo ahi seria un lio).

Sigamos… hay que crear un usuario que gestionará  su web.  Así que imaginemos que queremos crear el dominio widplay.com y lo gestionará el usuario widplay

Por  temas de seguridad creamos una Shell (Algo así como una licencia de cosas que puede hacer en Linux ese usuario, está claro que es un usuario manejado por nosotros, pero por si queremos darle hosting a otros. ¿Que es una Shell? La shell que vamos a darle tendrá como valor /bin/false, de esta forma no podrá crackearla para coger todos los permisos del sistema.

Creamos ese tipo de licencia editando el fichero:

nano /etc/shells

Añadimos al final:

/bin/false

Ahora creamos el usuario asociándolo a esa Shell

adduser widplay

Pon el password, te creará una carpeta, ponle info detallada al usuario si quieres según te valla pidiendo. Yo lo he dejado todo vacio, presionando solo intro.

Ahora ponle la Shell que habíamos creado

chsh -s /bin/false widplay

Aunque se le haya creado automáticamente una carpeta, no tiene permisos automáticamente de poder hacer ahí lo que desee, así que tenemos que decir que esa carpeta tendrá como dueño al usuario que hemos creado, para que pueda el subir ficheros, crear carpetas,…

chown -R widplay /home/widplay/

Tras hacer esto se habrá creado una carpeta en /home/ llamada widplay. Es la carpeta de las cosas del usuario. Allí crearemos una carpeta que nos sirva para albergar el contenido, puede llamarse como se quiera, yo le llamaré public_html por los estándares que he visto en otros hostings:

mkdir /home/widplay/public_html

A continuación, debemos asegurarnos de que nuestro directorio web public_html es parte del grupo www-data de Apache:

usermod -a -G www-data widplay
chgrp -R www-data /home/widplay/public_html

Ahora se le tiene que decir al apache que cuando se pida por el dominio widplay.com  se cargue el contenido de la carpeta /home/widplay/public_html/. Con lo que hacemos esto:

cd /etc/apache2/sites-available/
nano widplay.com

Puedes ver el ejemplo que yo he usado aquí:

<VirtualHost *:80>

        # Valores generales del proyecto
        ServerAdmin webmaster@widplay.com
        ServerName www.widplay.com
        ServerAlias widplay.com *.widplay.com

        DocumentRoot /home/widplay/public_html/

        # Para hacer un registro de errores
        LogLevel warn
        ErrorLog  /home/widplay/logs/error.log
        CustomLog /home/widplay/logs/access.log combined

        # Correo
        Alias /squirrelmail /usr/share/squirrelmail

</VirtualHost>

Y ahora como hemos comentado arriba solo queda habilitar el nuevo sitio con el comando a2ensite (para que te acuerdes este comando viene de acortar las palabras Avalable to enable site que es lo que quieres hacer):

a2ensite widplay.com

Ahora creamos las carpetas de logs que hemos asignado en las líneas:

ErrorLog  /home/widplay/logs/error.log
CustomLog /home/widplay/logs/access.log combined

Así que:

mkdir /home/widplay/logs/
touch /home/widplay/logs/error.log
touch /home/widplay/logs/access.log

Probamos que apache esté bien configurado:

apache2 -S

Y reiniciamos apache2:

/etc/init.d/apache2 restart

Aclarar que AllowOverride All  dentro de <Directory …>. es para poder usar los archivos .htaccess que se puede necesitar normalmente
Para más info sobre esto buscar en google sobre “virtualhost en Ubuntu”.

Atención. Por algún motivo al poner apache2 –S me da un error (bad user name). Así que lo que hay que hacer es:

nano /etc/apache2/apache2.conf

Y modificar esto:

User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

Por esto:

User www-data
Group www-data

Atención: Como nota propia tenia apuntado lo siguiente, tal vez a alguno os sirva también, así que lo publico. Tras trastear con el servidor me di cuenta que en el archivo hosts (/etc/hosts) puse (pensando que así se cambiaba el prompt del shell)  lo siguiente:

91.121.12.95    widplay.com widplay

Con esto al parecer, al tratarse del archivo host, donde le indicas a que ip ir cuando ponen algo, le estaba diciendo que al poner widplay.com fuese a la ip (la mía del servidor). Me estaba volviendo loco por que tras configurar el virtualhost y el apache no conseguía entrar con widplay.com (sin las www) a la carpeta que le estaba indicando en el directorio sites-enabled del apache. Este era el problema parece ser.

Paso 6: Servidor DNS

Vale ahora le toca a uno de los asuntos que más me han costado. Por un lado no tenía mucha idea de que son las DNS. Sabia lo justo, que es la dirección que se pone en el dominio para que cuando alguien entra a tu dominio sepa a que servidor ir.

Tras muchas horas de prueba/error no sabiendo que configurar, leyendo muchos tutos, y lo malo de este tema es que si cambias las DNS en el dominio hasta que se replican por todo el mundo pueden tardar hasta 48 horas(Esto pasa por que en todas las bases de datos oficiales que hay por el mundo se tienen que replicar esos nuevos datos), al final he conseguido hacerlo y no era tan difícil.

La lógica de este asunto no es muy complicada: Imaginemos la empresa WidPlay y su web. Cuando un usuario pone www.widplay.com mira en las bases de datos internacionales de dominios las DNS que se le han configurado, entonces el navegador  sabe a que servidor ir para mostrar la info. Pero claro, en el servidor de WidPlay hay que configurar que cuando alguien llega preguntando por widplay.com le tiene que mostrar la carpeta X. Con lo que es necesario que ambas partes estén configuradas: tanto el dominio, como el servidor.

Básicamente se pueden configurar de dos modos:  1. Totalmente a mano, 2. Con algún panel de control instalado tipo Webmin, que es mas visual. Nosotros elegiremos la opción manual que una vez simplificado como lo voy a poner no es para tanto.

Lo primero que tenemos que tener claro es cuáles son nuestras DNS, como hemos contratado un hosting dedicado en OVH ellos te proporcionan una segunda DNS (https://www.ovh.es/servidores_dedicados/dns_secundario.xml)

Con lo que sabiendo que nuestra maquina es ks23280.kimsufi.com (Usando uname –a en la terminal nos lo dirá) las DNS son:

DNS Primaria: ks23280.kimsufi.com
DNS Secundaria: ns.kimsufi.com
Nuestra IP del server es: 91.121.12.95

Vale, ahora empecemos.

Nosotros tenemos comprado el dominio en domainsite.com, con lo que ponemos allí las DNS al dominio,  recuerda que hacen efecto los cambios de entre 24H hasta 48H. Puedes ir mirando de vez en cuando un whois a ver que DNS devuelve, de nuevo la magia de Linux, pones en el terminal:

whois widplay.com

y te muestra todo.

Mientras esto va haciendo efecto podemos ir configurando el servidor.

Empecemos

Lo primero que hay que  editar es el fichero resolv.conf:

nano /etc/resolv.conf

Y añadimos que cuando buscan widplay.com use las DNS primaria y secundaria (Hay que poner la IP, la IP de ns.kimsufi.com es  213.251.188.140):

domain widplay.com
search widplay.com
nameserver 127.0.0.1
nameserver 213.251.188.140

Luego editamos el fichero named.conf.local y quitar lo que haya.

nano /etc/bind/named.conf.local

En él tiene que quedar esto, pero lógicamente personalizado también a tu dominio.

//
 // Fichero de configuracion
 //
// La DNS primaria (NOSE SI HACE FALTA)
 zone "ns1.widplay.com" {
 type master;
 file "/etc/bind/ns1.widplay.com";
 allow-transfer {91.121.12.95; }; // Tu segunda IP
 };
 // La dns secundaria (NO SE SI HACE FALTA)
 zone "ns2.widplay.com" {
 type master;
 file "/etc/bind/ns2.widplay.com";
 };
 // La zona inversa, se usan los tres primeros bloques de la ip pero invirtiendo su sentido y poniendo al final in-addr.arpa
 zone "91.in-addr.arpa" {
 type master;
 file "/etc/bind/pri.91.in-addr.arpa";
 };
 // La zona del dominio
 zone "widplay.com" {
 type master;
 file "/etc/bind/pri.widplay.com";
 };

Guardamos.

Lo más importante aquí, o lo que más extraño puede resultar es esto: 12.121.91.in-addr.arpa Eso es para que cuando alguien entra poniendo la IP (Cosa que hacen algunos programas) sepa llegar igualmente. Para sacar eso personalizándolo con tu proyecto no es más que coger tu IP e invertir el orden de los tres primeros grupos. Ejemplo con la IP de WidPlay:

91.121.12.95 -> Se convierte en -> 95.12.121

Ahora tenemos que crear en la carpeta /etc/bind/ cada uno  de los ficheros que corresponden a cada una de las zonas a las que nombra este registro que hemos guardado, es decir:

ns1.widplay.com
ns2.widplay.com
95.in-addr.arpa
pri.widplay.com (En estas ultima aun no se por que en el ejemplo añade el atributo file redirigiendolo al fichero de la zona).

Con lo que ponemos lo siguiente:

cd /etc/bind/

La estructura de estos ficheros que vamos a crear es siempre la misma, empecemos por el primero:

nano pri.widplay.com

Y pones en ese fichero lo siguiente, y guardas:

$TTL    86400
@   IN  SOA widplay.com. root.widplay.com. (
         2011111803     ; Serial
              28800     ; Refresh
               7200     ; Retry
             604800     ; Expire
              86400 )   ; Negative Cache TTL

@                    IN      NS          ks23280.kimsufi.com.
@                    IN      NS          ns.kimsufi.com.
@                    IN      MX      0   widplay.com.
@                    IN      A           91.121.12.95
                     IN      A           91.121.12.95
mail                 IN      A           91.121.12.95
www                  IN      A           91.121.12.95
widplay              IN      CNAME       widplay.com.
widplay.com.                 TXT         "v=spf1 a mx ~all"
widplay.com.                 TXT         "v=spf1 a -all"
nano pri.95.in-addr.arpa

Y al igual que antes ponemos en ese fichero

$ttl 86400
@   IN  SOA widplay.com. root.widplay.com. (
            2011111803     ; Serial
            28800     ; Refresh
            7200     ; Retry
            604800     ; Expire
            86400 )   ; Negative Cache TTL

@               IN      NS       ks23280.kimsufi.com.
@               IN      NS       ns.kimsufi.com.
95.12.121       IN      PTR      widplay.com.

Un comando interesante para ver si tienen errores en las zonas creadas es:  named-checkzone dominio.com ruta.de.la.zona – Ejemplo: named-checkzone widplay.com pri.widplay.com

Una web para comprobar errores de dns: http://www.intodns.com/widplay.com
También podemos usar apache2 –S para sacar los sitios activados en apache.
Para desactivar sitios de apache: a2dissite default

¡Importante! También tenemos que acceder al fichero de configuración /etc/bind/named.conf o bien /etc/bind/named.conf.options , los cuales podemos editar, haciendo click en “Edit Config File”, situado en el menú principal. Una vez estemos dentro y si aparece lo siguiente:

nano /etc/bind/named.conf.options

Código:

listen-on { 127.0.0.1; };

Debemos comentarlo de esta manera:

//listen-on { 127.0.0.1; };

Finalmente reiniciamos el servicio BIND

/etc/init.d/bind9 force-reload

Para comprobar que va correctamente ponemos lo siguiente:

dig @91.121.12.95 widplay.com

Y reiniciamos el apache

/etc/init.d/apache2 restart

Enlaces para contrastar información:
http://foros.ovh.es/showthread.php?t=7433
http://foros.ovh.es/showthread.php?t=4588
http://www.itimag.com/servidores/como-configurar-el-servidor-dns-junto-a-un-dominio.html
http://www.marblestation.com/?p=543

Enlaces de ayuda
Aquí se explica que OVH da un servidor DNS para todos sus servidores:
https://www.ovh.es/servidores_dedicados/dns_secundario.xml

Para ver si los cambios DNS se han efectuado puedes ir consultando el WHOIS del dominio.
http://whois.domaintools.com/

Más info:
http://www.itimag.com/servidores/como-configurar-el-servidor-dns-junto-a-un-dominio.html

sudo /etc/resolv.conf

Como asignar 2 Ips a un ordenador para usar 2 nameserver en un mismo hosting:
http://www.itimag.com/servidores/dos-2-ip-en-un-mismo-equipo-o-servidor.html

Paso 7: Codificación

Codificación del sistema operativo

Codificación,…. Maldita codificación…. ¿Hay algo en el desarrollo que pueda molestar más? Seguramente si :P , pero esto sin duda es una de las cosas más molestas.

Una de mis principales necesidades en cuanto a servidor, más que nada porque en desarrollo lo hacemos todo bajo codificación UTF-8, era tener el servidor en UTF-8 de pies a cabeza. Solo los servidores dedicados y virtuales dejan modificar el my.cnf para indicar que lo queremos todo en UTF-8.

Debido a las necesidades de WidPlay, queremos que sea un proyecto mundial, las cosas van a estar en muchísimos idiomas, con lo que no cabe la posibilidad que en los textos puedan salir los típicos cuadritos, interrogantes, rombos,… ni pensarlo, así que el servidor tiene que ser UTF 8 de pies a cabeza.

El servidor que me han entregado en OVH al parecer da problemas, pero siguiendo este tutorial se han solventado. A mi solo con el segundo punto me ha sido suficiente, ya que al parecer lo único que faltaba era reconfigurar:

dpkg-reconfigure locales

Codificación de Apache2

Como se comenta aquí, para permitir los acentos en nuestras páginas, debemos asegurarnos que la siguiente línea aparezca des comentada aquí:

nano /etc/apache2/conf.d/charset
AddDefaultCharset       UTF-8

Una vez efectuado algún cambio de las configuraciones es conveniente resetear el servidor Apache, para ello, en una consola escribimos:

/etc/init.d/apache2 restart

Más info, y como dice ahí Armando, UTF-8 recuerda usar URF-8 siempre: Sistema operativo, IDE’s de programación, servidores, bases de datos. Aquí se explica la configuración en el IDE.

Codificación MYSQL

Si tras configurar lo anterior tenemos problemas de codificación en nuestra web y notas que es unicamente en los datos que vienen desde la base de datos, seguramente sea por que la base de datos tiene otra configuración. Sería bueno que leyeses el siguiente tutorial de Pedro Ventura que a mí me ha salvado la vida casi literalmente más de una vez.

El my.cnf tiene la configuración de MYSQL, y en nuestro servidor estaba en etc/mysql/my.cnf, así que solo poner:

nano /etc/mysql/my.cnf

Aquí poner después de [mysqld] estas líneas:

init_connect='SET NAMES utf8'
 #default-character-set=utf8
 character-set-server=utf8
 collation-server=utf8_general_ci
 skip-character-set-client-handshake

Ahora solo falta reiniciar el servicio de MYSQL:

/etc/init.d/mysql restart

Paso 8: Otros detalles importantes

Descomprimir en el servidor

La mejor forma de subir un gran proyecto a un servidor es comprimir toda la carpeta y subirla por el FTP, no es por el espacio, aunque una carpeta comprimida ocupase 100mb y los ficheros sueltos 25mb (Lo sé, es absolutamente imposible pero por poner un ejemplo radical), subiría mas rápido los 100mb, por que por el simple hecho de que ir fichero a fichero, estableciendo la conexión, pidiendo permisos,… se tarda más tiempo que la transferencia en si…

Mi fichero era un rar de 120mb, lo he subido pero necesitaba descomprimirlo, así que he instalado el unrar:

aptitude install unrar

Después solamente hemos ido a la carpeta del fichero y hemos descomprimido:

unrar -x fichero.rar

o

unrar x fichero.rar

Hay más información sobre las descompresiones rar aquí.

Tras subir todo y descomprimir, seguramente (y aun no se por que no se crean esos permisos) esas carpetas nuevas no tienen asociado como dueño a nuestro usuario (widplay) así que volvemos a poner en la consola:

chown -R widplay /home/widplay/

Aunque seguramente hay alguna forma de decírselo que lo haga automáticamente.

Mod Rewritte

Para permitir usar urls amigables es necesario instalar o activar un mod de apache. Este tutorial sencillo está bien explicado para configurarlo.

cUrl

En WidPlay sobre todo para los bots que están cojiendo información en internet que son muchos necesitamos este mod. En esta página explican correctamente como ponerlo.

Paso 9: Algo de seguridad

Fail2ban

Una de las recomendaciones que suelen comentar en muchos sitios es instalar algún sistema que pueda dejar fuera de juego ataques como los de fuerza bruta. La lógica de evitar esto supongo que a cualquiera se le puede pasar por la cabeza: Si intentas mas de X intentos en X minutos = a la puta calle!, pues si, esa es la más básica, pero hay muchas más. Y un programa que se encarga de esto es Fail2Ban.

De nuevo la terminal nos alegra el día viendo lo fácil que es instalar algo:

aptitude install fail2ban

Una vez instalado vamos a configurarlo un poquito, aunque de por sí parece que viene muy bien,… solo el tiempo nos lo dirá. Así que seguimos con la buena práctica de guardar el fichero original y editar uno nuevo

mv /etc/fail2ban/jail.conf /etc/fail2ban/jail.confORIGINAL
nano /etc/fail2ban/jail.conf

En el ponemos lo que pone aquí:

[DEFAULT]

ignoreip = 127.0.0.1
bantime = 300
maxretry = 3
backend = polling
destemail = root@localhost
action = iptables[name=%(__name__)s, port=%(port)s]
mail-whois-lines[name=%(__name__)s, dest=%(destemail)s, logpath=%(logpath)s]

[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
findtime = 600

[apache]

enabled = true
port = http
filter = apache-auth
logpath = /var/log/apache*/*access.log
maxretry = 3
findtime = 600

[apache-noscript]
enabled = true
port = http
filter = apache-noscript
logpath = /var/log/apache*/*error.log
maxretry = 3
findtime = 600

[proftpd]
enabled = true
port = ftp
filter = proftpd
logpath = /var/log/proftpd/proftpd.log
maxretry = 3
findtime = 600

Y reiniciamos el servicio jail2ban

fail2ban-client stop
fail2ban-client start

Si queréis ver que tal andamos de bloqueos podéis ver el fichero fail2ban.log que se ubica en la ruta /var/log donde se guardan todos los bloqueos, ips, fecha y hora de quien nos está atacando. Más info en www.fail2ban.org

Paso 10: Servidor de correo

Un servidor web sin servidor de correo cojea. Por ello vamos a instalar el servidor. Importante dejar en todos lados widplay.com como servidos en vez de mail.widplay.com

En este tutorial se explica de forma completa como preparar un servidor de correo completo con antivirus, antispam,…

Crear cuenta

Imaginemos que queremos crear el correo no-reply@widplay.com (que lo voy a usar como primer correo para WidPlay para que mande los mensajes de los registros), lógicamente el dominio del mail será como se puede ver widplay.com. Además queremos crear otro buzón para que todos los correos que manden que no sean contempladas en otras redirecciones (aliases) valla a la dirección all@widplay.com, así que los datos que necesitamos son:
Email que queremos: all@widplay.com
Contraseña que usaremos: elPassword

Creamos un nuevo buzon para all@widplay.com

INSERT INTO user VALUES ('all@widplay.com', ENCRYPT('elPassword'), 'WidPlay', NULL, 1);

Decimos que todos los correos vallan al buzon all@widplay.com

INSERT INTO alias VALUES ('@widplay.com', 'all@widplay.com', 1);
INSERT INTO alias VALUES ('all@widplay.com', 'all@widplay.com', 1); // Es necesario crear un alias para esa mismo buzon

Si es nuestro primer email de ese dominio, creamos el dominio widplay.com

INSERT INTO domain VALUES ('widplay.com', 'virtual:', 1);

Finalmente para que se creen las carpetas internas y que funcione el webmail necesitamos primero mandarle a esa cuenta un correo:

mailx all@widplay.com

Extras para el correo

Qshape: Sacar la cola de emails por enviar:

qshape -s hold | head

Instalar mailgraph: Script par a ver gráficos de los emails que se Mandan:
linuxsilo.net/articles/postfix-mysql.html (Buscar apartado de mailgraph) Para entrar podemos usar: xxx.xxx.xxx.xxx/mailgraph/mailgraph.cgi

Mandar mensaje desde la consola: http://support.microsoft.com/kb/153119/es

Ampliar la seguridad Fail2ban también en el correo:
Finalmente para mas seguridad en el servidor con los ataques de fuerza bruta a los puertos relacionados con el mail añadimos lo siguiente al jail2ban (explicado aquí)

nano /etc/fail2ban/jail.conf

 

[postfix]
enabled  = true
port     = smtp,ssmtp
filter   = postfix
logpath  = /var/log/mail.log
maxretry = 5

[sasl]
enabled  = true
port     = smtp,ssmtp,imap2,imap3,imaps,pop3,pop3s
filter   = sasl
logpath  = /var/log/mail.log

 

Y reiniciamos jail2ban

/etc/init.d/fail2ban restart

 

Paso 11: Estadísticas

Hay muchos sistemas para llevar el control de estadisticas de muchos aspectos de tu servidor. No obstante yo me he decantado por estos 3 que explico a continuación.

Awstats:

Puedes seguir este tutorial de Forat, pero atención a mi no me ha funcionado del todo, he tenido que modificar el último paso (donde pone: sudo nano /etc/apache2/apache2.conf Nos situamos al final del fichero e introducimos el siguiente código …) está mal o no consigo hacerlo como dice.

En vez de eso entrar al fichero /etc/apache2/sites-available/default con nano

nano /etc/apache2/sites-available/default

Y ponemos al final antes de </VirtualHost>

Alias /awstatscss /usr/share/doc/awstats/examples/css/
Alias /awstatsicons /usr/share/awstats/icon/
ScriptAlias /awstats/ /usr/lib/cgi-bin/
Alias /awstats-icon/ /usr/share/awstats/icon/

Entonces ahora sí que reiniciamos apache para que surjan efectos:

/etc/init.d/apache2 restart

Para que se actualicen automáticamente editamos los crontabs

nano /etc/crontab

y al final ponemos

30 * * * * /usr/lib/cgi-bin/awstats.pl -config=awstats.widplay.com.conf

 

Para evitar que de problemas de permisos para leer el fichero de logs tenemos que hacer lo que dicen aquí

A mí me ha bastado con poner:

chmod 755 /var/log/apache2/

Luego se entra a través de: http://xxx.xxx.xxxx.xxx/cgi-bin/awstats.pl

Visitors:
http://www.hping.org/visitors/

Usamos aptitude para instalarlo

aptitude -y install visitors
mkdir /var/www/visitors

Luego cada vez que queramos generar un informe ponemos esto:

visitors -A /var/log/apache2/access.log -o html > /var/www/visitors/index.html

Y accedemos poniendo http://xxx.xxx.xxx.xxx/visitors/

Lógicamente esto también podemos automatizarlo en un cron.

 

webalizer
Más info: http://mogaal.com/articulos/webalizer/webalizer.html

Instalamos poniendo:

aptitude install webalizer

Editamos el siguiente fichero:

nano /etc/webalizer/webalizer.conf

Y modificamos o añadimos lo siguiente:

LogFile /var/log/apache2/access.log
 OutputDir /var/www/webalizer
 Incremental yes
 ReportTitle Estidísticas de PAGINAWEB_NOMBRE
 Hostname URL_PAGINA

 

Cada vez que queramos generar un informe:

webalizer -c /etc/webalizer.conf -d

Lógicamente esto también puede automatizarse en un cron de manera sencilla. Para que esto se cree automáticamente cada día editamos el cron

nano /etc/crontab

y agregamos la siguiente línea:

0 0 * * * /usr/bin/webalizer -c /etc/webalizer.conf -d

 

Estadísticas similares a google analitycs: Piwik
A lo mejor no es muy Buena idea, ya que usa nuestras bases de datos y recursos, y mientras exista google analytics gratis puede ser mejor, pero sí que es cierto que nos hacemos dependientes de google, y si en el futuro lo hacen de pago o similar perderemos todo el historial de estadísticas, así que podemos poner los dos scripts js en el footer.

Aquí se explica paso a paso como instalarlo.

 

Monitorizar el hardware
Puede ser interesante monitorizar que tal va la memoria o el hardware de un vistazo y a través del navegador, aquí se explica como hacerlo.

 

Extras finales: Cosas útiles y pasos finales

Panel online de control del server: WEBMIN

Para facilitar muchas de las tareas de gestión del servidor hay diferentes paneles que podemos instalar. Nosotros vamos a utilizar webmin.

Lo primero es instalarnos todo lo necesario:

aptitude install perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl apt-show-versions

Después nos aseguramos de estar en el dominio inicial del servidor poniendo solamente:

cd

Ahora miramos en la web oficial de webmin cuál es la última versión para Ubuntu (Fíjate bien que coges la de UBUNTU). Ahora mismo es:

http://prdownloads.sourceforge.net/webadmin/webmin_1.570_all.deb

Así que ponemos en la terminal:

wget http://prdownloads.sourceforge.net/webadmin/webmin_1.570_all.deb

Ahora desempaquetaremos el web min:

sudo dpkg -i webmin-1.570.tar.gz

LISTO! Ya puedes entrar a través de https://tuip:10000

Si, https, y si, puerto 10000. Te pedirá que confirmes el tema del certificado, y te logueas con tu nombre de usuario root. Para cambiar el idioma pulsas en Webmin -> Webmin Configuration y luego en Languages.

php.ini

Seguramente, al igual que nosotros en WidPlay, necesitarás aumentar el tamaño de ficheros que pueden subirte al servidor, para ello tienes que editar el fichero php.ini poniendo:

nano /etc/php5/apache2/php.ini

Para WidPlay será necesario cambiar dos valores con lo que desees:

post_max_size
upload_max_filesize

También ponemos el timezone a España:

date.timezone = "Europe/Madrid"
date.default_latitude = 40.416126
date.default_longitude = -3.696706

Permisos carpetas upload

Imaginemos que tenemos una carpeta llamada media donde queremos permitir que mediante un script php se puedan guardar fichero, por ejemplo un simple upload de imagenes. Tenemos que otorgar los permisos adecuados a esa carpeta, no podemos ponerle 777 para solucionarlo rápidamente por que es un tanto inseguro.

sudo chmod -R 2755 /home/widplay/public_html/media/

Para las carpetas donde va a subirse material (Imágenes, videos, …. Cualquier cosa) se le tiene que otorgar permisos 2775. El 2 hace que sea permanente el permiso para los archivos creados en el futuro, el primer 7 da todos los permisos al usuario dueño del archivo, el segundo 7 da todos los permisos a los usuarios del grupo al cual pertenece el dueño (www-data de Apache) y el 5 indica permisos de lectura (r) y ejecución (x), pero no de escritura (w), para el resto del mundo.

Redirigir desde el dominio con www a sin www.

Yo, por mis motivos, quiero que la url de la web sea http://widplay.com y no http://www.widplay.com, si tu también lo deseas puedes mirar este pequeño tutorial

Programas interesantes

Despues de trastear con algunos programas para instalar en el servidor recomiendo estos 3.

Midnight Comander

Un programa también bueno es el midnigh commander, un programa que te permite visualmente navegar por los directorios y el aptitude.

aptitude install mc

hTop
Es como top: un visor de procesos, pero un poco mas visual y se pueden matar procesos al instante.

aptitude install htop

Y listo! Tan sencillo como eso, ahora solamente poniendo htop en la línea de comandos tendremos una visión general de nuestro ordenador con incluso la posibilidad de matar procesos, supongo que para que cuando algo se quede colgado matarlo en un segundo.

 

Monitor de actividad para MYSQL

Una aplicación similar a htop, pero para el MYSQL, mytop, que nos informa de consultas que se están ejecutando, cuales son lentas,… y al parecer un sinfín de cosas. Pues nada, vamos allí:

aptitude install mytop

Configurar my top con esto pero personalizándolo

cd /.mytop
user = widplay
pass = password
host = localhost
db = widplay
delay = 5
port = 3306
socket =
batchmode = 0
header = 1
color = 1
idle = 1

Aquí hay un tutorial para entender mytop y interfaz web.

Personalizando el prompt

El prompt, cuando conectas por ssh, siempre tiene este formato: usuario@nombre_maquina:, pero normalmente el nombre de la maquina es el que te han dado, en nuestro caso ks23280. Pero molaría mas que pusiese el nombre de tu proyecto, en nuestro caso widplay. Para hacerlo poner:

hostname WidPlay

Luego editas el fichero hostname

nano /etc/hostname

Después solo tienes que reiniciar el ordenador:

reboot

Algunos aspectos más de seguridad

En los foros de OVH hay muchos temas interesantes para leer, uno sobre extras de seguridad es este

No obstante recomiendo leer muchos más, contrastar y dedicarle muchas horas si puede ser.

Comandos útiles

Desinstalar programas: aptitude remove –purge paquete

Administrar usuarios:
http://rm-rf.es/crear-eliminar-y-modificar-usuarios-de-sistema-en-unix/

Editar passwords de usuarios: nano etc/passwd

Para saber que tienes instalado de algo: dpkg –list | grep nombre-de-algo

Saber la versión de tu sistema operativo: lsb_release -a

Ver los puertos que tenemos abiertos en el ordenador: nmap -v -sS -O localhost

Vaciar un log (Aunque la LOPD prefiere que se roten en vez de vaciar):
echo ” ” > fichero.log

Conclusión final

Realmente, tras instalar el servidor y todas sus cosas 6 veces, haberle dedicado unas 2 semanas con un mínimo de 7 horas diarias, la septima vez lo instalé todo en menos de 1 hora, con lo que la cosa ya es rápida.

Y si, es un jaleo todo lo que hay que hacer para prepararlo… pero bueno estos apuntes seguro te ayudan.

Así que ahora a seguir programando que nos estamos ahorrando un dineraaaal para destinarlo en más programación :D

Esperemos que muchos crackers no te hundan este pequeño trabajo por que yo desde el minuto 1 tenía cientos de ataques registrados en los logs de servidores chinos y rusos… O.o… jajaja esperemos no sean crueles…

Actualización 23-12-2011: Cierto es que este manual te enseña a prepararte un servidor “casero”, es decir, aunque no es casero está alojado en un datacenter, y esa parte sea profesional (Me refiero a la disponibilidad, la velocidad,…si! esos aspectos son profesionales) pero no olvidemos que la otra parte (la tuya, la del sysadmin) no lo es. Me refiero a que el hosting de este tipo te sirve para montar un hosting “básico”, pero ¿Y si en la empresa donde hemos contratado el hosting, en este caso OVH, se fastidia el disco duro? Lógicamente (como nos comenta Jaumas aqui) entre que se cambia el disco duro, se instala todo de nuevo, se restaura el backup,… pueden pasar horas… o días… vamos algo impensable para una empresa seria.

Lo correcto seria tener un sistema de discos duros en raid, y claro! con un sistema incluso de balanceo de carga para evitar caidas y algunas cosas más (pero bueno eso ya es a un nivel mucho más avanzado).

Sinceramente, los primeros meses (o incluso vida entera de un proyecto medio), no necesitas tantas complicaciones, y más cuando el dinero escasea, pero no olvidemos que son cosas a tener en cuenta cuando la cosa crece. Aunque si que es cierto también que si la cosa crece siempre puedes delegar en terceros que se encarguen de la parte del hosting (Pero eso te va a suponer volver al paso de servidor dedicado administrado, con lo que supone costes)


No os entreguéis a esos bestias

Gran escena de The Great Dictator (El Gran Dictador) que se estrenó en 1940, dirigida, escrita y protagonizada por Chaplin. La desconociamos totalmente, son ya más de 70 años, pero aun así identifica la filosofia que tenemos en WidPlay y seguro que la de muchos de vosotros. Unámonos por la libertad, también la libertad de información, y un mundo sin subnormales fanáticos y codiciosos.

 

Lo siento, pero no quiero ser emperador. No es lo mío. No quiero gobernar o conquistar a nadie. Me gustaría ayudar a todo el mundo, si fuera posible: a judíos, gentiles, negros, blancos. Todos nosotros queremos ayudarnos mutuamente. Los seres humanos somos así. Queremos vivir para la felicidad y no para la miseria ajena. No queremos odiarnos y despreciarnos mutuamente. En este mundo hay sitio para todos. Y la buena tierra es rica y puede proveer a todos.
El camino de la vida puede ser libre y bello; pero hemos perdido el camino. La avaricia ha envenenado las almas de los hombres, ha levantado en el mundo barricadas de odio, nos ha llevado al paso de la oca a la miseria y a la matanza. Hemos aumentado la velocidad. Pero nos hemos encerrado nosotros mismos dentro de ella. La maquinaria, que proporciona abundancia, nos ha dejado en la indigencia. Nuestra ciencia nos ha hecho cínicos; nuestra inteligencia, duros y faltos de sentimientos. Pensamos demasiado y sentimos demasiado poco. Más que maquinaria, necesitamos humanidad. Más que inteligencia, necesitamos amabilidad y cortesía. Sin estas cualidades, la vida será violenta y todo se perderá.
El avión y la radio nos han aproximado más. La verdadera naturaleza de estos adelantos clama por la bondad en el hombre, clama por la fraternidad universal, por la unidad de todos nosotros. Incluso ahora, mi voz está llegando a millones de seres de todo el mundo, a millones de hombres, mujeres y niños desesperados, víctimas de un sistema que tortura a los hombres y encarcela a las personas inocentes. A aquellos que puedan oírme, les digo: “No desesperéis”.
La desgracia que nos ha caído encima no es más que el paso de la avaricia, la amargura de los hombres, que temen el camino del progreso humano. El odio de los hombres pasará, y los dictadores morirán, y el poder que arrebataron al pueblo volverá al pueblo. Y mientras los hombres mueren, la libertad no perecerá jamás.
Soldados. No os entreguéis a esos bestias, que os desprecian, que os esclavizan, que gobiernan vuestras vidas; decidles lo que hay que hacer, lo que hay que pensar y lo que hay que sentir. Que os obligan a hacer la instrucción, que os tienen a media ración, que os tratan como a ganado y os utilizan como carne de cañón. No os entreguéis a esos hombres desnaturalizados, a esos hombres-máquina con inteligencia y corazones de máquina. Vosotros no sois máquinas. Sois hombres. Con el amor de la humanidad en vuestros corazones. No odiéis. Sólo aquellos que no son amados odian, los que no son amados y los desnaturalizados.
Soldados. No luchéis por la esclavitud. Luchad por la libertad. En el capítulo diecisiete de san Lucas está escrito que el reino de Dios se halla dentro del hombre, no de un hombre o de un grupo de hombres, sino de todos los hombres. En vosotros. Vosotros, el pueblo tenéis el poder, el poder de crear máquinas. El poder de crear felicidad. Vosotros, el pueblo, tenéis el poder de hacer que esta vida sea libre y bella, de hacer de esta vida una maravillosa aventura. Por tanto, en nombre de la democracia, empleemos ese poder, unámonos todos. Lucharemos por un mundo nuevo, por un mundo digno, que dará a los hombres la posibilidad de trabajar, que dará a la juventud un futuro y a los ancianos seguridad.
Prometiéndoos todo esto, las bestias han subido al poder. Pero mienten. No han cumplido esa promesa. No la cumplirán. Los dictadores se dan libertad a sí mismos, pero esclavizan al pueblo. Ahora, unámonos para liberar el mundo, para terminar con las barreras nacionales, para terminar con la codicia, con el odio y con la intolerancia. Luchemos por un mundo de la razón, un mundo en el que la ciencia y el progreso lleven la felicidad a todos nosotros. Soldados, en nombre de la democracia, unámonos.

Integrar el chat XMPP de Facebook

En WidPlay intentamos unificar todos los servicios más cotidianos de internet en un un mismo lugar. Una de las cosas que todos solemos utilizar son los chats, y nosotros queremos que en WidPlay puedas hablar con tus contactos de Facebook, Google, MSN,… desde aquí, sin instalar nada.

Tras trastear en la parte de integrar el chat de Facebook y conseguirlo creemos que ha mas de uno le puede venir bien lo que hemos conseguido: Conectar al chat con la utilización de XMPP y autorización OAUTH.

XMPP es un protocolo estandar para las comunicaciones como chats. De hecho los más grandes en internet lo utilizan. Los teléfonos moviles tienen aplicaciones nativas que usan estas funcionalidades, pero como ya sabéis nosotros odiamos las aplicaciones nativas ya que se puede hacer sin instalar nada, todo a traves de un simple navegador.

Facebook nos permite conectar con su chat de 2 metodos distintos, el primero (no recomendable) mediante usuario y contraseña: facebookId@chat.facebook.com y tu contaseña. Y por otro lado mediante su “X-FACEBOOK-PLATFORM “ (método muy recomendable) nosotros evidentemente vamos a obtar por el segundo :) .

Con esto podemos conseguir una aplicación totalmente personalizada que interactue con Facebook con toda la infinidad de posibilidades que eso conlleva en cuanto a diseño y opciones.

Bueno para conectar con el chat de Facebook necesitamos varias cosas:

1-Un cliente XMPP, yo me he decantado por la librería Strophe.js por varias razones; primero porque es javaScript (lenguaje de cliente), segundo porque tenia una buena documentación.

2- Un server BOSH que tramite las peticiones que realizamos con Strophe, esto se puede hacer de varias maneras; instalando un server XMPP local por ejemplo Punjab o usando uno externo: http://bosh.metajack.im:5280/xmpp-httpbind.

3- La madre de las librerías JavaScript: JQuery

4- Plugin facebook.js de rubenjgarciab. Agradecerle muchísimo el plugin y el soporte que me dio!

5- Una aplicación de facebook.

Al lio, una vez tengamos incluidas las 3 librerías en nuestro proyecto vamos a iniciar la conexión:

$(document).ready(function () {
var apiKey = '',
secretKey = '',
sessionKey = '',
boshServer = 'http://bosh.metajack.im:5280/xmpp-httpbind';
connection = new Strophe.Connection(boshServer);
connection.facebookConnect("idFacebookUser@chat.facebook.com",onConnect,300,1,apiKey,secretKey,sessionKey);
});

Comento un poco lo siguiente; apiKey y secretKey las tienes en tu aplicación de Facebook, onConnect es la función que se llamará en el callback de connection.facebookConnect() y por último el sessionKey es valor único por usuario con el que Facebook sabe que estamos autentificados… ¿que como se saca?, pues por ejemplo utilizando la librería JS de Facebook, con el método getLoginStatus, (te devuelve varios valores, uno de los cuales es el sessionKey). Bueno una vez hecho esto deberíamos aparecer como conectados en el chat de Facebook.

IMPORTANTE: Adjunto un ejemplo con todo lo explicado, las librerías incluidas y mucho más con el que solo tienes que introducir tus datos correctamente y funciona 100%, os recomiendo seriamente que le echéis un ojo a cómo funciona XMPP internamente es decir cómo se comunica: http://xmpp.org/rfcs/rfc3921.html. Para cualquier cosa no dudéis poneros en contacto conmigo  twitter.com/zzarcon

Descargar ejemplo


Desarrollando como toca

Desde hace años, cualquiera que ha hecho desde una página web simple a una página mucho más compleja como puede ser WidPlay, los navegadores siempre han supuesto una gran piedra en el camino. Normalmente esto suele pasar por dos motivos:

  1. Usas Internet Explorer como navegador (GRAN FALLO)
  2. Usas un navegador bueno como Safari, Firefox o Chrome pero en versiónes antiguas (Error, pero no tan grande)

Debido a que la gran mayoría de los usuarios normales tienen Windows como sistema operativo, donde además algunos no saben que es un navegador, y el navegador predeterminado de Windows es Internet Explorer, no están disfrutando de internet como toca.

¿Pero por que no hay que usar Internet Explorer o un navegador muy anticuado como navegador y por que los desarrolladores no tenemos que hacer webs con especificaciones especiales para estos navegadores? Es un producto de mala calidad, que no respeta los estándares en tiempo real (suele ir con 2/3 años de retraso y a esto hay que sumarle que un usuario bajo/medio no se cambia el navegador por miedo en otros 2/3 años). Permitiendo el acceso a webs con esos navegadores, hacemos que el usuario esté retrasado 5/6 años. Es algo que no se puede permitir, no respetan estándares como HTML5, CSS3, Canvas,… protocolos estáblecidos como estandar desde la W3C.

En los otros navegadores simplemente ha sido un pequeño descuido por parte del usuario no actualizarlo.

Como desarrollador, en todo proyecto que inicio lo he tenido claro. No hacer versiones para navegadores antiguos. Ya no solo por que no se va a ver igual cara al usuario que visita la página, sino por que (por ejemplo en WidPlay, un proyecto de última generación) no van a disfrutarlo de la misma forma.

Así que una vez más nuestra posición es tajante en cuanto a esto: Favorecer al usuario y al desarrollo en general, no dando soporte en WidPlay a navegadores antiguos.

No es que sea una cosa por capricho, desarrollar  unas semanas más para estos navegadores retrasados solo nos costaría eso, unas semanas más, pero contribuiríamos a cosas estúpidas y absurdas, y WidPlay para nada quiere entrar en esos tipos de círculos viciosos.

Así que sin miedo alguno, y sabiendo que vas a disfrutar de internet en todo su explendor, te recomendamos que te descargues uno de estos navegadores en su última versión (Es como cualquier otro programa, simplemente descarga e instala): Safari de Apple, Opera, Chrome de Google, Firefox de Mozilla.

Y a partir de ahora úsalo como navegador predeterminado.


App nativas SUCK! We ♥ HTML 5

Muchos me preguntan lo mismo: ¿WidPlay estará en dispositivos móviles? ¿Haréis aplicaciones nativas de WidPlay? La respuesta es si para la primera y no para la segunda.

Es cierto que WidPlay es una gozada tenerlo abierto en una pantalla panorámica de 24” pulgadas. Lo digo por experiencia, compré una pantalla así :P . Puedes tener muchas cosas abiertas y tener una visión “real time” de muchísimas cosas al mismo tiempo.

¿Pero qué pasará en un dispositivo móvil? Lógicamente son dispositivos  que no tienen pantallas de 24 pulgadas, en el mejor de los casos puede tener 8 pulgadas. Como es deducible, para los dispositivos móviles WidPlay reducirá algunas funcionalidades y modificará la parte visual a algo más compacto y simple. Ya estamos trabajando en ello.

El tema de la pantalla y que sea pequeña es algo inevitable por el momento, ¿Pero qué pasa con la forma de desarrollarlo? WidPlay es pro HTML5 a muerte. Pero no solo HTML5, también CSS3, JavaScript, Canvas,… tecnologías abiertas, no privativas, con posibilidades aun por descubrir.

Yo (Leif Ferreira), tanto personalmente como en representación de WidPlay, suelo ir a charlas de programación, eventos relacionados con nuevas tecnologías y especialmente el mundo digital, y en todos ellos siempre hay desarrolladores de dispositivos móviles que desarrollan para plataformas propias (Apple, Android). No entendemos como hoy en día desarrolladores hacen eso, como habiendo herramientas que no dependen de una plataforma, se cierran a una plataforma apoyando a la forma de trabajar de empresas como esas.

Cuando debato esto con amantes fervientes del móvil suelen argumentarme siempre lo mismo: “Es que desarrollando en plataformas nativas la experiencia de usuario no es la misma”, Ciertamente hace unos años podía ser, pero y si lo era hace unos años es prácticamente por lo mismo que hoy en día (aunque hoy es a menor escala debido a la estandarización progresiva del HTML5): hay desarrolladores que apoyan este tipo de prácticas, y esto hace que sea el pez que se muerde la cola. Nos referimos a que, empresas como Apple podrían dedicar todos sus millones a que sus desarrolladores hiciesen plataformas que soporten  HTML5, ¿Qué no es o era un estándar? Muy bien, sabemos el objetivo a conseguir con HTML5, Apple (y compañía) usa tus millones para que tus desarrolladores aporten al HTML5 como estándar. Pero no se hace… está claro por qué no? Dinero rápido. ¿Y si encima desarrolladores hacen aplicaciones y les funciona? Con lo que no entendemos como un desarrollador, viendo todas las posibilidades que hay entra en ese ciclo vicioso apostando más por enriquecer una compañía, que por el desarrollo y creación de formas mejores para la humanidad, que de eso es lo que se trata, hacer cosas buenas para todos los habitantes del planeta.

Y no, no hace falta que el dispositivo tenga internet para que una aplicación HTML5 corra en su móvil como cualquier otra, que de todo he escuchado.

Así que la respuesta es:

Si haremos una aplicación para dispositivos móviles, porque son increíbles las posibilidades del aspecto movilidad fusionado con WidPlay.

No haremos aplicaciones nativas. We love HTML5 (En realidad: We love todo lo que sean lenguajes libres, se llame HTML5, o Apple :P , no importa el nombre pero si la esencia)


El origen…

No son pocos los que me preguntan, cuando hablo de WidPlay, sobre su origen, sobre como fue gestado, y como puede ser que no haya nada así, con lo que para primer post del blog cuento el origen (Si no sabes que es WidPlay puedes ver www.widplay.org). Como cualquier entendido en la materia te diría: La inspiración no tiene fecha ni lugar. Tienen que tener razón estas personas, por que en este caso se vuelve a confirmar. WidPlay… me encanta este nombre! Encaja perfectamente en lo que es, y suena armonioso:

Wid: Widgets, Los “programas” que componen la suitte de aplicaciones que acompañan la red social.

Play: La acción de interactuar con estos y organizártelos al gusto.

Lo digo ya: A mis 25 años, no tengo facebook, no tengo twitter (O no tenia hasta crear la cuenta de WidPlay), ni mucho menos Tuenti,… Lo se, es irónico que alguien que no tiene perfiles en redes sociales intente hacer una red social.

Cierto, :P , y eso mismo hace que mole más aun WidPlay :D

Sigo… Pues bien, antes no hacia mucho caso a charlas o eventos donde emprendedores hablan de sus proyectos o negocios digitales, donde se organizan talleres, donde haces networking,… Pero desde hace 3 años intento ir a todo el que puedo (Unos 5/6 al año). Y aunque es cierto que muchos puede que te quiten tiempo, uno de vez en cuando motiva mucho y conoces gente.

Con lo que para seguir con el argumento principal de la anécdota, la semilla de esta idea se originó sin yo saberlo ese primer año que empecé a ir a este tipo de eventos (¿Tal vez fueron las ganas y la predisposición a cosas nuevas del novato? No lo se). Fue con 22 años que junto a mi padre y hermano nos acercamos desde Valencia (Lugar donde vivo) a Madrid, a un evento que se organiza alrededor de Noviembre llamado Ficod (Por cierto se organiza el del 2011 en unas semanas :D ). Este evento suele llevar, además de emprendedores o personas bastante famosas sobre los negocios digitales, a emprendedores que hablan de sus proyectos y te lo muestran en una especie de charla familiar.

No recuerdo muy bien de que iba la charla clave, digo clave no por el contenido que creo que acabé ahí por casualidad iendo al baño, sino por que originó la idea. Creo que era sobre un programa relacionado con la gestión de acciones en la bolsa (WTF! :P ¿Bolsa? Si no tengo ni idea…),  en fin, me senté a escuchar un poco de que iba el asunto y más que nada a ver como era una aplicación que trataba con cosas tan serias como la bolsa y que con dos cojones ellos se habian puesto a algo más que trastear. (Suelen decir que hay que escuchar y aprender todo lo que se pueda, aunque no te interese para nada o no entiendas sobre la bolsa, pero bueno mi curiosidad era más bien técnica)

Así que ahí estaba yo, escuchando y aprendiendo lo que cayese, cuando de repente el ponente preguntó a la sala algo del tipo: ¿Como creéis que debería ser una aplicación en internet? Realmente pocas ideas se dijeron, pero un chico dijo lo más básico, que en su momento a más de uno se le escapó una sonrisa pensando que era un idealista y por ser algo tan simple. Dijo algo como:

Hombre… una página donde esté todo… donde puedas jugar, donde puedas escuchar música, donde puedas ver películas, estar con tus amigos… Sin tener que ir de un sitio a otro…

Por aquel entonces simplemente se quedó ahí. Pero supongo que esa fue la semilla que 2 años después, con los conocimientos y tiempo ya necesarios, hizo que empezase WidPlay, donde intento llevar ese concepto al máximo. Ya veis, de esa gilipoyez :P , ¿menos glamouroso de lo que imaginabáis? jajaja

Tras un año de muchísimo código, de aprender cada día formas mejores de hacer las cosas, de explorar nuevas tecnologías, miles de horas de peleas con códigos, he fusionado todo lo mejor de las tecnologías existentes opensource de las que tengo conocimiento para crear WidPlay.

Si te estás preguntando cuanta gente está detrás de WidPlay… La respuesta es 1 persona (Yo, Leif Ferreira) hasta hace 5 meses, 2 desde entonces (Hector Leon Zarco).

¿Que cuanto dinero ha financiado el proyecto? Podría decir que cero, pero realmente, antes de WidPlay junté 6000 euros que he ido administrándome este año para todos los gastos: Coche, Internet, desplazamientos, Comida,… Lo que me ha permitido literalmente estar 24 horas pendiente de programar, desde que me levantaba hasta en la misma cama con el portátil.

Un año después de las primeras líneas de código en esa hoja en blanco del Netbeans tenemos listo una versión Alpha compuesta por una suitte de 4 aplicaciones: Redes sociales, Música, Películas (Pelis, Documentales, Series, Anime) y Juegos. Haciendo que tanto esfuerzo esté dando resultado a lo que mucha gente me ha definido como revolucionario :D . Ejemplo básico de WidPlay por dentro.

Aunque en un estado Alpha, eso significa que solo una pequeña red de colaboradores podrán probar la herramienta para empezar con el feedback, siempre puedes contactarnos y explicarnos porque te gustaría probar WidPlay y te contactaremos con la decisión.

Así que esta es la historia del origen, y desde ya empieza WidPlay! Cierto es que aun queda mucho que hacer, pero ya no es lo mismo cuando hablas a la gente de tu idea, que ha pasado de que nadie me entendia de que iba a “Esto es revolucionario!” al verlo funcionando…

En unos días estará online para Betatesters (o Alphatesters en este caso).