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 !
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 .
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
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 ), 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',
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.
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! 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… ) 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 ). 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… 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
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 . 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 .
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
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! )
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!
Ahorrar dinero nos gusta a todos! , 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
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
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:
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í.
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:
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.
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:
<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:
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.
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):
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:
Codificación,…. Maldita codificación…. ¿Hay algo en el desarrollo que pueda molestar más? Seguramente si , 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:
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:
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
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
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í)
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
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.
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.
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:
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.
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
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.
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
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)
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.
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.
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
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:
Usas Internet Explorer como navegador (GRAN FALLO)
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.
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í . 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 , no importa el nombre pero si la esencia)
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, , y eso mismo hace que mole más aun WidPlay
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 ). 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! ¿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 , ¿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 . 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).