bibigeek.com  Tu blog de Programación Geek: Java, php, J2EE... y mucho más

Al fin….

  • Servidor Webfaction configurado correctamente
  • Dominio redireccionado con éxito al servidor nuevo
  • ¿Lentitud? Se puede apreciar como la velocidad ha disminuido, pero vale la pena el cambio :D , 5 minutos el servidor ha sido configurado
  • Calidad precio – he perdido mucho control del servidor, aunque webfaction ofrece muchas posibilidades, opciones de instalación personalizadas, etc

Para mi ha valido la pena!!!!

Hola,

Al final me he decidido por cambiar de servidor y buscarme algo más económico, que no digo que OVH no lo fuera, pero también ya voy en busca de otros requerimientos, que con OVH ya me eran complejos configurar (todo por no ser un crack de sistemas xD). El servidor en cuestión es Webfaction, y tiene lo que necesito por ahora: Subversion, wordpress, django, python, statdisticas, etc

Al ser un servidor compartido me surgen varias dudas:

  • ¿Será igual de rápido?
  • ¿Habrá suficiente Latencia como para desesperarse, al tener el servidor en USA?

Son algunas de la preguntas que me han surgido en el momento de hacer los cambios…. de todas maneras, no podré analizarlo hasta tenerlo todo bien redireccionado. Ya os contaré que tal.

Saludos

Hola a todos,

El otro día expliqué com hacer una copia de seguridad de nuestro repositorio entero, pero lo que desconocía es que eso NO nos iba a servir para importar cuyo Repositorio al nuevo servidor Subversion.

¿Como almacenar una copia de seguridad del Repositorio Subversion en un solo fichero?

Pues realmente es muy sencillo realizar la copia de seguridad y almacenarlo en un SOLO fichero, para ello recurriremos a la utilización de la extensión .dump

Pasos para realizar la copia de seguridad de nuestro Repositorio Subversion (siempre pensando en un S.O. Linux – Mac):

  1. Acceder mediante ssh/terminal al servidor subversion
  2. Tener en mente cuál es la ruta donde está situado nuestro repositorio subversion
  3. Ejecutar el siguiente comando sustituyendo los valores entre corchetes por valores reales:
    
    svnadmin dump [REPOSITORIO] . > [NOMBRE_BACKUP].dump
    
  4. Con la ejecución de este comando obtendremos toda una copia del código, de todos los logs, etc. del repositorio. Podemos añadir otras variantes para que el comando “svnadmin dump” realice copias más acotadas.

Ahora veremos como poder importar esta copia de seguridad.

Como importar un copia de seguridad de Subversion con un ficheros .DUMP

Este paso también es realmente fácil, siempre y cuando podamos acceder desde ssh o terminal al servidor Subversion, claro.

Pasos a realizar:

  1. Enviar el fichero de la copia de seguridad al nuevo servidor, por ejemplo con SCP. Ejemplo:
    
    scp [FILE_NAM].dump [USER]@[SERVIDOR]:[RUTA]
    
  2. Cuando tenemos la copia de seguridad en el nuevo servidor, accedemos a él, también mediante SSH.
  3. Accedemos la raíz de nuestro servidor Subversion
  4. Ejecutamos el siguiente comando:
    
    svnadmin load . < [RUTA]/[FILE_NAME].dump
    

Con estos pasos, tendremos en breve cargada nuestra copia de seguridad en el nuevo Repositorio… realmente fácil.

Suerte y espero que os haya servido.

Hola de nuevo…
Desde el primer momento que nos planteamos en realizar el cambio de Servidor estamos planeando una planificación para llevar a cabo el traspaso de información.

Lo primero que nos vino a la cabeza fue la de realizar una copia de seguridad del código de todos los proyectos, que no es más que hacer la copia de seguridad del Subversion, como buenos programadores hay que tener un buen Servidor de Control de Versiones, ¿no?

Copia de seguridad (Backup) de un Repositorio Subversion

Lo más relevante del Servidor OVH es la utilitzación del Subversión, se nos ha hecho una herramienta esencial para poder trabajar en equipo y de una forma asíncrona.

Como podréis saber podemos instalar dentro de un mismo Subversion varios Respositorios distintos, en nuestro caso creamos uno como: svnprivate y otro svnpublic. Podemos proceder de dos formas para hacer la copia de seguridad:

  • Copiar el directorio de cada uno de los repositorios. Nos tenemos que asegurar que no hay nadie que acceda en ese momento al repositorio, ni haya ninguna conexión webdav, de lo contrario puede ser que la copia sea corrupta.
  • La forma más segura de realizar la copia de seguridad será la ejecución del siguiente comando:
    
    svnadmin hotcopy ruta/al/repositorio ruta/al/backup --clean-logs
    

Por lo que tengo entendido la opción de –clean-logs nos permitirá ahorrar un poco de espacio a la hora de realizar la copia, ya que elimina aquellos ficheros log redundantes.

Ahora que ya tenemos la copia de seguridad nos tocará hacer en el servidor de Webfaction la importación del Repositorio, no creemos que sea tan simple como esto. Ya os contaré la experiencia…

Hola de nuevo…
Hace bastantes semanas… y meses que no escribo ninguna nueva entrada el blog. No me voy a disculpar porque no tengo perdón, sólo comentaros que durante estos meses he realizado varios proyectos con un gran amigo en Python y Django. Por lo que ahora me tocará compartir varias cosas con vosotros.

Cambio de servidor

Actualmente mi amigo y yo tenemos un Servidor OVH, el tipo de servidor es un RPS II (Servidores Privados).

Este servidor nos ha traído grandes satisfacciones como también grandes dolores de cabeza, el mantenimiento del servidor no es trivial ni mucho menos. Internamente el Servidor lleva incorporado una distribución Debian GNU/Linux 5.0.2 (lenny) con un panel de administración (opinión: muy bueno) ISPConfig Versión 3.0.1.3

Con el panel de administración permite modificar multitud de parámetros y configuraciones internas, como:

  • Añadir – modificar – borrar usuarios Unix
  • Añadir – modificar – borrar usuarios SSH
  • Dar de alta – Redireccionamiento Dominios y DNS
  • Visualizar el monitor del sistema
  • ….
Veamos una imagen:
El servidor RPS de OVH no sólo permite realizar modificaciones desde el ISPConfig, sino que hay un forma más para aquellos usuarios avanzados, el SSH. En nuestro caso hemos realizado muchísimas modificaciones desde Terminal, y os aseguro ha habido casos de fracaso, casos de satisfacción y casos de mucha alegría :P .
Dicho esto os quiero presentar nuestro nuevo proveedor de alojamiento, Webfaction.

Servidor Webfaction

En este nuevo proveedor podemos encontrar distintos planes de precios en los que se tienen en cuenta dos variables: rendimiento y precio.

Pequeña descripción de webfaction

Los servidores de Webfaction son de alojamiento compartido, por lo que no nos permitirá tanta flexibilidad como el OVH en cuestion de instalación de paquetes Unix, como modificaciones de DNS desde Terminal, etc. Pero estas modificaciones si podremos realizarlas desde el panel de administración de Webfaction.

Propiedades relevantes de Webfaction

  • Rapidez del servidor, automáticamente cuando creamos una nueva aplicación, los ficheros estáticos serán servidas por un Servidor Nginx
  • Contiene hasta 50 instaladores predefinidos, internamente desde el panel de administración nos permite instalar hasta 50 tipos de instalaciones: djando, php, webdav, subversion, etc
  • Permite instalar varios “Proyectos – servidores” para una aplicación web, por ejemplo: con una aplicación Django se instala un servidor Apache con WSGI y después se debe instalar un servidor Nginx para la parte estática.
  • Nos podemos conectar vía SSH, nos permitirá tener acceso a nuestros entornos virtuales y poderle instalar librerías, paquetes, siempre individualmente a cada aplicación.
  • Etc.

Precio Webfaction

Por experiencia particular, hemos podido comprobar que el Plan más económico y el rendimiento es muy favorable (deberíamos hacer pruebas de carga, no se ha hecho) es la opción: “Shared 2″.

Podemos realizar los pagos mes a mes y lo que viene a ser $14,50 pasa a ser $17,03 porque hay que sumarle un VAT del 17,5%. Si hacemos el cambio a €, el coste final es de: 13,03 €. Realmente muy económico por todo lo que podemos llegar a hacer con nuestra cuenta Webfaction y el rendimiento que nos ofrece.

¿Por que razón del cambio a Webfaction?

Las razones son varias la verdad, pero resumiéndolas:

  • Facilidad de configuración
  • Optimización para Django y Python (Factor muy importante actualmente)
  • Instalación de varias tecnologías para una misma cuenta
  • Personalización de cada aplicación que instalemos, aunque sea de la misma tecnología
  • Rendimiento y precio

Estas son las razones que pienso que son más relevantes, no obstante, hay muchas más que me nos han hecho decidirnos por el cambio. Espero haberos convencido de que el cambio ha sido bueno :P

Si necesitáis más información sobre webfaction no dudéis en contactar o leeros las demos de webfaction (también hay vídeos :D ).

En fin otra vez aquí…

Hoy, para los que lo desconocían, os mostraré como en el subversion podemos ignorar ficheros con una extensión determinada o un directorio particular.

¿Objetivo de ignorar ficheros o directorios en el SVN?

Añadir reglas o filtros al proyecto para que tales ficheros o directorios no se incluyan en nuestro Repositorio de Versiones, Subversion.

¿Se podría dar el caso de querer ignorar ficheros?

Realmente, un ejemplo muy bueno son los lenguajes compilados. Ejemplos:

  • Java: genera ficheros “.class”
  • Python: genera ficheros “.pyc”
  • No nos interesa subir imágenes (a gusto del consumidor)
  • También es probable que no nos interese tener que subir los fichero .war o .ear, si tenemos el proyecto completo ¿para que guardar algo que se puede volver a generar?
  • etc

Por lo tanto, estos ficheros no tienen mucho sentido para mí que estén en nuestro repositorio.

¿Cómo ignorar los ficheros?¿Qué comando ejecutar para ignorar ficheros/directorios en el SVN?

Para añadir reglas debemos utilizar el terminal o algún programa específico para Subversion, por ejemplo, el Tortoise.

Desde Terminal

Veamos los pasos a seguir y el comando a ejecutar:

  1. Localizamos donde esta nuestro proyecto, NO accedemos a él.
  2. Utilizando el comando siguiente: svn propset svn:ignore <criterio> <path> podremos indicar los ficheros o directorios a ignorar por el subversion.

Ejemplos:


svn propset svn:ignore ".pyc" TestDjango/
svn propset svn:ignore ".class" TestJ2EE/
svn propset svn:ignore "*" classes/  #Todo el directorio queda ignorado por el subversion

Desde Tortoise

En este tema será tan simple como el software en cuestión lo sea, es decir, el Tortoise puede, o no, ser más simple que otro. Por lo tanto, habrá que mirar la ayuda o manuales del Software. Adjunto imágenes del funcionamiento del Tortoise:

1. Inicio del Tortoise
2. Botón derecho encima del proyecto versionado
3. Pulsamos PROPERTIES
4. Pulsamos ADD PROPERTIES


5. Añadimos el PROPERTY deseado, en este caso el svn:ignore. Deseamos ignorar todos los ficheros .class y se tiene que aplicar activar el checkbox “Apply property recursively” para que tenga efecto en todo el proyecto.

apply property

Desde Netbeans

También podemos hacer funcionar el comando svn:ignore en el Netbeans… ¿impresionante no? Veamos estas imágenes que nos ayudará a entenderlo:

1. Abrimos el Netbeans y pulsamos botón derecho encima del proyecto
2. Del menu Contextual, pulsamos Subversion/Properties/

svn properties netbeans

3. Nos aparecerá una nueva ventan en la que podremos añadir las propiedades deseadas, veamos la imagen:

Añadir propiedades con netbeans

Espero que os sirva de mucha ayuda, a mi ya me está haciendo su fruto jejeje :P

Saludosss!!!!

Hola a todos,

La verdad es que parece que he tenido abandonado totalmente el blog,… bueno parece no, lo ha sido. Tengo que deciros que no tengo perdón ni mucho menos, pero con el trabajo, estudiando nuevas tecnologías, hobbys … pués me apetecía más dedicarme el poco tiempo que tenía a ello.

En fin, fuera rollos…. que sigo aquí y que en breve escribiré nuevas entradas.

Adelantaros que los temás principales que trataré:

  • Python – Django
  • SEO
  • Android 2.1 y 2.2 (Froyo no Frodo :P )
  • Nexus One

Espero ya poder escribiros alguna entrada realmente interesante :P

Saludos a tod@s!!!!!

Después de leer varias noticias sobre lo que pretende hacer el “Govern de les Illes Balears” (y lo que ha hecho durante el transcurso de estos años…) me da vergüenza sentirme informático mallorquín. Ya se que parece que estoy exagerando un poco, pero es tal la indignación que siento, que no tengo palabras para expresarlo.

Sólo de pensar que 12 millones de euros, no 1 ni 2, ni tan si quiera 6, sinó 12, 12 millones de euros que pagaremos todos los habitantes de las Islas Baleares por una Plataforma de Turismo hecha por Microsoft i Turistec. No estoy diciendo que la iniciativa sea mala, ahora bien, tener que pagar a Microsoft, todo el mantenimiento que esto conllevará, las licencias de programación… es increíble, se necesita que estas decisiones las tomen personas cualificadas ¿no creéis?

La Política, una política es corrupta y llena de intereses pesonales, no se miran los intereses de los ciudadanos ni de las empresas, sinó sus propios intereses (basta echar una mirada al pasado, y ahora, al presente).

Señorías, la política, no es sólo para aparentar, sino para ayudar, promover, buscar alternativas a las cosas, mejorar…etc En fin que me estoy metiendo demasiado en la política y no debe ser así, igualmente este POST seguro que no cambiará nada, los intereses de los estudiantes de la universidad, los informáticos mallorquines, las Pymes Mallorquinas… no son lo suficientemente importante para cambiar los intereses personales de los políticos.

Más información:
El software libre según el Govern de Balears y el proyecto de los 12 millones, Ricardo Galli
El 1.996.632.000, Antoni Aloy

Otro Post de servidores y testeado en mi ubuntu Karmic Koala :P

Esta vez he dedicado algunas horas, días… en simular lo que tengo instalado en mi servidor Debian Lenny. Gracias a la tercera edición del Creant Bits al Núvol, organizado por Antoni Aloy, y en esta exposición más concretamente, gracias a Ricardo Galli (creador del Meneame, profesor de la Universidad de las Islas Baleares y gran profesional informático…), me di cuenta que tenía que imitar su trabajo, parte de los problemas que tenía Ricardo también los encuentro en mi servidor y se puede mejorar con las novedades explicadas en la charla sobre Menéame (enhorabuena).

Conclusión de esta introducción, todo cambio puede ir mejor, pero también a peor si no sabemos como llevarlo a cabo. Para ello, estoy simulando en mi Ubuntu Karmic Koala unas condiciones similares del Servidor Debian contratado.
Objetivo: cuando realice el cambio debe ser lo más breve posible y el impacto que pueda causar sea nulo (factor bastante imposible, porque ya esta peligrando el subversion con el paquete webdav).

Primer punto: Instalar NGINX en Ubuntu de cero.

La verdad es que su instalación es relativamente fácil, solamente con un sudo aptitude install nginx ya se instala. Pero nos aseguramos si realmente los repositorios que tenemos agregados en nuestro Karmic Koala contienen Nginx:


sudo aptitude search nginx

#Salida de la ejecución del comando
p   nginx             - small, but very powerful and efficient web server and mail proxy

Después de cerciorarnos que tenemos disponible el paquete nginx pasamos a su instalación, por lo tanto:


sudo aptitude install nginx

#Tendría que aparece algo similar a esto:
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Leyendo la información de estado extendido
Inicializando el estado de los paquetes... Hecho
Se instalarán los siguiente paquetes NUEVOS:
nginx
0 paquetes actualizados, 1 nuevos instalados, 0 para eliminar y 160 sin actualizar.
Necesito descargar 329kB de ficheros. Después de desempaquetar se usarán 803kB.
Escribiendo información de estado extendido... Hecho
Des:1 http://es.archive.ubuntu.com karmic/universe nginx 0.7.62-4ubuntu1 [329kB]
Descargados 329kB en 1s (313kB/s).
Seleccionando el paquete nginx previamente no seleccionado.
(Leyendo la base de datos ...  00%
126264 ficheros y directorios instalados actualmente.)
Desempaquetando nginx (de .../nginx_0.7.62-4ubuntu1_i386.deb) ...
Procesando disparadores para man-db ...
Procesando disparadores para ufw ...
Procesando disparadores para sreadahead ...
Configurando nginx (0.7.62-4ubuntu1) ...

Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Leyendo la información de estado extendido
Inicializando el estado de los paquetes... Hecho
Escribiendo información de estado extendido... Hecho

En fin, hemos tardado ¿3 -5 minutos? No está mal. Para arrancar el server o pararlo, es parecido al servidor apache, pero cambiando el nombre del script:


sudo /etc/init.d/nginx start

#Salida en pantalla tras la ejecución del script
Starting nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
configuration file /etc/nginx/nginx.conf test is successful
nginx.

IMPORTANTE: este servidor utiliza por defecto el puerto 80, al igual que Apache2. No podemos pretender tener configurado el servidor apache en el puerto 80 y querer también el Nginx, por lo tanto, hay que cambiar el puerto del Apache, desinstalarlo, … eso ya va a vuestro gusto :P

Segundo punto:  Instalación de PHP5 y los paquetes adicionales

Os pongo todos los paquetes que se deben instalar, algunos porque son dependecias u otros porque son plugins… en fin que se deben instalar. El comando completo es:


sudo aptitude install php5-cgi php5-mysql php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-mhash php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl php5-json

Se descargarán bastantes kbytes de información.

Justo después de esto, debemos modificar el php.ini incluyendo el siguiente texto al final del fichero:
ACTUALIZACIÓN = el php.ini lo encontramos en /etc/php5/cgi/php.ini

cgi.fix_pathinfo = 1

Esta línea es necesaria para que el PHP funcione correctamente como CGI.

Tercer punto: Instalación del FastCGI

En la instalación de este paquete tenemos un grave problema. En Ubuntu no tenemos ningún paquete explícito para instalar FastCGI, para ello necesitaremos instalar el lighttpd.
Debemos tener en cuenta que el lighttpd también es un servidor web y en su configuración está especificado que el puerto de escucha es el 80. Upss, pero el puerto 80 ya esta siendo utilizado, por lo tanto, fijáos bien en la salida por pantalla de la ejecución del siguiente comando:


sudo aptitude install lighttpd

#Salida de la instalación
........
Se instalarán los siguiente paquetes NUEVOS:
libterm-readline-perl-perl{a} lighttpd
0 paquetes actualizados, 2 nuevos instalados, 0 para eliminar y 160 sin actualizar.
Necesito descargar 371kB de ficheros. Después de desempaquetar se usarán 1245kB.
¿Quiere continuar? [Y/n/?] y
Escribiendo información de estado extendido... Hecho
Des:1 http://es.archive.ubuntu.com karmic/universe libterm-readline-perl-perl 1.0302-1 [52,0kB]
Des:2 http://es.archive.ubuntu.com karmic/universe lighttpd 1.4.22-1ubuntu4 [319kB]
Descargados 371kB en 1s (326kB/s).
Seleccionando el paquete libterm-readline-perl-perl previamente no seleccionado.
(Leyendo la base de datos ...  00%
126682 ficheros y directorios instalados actualmente.)
Desempaquetando libterm-readline-perl-perl (de .../libterm-readline-perl-perl_1.0302-1_all.deb) ...
Seleccionando el paquete lighttpd previamente no seleccionado.
Desempaquetando lighttpd (de .../lighttpd_1.4.22-1ubuntu4_i386.deb) ...
........
update-alternatives: usar /usr/bin/spawn-fcgi.lighttpd para proporcionar /usr/bin/spawn-fcgi (spawn-fcgi) en modo automático
Syntax OK
* Starting web server lighttpd
lighttpd
2010-02-27 10:50:38: (network.c.300) can't bind to port:  80 Address already in use
[fail]
invoke-rc.d: initscript lighttpd, action "start" failed.

.......

He señalado dos frases importantes:

  • La primera: la he remarcado por la siguiente palabra, spawn-fcgi, que es lo que utilizaremos como el fast-CGI
  • La segunda: importante porque nos indica que el puerto 80 ya está en uso :P

Para utilizar el spawn-cgi antes deberemos eliminar del fichero de arranque el lighttpd, que realmente no utilizaremos. Entonces, ejecutamos el comando:


sudo update-rc.d -f lighttpd remove

#Salida por pantalla
Removing any system startup links for /etc/init.d/lighttpd ...
/etc/rc0.d/K09lighttpd
/etc/rc1.d/K09lighttpd
/etc/rc2.d/S91lighttpd
/etc/rc3.d/S91lighttpd
/etc/rc4.d/S91lighttpd
/etc/rc5.d/S91lighttpd
/etc/rc6.d/K09lighttpd

Con la ejecución de este último comando, el cual necesita permisos de superusuario, elimina del inicio del sistema, el arranque del lighttpd.

Cuarto paso: Configuración del FastCGI (concretamente Spawn-cgi)

Principalmente este paso es importante porque tenemos que modificar scripts, crear de nuevos, etc.

  1. Para que el funcionamiento del PHP FastCGI sea correcta necesitaremos indicar: puerto de escucha, usuario y grupo. Se puede realizar mediante la siguiente línea de código:
    
    /usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid
    
  2. Pero esto TIENE UN PROBLEMA, cada vez que reiniciamos el servidor o mejor dicho el PC, necesitaremos ejecutar la línea anterior. Por ello, lo que haremos será modificar el fichero de administración local, llamado rc.local, incluyendo en el fichero la línea anterior. Esto nos permitirá no tener que añadir esta misma línea cada vez.
    El fichero lo encontraremos en: /etc/rc.local, y tendría que quedar una cosa así:

    
    .......
    /usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid
    
    exit 0
    
  3. Ahora tenemos que crear un script con el nombre php-fastcgi en el siguiente directorio:
    
    /etc/init.d/php-fastcgi
    
  4. Contenido del fichero deber ser el siguiente:
    
      1 #! /bin/sh
      2 ### BEGIN INIT INFO
      3 # Provides:          php-fastcgi
      4 # Required-Start:    $all
      5 # Required-Stop:     $all
      6 # Default-Start:     2 3 4 5
      7 # Default-Stop:      0 1 6
      8 # Short-Description: Start and stop php-cgi in external FASTCGI mode
      9 # Description:       Start and stop php-cgi in external FASTCGI mode
     10 ### END INIT INFO
     11
     12 # Author: Kurt Zankl <[EMAIL PROTECTED]>
     13
     14 # Do NOT "set -e"
     15
     16 PATH=/sbin:/usr/sbin:/bin:/usr/bin
     17 DESC="php-cgi in external FASTCGI mode"
     18 NAME=php-fastcgi
     19 DAEMON=/usr/bin/php-cgi
     20 PIDFILE=/var/run/$NAME.pid
     21 SCRIPTNAME=/etc/init.d/$NAME
     22 PHP_CONFIG_FILE=/etc/php5/cgi/php.ini
     23
     24 # Exit if the package is not installed
     25 [ -x "$DAEMON" ] || exit 0
     26
     27 # Read configuration variable file if it is present
     28 [ -r /etc/default/$NAME ] && . /etc/default/$NAME
     29
     30 # Load the VERBOSE setting and other rcS variables
     31 . /lib/init/vars.sh
     32
     33 # Define LSB log_* functions.
     34 # Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
    

    Puedes descargar el fichero php-fastcgi.
    El fichero tiene la extensión .txt para que el WordPress no lo detectase como corrupto, por ello, cuando copiéis el fichero en la ruta /etc/init.d/ debéis eliminar la extensión .txt

  5. Necesitamos que este script tenga permisos de ejecutable, por lo tanto, la ejecución del siguiente comando nos permitirá que lo sea:
    
    chmod +x /etc/init.d/php-fastcgi
    

Quinto paso: Configuración de Nginx para que funcione con FastCGI

Ahora le toca a Nginx…debemos configurar a este servidor web, para que los ficheros php los pueda servir mediante FasfCGI. Pasemos entonces a configurar el virtualhost default de ngnix:


sudo vim /etc/nginx/sites-available/default

#Necesitamos añadir el texto siguente:
location ~ \.php$ {
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  /var/www/nginx-default$fastcgi_script_name;
include fastcgi_params;
}

Con todo esto ya tenemos instalado nginx – php5 – FastCGI, como prueba podríamos crear un fichero info.php en el directorio raix de nginx, que según el ejemplo y el virtualhost, lo encontraremos en: /var/www/nginx-default/
Espero que haya servidor para algo no???? :P

Hola a tod@s de nuevo,

Al fiiinnnnn, por dos razones importantes:

  • Una, porque hacia tiempo que no escribía (y mirad que tengo temas, pero también mucho trabajo…)
  • Y dos… ya he podido configurar Django con MySQL. Se me resistía, una y otra vez, todo porque me faltaba instalar python-mysqldb, de lo contario siempre me daba errores.

Voy a dividir la instalación en puntos para que se pueda leer, comprender y que el seguimiento sea lo más simple posible. Empecemos.

Requisitos necesarios para instalar Django con MySQL

  • Sistema Operativo Linux (testeado en Ubuntu Karmic Koala), para los Maqueros como en mi caso tendremos que esperar a que pueda hacer pruebas :P
  • Versión de Django 1.1.1  instalado (esper que con versiones anteriores o posteriores no tiene porque ser diferente)
  • Motor de Base de Datos MySQL (versión, yo tengo la 5.1.37) tanto el servidor como el cliente.
  • (Opcional) Instalación de MySQL Administrator y MySQL Query Browser
  • Paquete python-mysqldb (pero se explicará con más detalle)

Instalación MySQL Administrator y MySQL Query Browser

1- Primero buscamos el paquete mysql-admin con el siguiente comando:


sudo aptitude search mysql-admin

2- La salida que obtenemos es:


bibigeek@macbookpro-bibigeek:~/PythonProjects$ sudo aptitude search mysql-admin
pB  mysql-admin               - Herramienta gráfica para una administración sencilla de MySQL

3- Ahora ya ponemos a instalar el paquete mysql-admin con el comando:


sudo aptitude install mysql-admin

4- La salida de la instalación es (importante fijaros en el texto en negrita y subrayado):


Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Leyendo la información de estado extendido
Inicializando el estado de los paquetes... Hecho
Se instalarán los siguiente paquetes NUEVOS:
libgnomecups1.0-1{a} libgnomeprint2.2-0{a} libgnomeprint2.2-data{a} libgnomeprintui2.2-0{a} libgnomeprintui2.2-common{a}
libgtkhtml3.8-15{a} libmysqlclient15off{a} mysql-admin mysql-gui-tools-common{a} mysql-query-browser{a} 
0 paquetes actualizados, 10 nuevos instalados, 0 para eliminar y 0 sin actualizar.
Necesito descargar 0B/6212kB de archivos. Después de desempaquetar se usarán 22,3MB.
¿Quiere continuar? [Y/n/?] y
Escribiendo información de estado extendido... Hecho

Seleccionando el paquete libgnomecups1.0-1 previamente no seleccionado.

...

Configurando mysql-gui-tools-common (5.0r12-1ubuntu2) ...
Configurando mysql-admin (5.0r12-1ubuntu2) ...

Configurando mysql-query-browser (5.0r12-1ubuntu2) ...

Procesando disparadores para libc-bin ...
ldconfig deferred processing now taking place
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Leyendo la información de estado extendido
Inicializando el estado de los paquetes... Hecho
Escribiendo información de estado extendido... Hecho

5- Pantallazo de donde podemos encontrar los programas instalados:

Creación del Proyecto testProject

1- Ahora creamos el proyecto Django, un proyecto de prueba. Lo denominaré “testProject”, ejecutamos el siguiente comando:


django-admin.py startproject testProject

2- Configuraremos el proyecto Django para que funcione con el motor de BD MySQL. Alerta, estoy suponiendo que el usuario test y la Base de Datos testDB está creado. Os adjunto los valores a modificar en el fichero settings.py y también adjunto un pantallazo:


12 DATABASE_ENGINE = 'mysql'
13 DATABASE_NAME = 'testDB'
14 DATABASE_OPTIONS ={"init_command":"SET storage_engine=INNODB"}
15 DATABASE_USER = 'test'
16 DATABASE_PASSWORD = 'test'
17 DATABASE_HOST = 'localhost'
18 DATABASE_PORT = '3306'


IMPORTANTE: fijaos que he puesto una opción que no viene por defecto el fichero settings.py, que es el DATABASE_OPTIONS. Esta opción es utilizada para especificarle a Django que las tablas que tienen que crear en MySQL son de la tecnología INNODB.

3- Ahora ejecutamos el comando “syncdb” para crear la estructura de Base de Datos para Django. Veréis por los siguiente pantallazos y textos expuestos, que no funciona y nos mostrara un error. Veamosló todo:


bibigeek@macbookpro-bibigeek:~/PythonProjects/testProject$ python manage.py syncdb
Traceback (most recent call last):
File "manage.py", line 11, in <module>
execute_manager(settings)
File "/usr/local/lib/python2.6/dist-packages/django/core/management/__init__.py", line 362, in execute_manager
utility.execute()
File "/usr/local/lib/python2.6/dist-packages/django/core/management/__init__.py", line 303, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/python2.6/dist-packages/django/core/management/base.py", line 195, in run_from_argv
self.execute(*args, **options.__dict__)
File "/usr/local/lib/python2.6/dist-packages/django/core/management/base.py", line 221, in execute
self.validate()
File "/usr/local/lib/python2.6/dist-packages/django/core/management/base.py", line 249, in validate
num_errors = get_validation_errors(s, app)
File "/usr/local/lib/python2.6/dist-packages/django/core/management/validation.py", line 22, in get_validation_errors
from django.db import models, connection
File "/usr/local/lib/python2.6/dist-packages/django/db/__init__.py", line 41, in <module>
backend = load_backend(settings.DATABASE_ENGINE)
File "/usr/local/lib/python2.6/dist-packages/django/db/__init__.py", line 17, in load_backend
return import_module('.base', 'django.db.backends.%s' % backend_name)
File "/usr/local/lib/python2.6/dist-packages/django/utils/importlib.py", line 35, in import_module
__import__(name)
File "/usr/local/lib/python2.6/dist-packages/django/db/backends/mysql/base.py", line 13, in <module>
raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named MySQLdb

Instalación del paquete Python-mysqldb

Como habréis notado y visto, cuando hemos ejecutado el syncdb nos ha proporcionado una serie de errores. Esto lo solucionaremos con la instalación del paquete “python-mysqldb”. Para instalarlo podemos ejecutar los siguientes comandos y os tendría que aparecer en la salida algo similar a esto:


bibigeek@macbookpro-bibigeek:~/PythonProjects/testProject$ sudo aptitude search python-mysql
[sudo] password for bibigeek:
p   python-mysqldb                       - Una interfaz Python para MySQL
p   python-mysqldb-dbg              - Una interfaz Python para MySQL (extensión de depuración)

bibigeek@macbookpro-bibigeek:~/PythonProjects/testProject$ sudo aptitude install python-mysqldb
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Leyendo la información de estado extendido
Inicializando el estado de los paquetes... Hecho
Se instalarán los siguiente paquetes NUEVOS:
python-mysqldb
0 paquetes actualizados, 1 nuevos instalados, 0 para eliminar y 0 sin actualizar.
Necesito descargar 0B/98,5kB de archivos. Después de desempaquetar se usarán 352kB.
Escribiendo información de estado extendido... Hecho
Seleccionando el paquete python-mysqldb previamente no seleccionado.
(Leyendo la base de datos ...  00%
153203 ficheros y directorios instalados actualmente.)
Desempaquetando python-mysqldb (de .../python-mysqldb_1.2.2-10_i386.deb) ...
Configurando python-mysqldb (1.2.2-10) ...
Procesando disparadores para python-support ...
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Leyendo la información de estado extendido
Inicializando el estado de los paquetes... Hecho
Escribiendo información de estado extendido... Hecho

Resultado final de Django con MySQL

1- Si en estos momentos ejecutamos el syncdb tendremos el siguiente resultado (texto y pantallazo):


bibigeek@macbookpro-bibigeek:~/PythonProjects/testProject$ python manage.py syncdb
Creating table auth_permission
Creating table auth_group
Creating table auth_user
Creating table auth_message
Creating table django_content_type
Creating table django_session
Creating table django_site

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (Leave blank to use 'bibigeek'): demo
E-mail address: bibigeek@gmail.com
Password:
Password (again):
Superuser created successfully.
Installing index for auth.Permission model
Installing index for auth.Message model

Para que podáis comprobar que esta se ha echo realidad (es que al fin lo he podido hacer funcionar…) os ajunto un pantallazo del MySQL Administrator con el diseño del schema testDB, veamosló:

Como habréis visto en la imagen, las tablas creadas son INNODB, importante :P

Espero que os haya servido de algo y suerte!!!!!