Entradas etiquetadas con instalar

Cassandra 2.x y PHP para desarrolladores SQL: Instalación
0La base de datos No-SQL Cassandra fue creada por Facebook a causa de la necesidad de disponer de una base de datos distribuida de alto rendimiento, flexible, tolerante a fallos, escalable y que fuese capaz de procesar grandes cantidades de datos. Más tarde fue liberada bajo licencia Apache y actualmente es utilizada principalmente por empresas de internet con proyectos con un alto uso de base de datos como Twitter.
En esta serie de artículos iré desgranando la instalación, funcionamiento y desarrollo de aplicaciones en PHP con Cassandra, comparando las sentencias utilizadas para insertar, actualizar, etc de SQL con los métodos a utilizar en Cassandra. Por desgracia al ser algo completamente distinto a cualquier base de datos SQL tendré que añadir algo de teoría, pero intentaré que os resulte lo más ameno posible.
Al toro.
REQUISITOS
Para la realización de esta guía se utilizará Debian 8 Jessie como sistema operativo.
Doy por hecho que ya se dispone de un servidor web Apache con PHP instalado en la máquina de testeo que se esté usando. Las aplicaciones que se van a instalar han sido probadas en una máquina virtual Debian 8 Jessie utilizando como aplicación de virtualización VirtualBox, instalado en un host Debian 8 Jessie.
En un servidor de producción recomiendo que tenga bastante RAM (por encima de 1GB, ya veremos más adelante el porqué. En la máquina virtual que uso de testeo dispone de 700 MB y funciona bien, pero en producción no es lo recomendable).
Instalaremos la base de datos Cassandra y PHP-Driver que nos dará la extensión para PHP y una abstracción de la base de datos donde tenemos los métodos básicos para trabajar con Cassandra: insertar, actualizar, borrar, crear, etc.
PREPARANDO EL SISTEMA
Antes de empezar a instalar debemos actualizar el sistema operativo de la forma habitual:
apt-get update apt-get upgrade
Una vez actualizado el sistema empezamos a instalar.
INSTALANDO CASSANDRA
Lo primero que necesitamos hacer para instalar Cassandra es editar los repositorios de Debian:
nano /etc/apt/sources.list
Una vez que se abra el editor añadimos las siguientes lineas:
deb http://www.apache.org/dist/cassandra/debian/ 21x main deb-src http://www.apache.org/dist/cassandra/debian/ 21x main
Como podrás observar después de la ruta del repositorio se ha añadido «21x» esto indica el número de versión a obtener, en este caso es la versión actual de cassandra al crear este post. No se indica el número de parche, es decir, actualmente se puede descargar Cassandra 2.1.
Si dentro de unos meses sale la versión «2.2» solo tendrás que cambiar el uno por el dos.
Volvemos a consola y actualizamos los repositorios.
apt-get update
Nos dará un error en las claves gpg. Procedemos a actualizarlas con las siguientes instrucciones:
gpg --keyserver pgp.mit.edu --recv-keys F758CE318D77295D gpg --export --armor F758CE318D77295D | sudo apt-key add -
Ojo con el guión del final, hay que añadirlo, sino dará error.
Con el paquete 0.7.5 nos da otro error de clave gpg así que también instalamos esta de la misma manera:
gpg --keyserver pgp.mit.edu --recv-keys 2B5C1B00 gpg --export --armor 2B5C1B00 | sudo apt-key add -
También necesitarás añadir la siguiente clave:
gpg --keyserver pgp.mit.edu --recv-keys 0353B12C gpg --export --armor 0353B12C | sudo apt-key add -
Verificamos que tenemos el sistema actualizado.
apt-get update apt-get upgrade
Actualizamos todos los paquetes que aparezcan.
Procedemos a instalar el paquete de la base de datos NoSQL Cassandra:
apt-get install cassandra
Cassandra necesita Java para funcionar. Debian 8 ya dispone de OpenJDK en su versión 7, y aunque desde los desarrolladores de Cassandra no recomiendan su uso, para los ejemplos que vamos a desarrollar nos sirve.
En producción, o si vas a desarrollar un proyecto con Cassandra tendrás que instalar la última versión de Java de Oracle.
Por último, ejecutamos el siguiente comando para construir las dependencias:
dpkg-buildpackage -uc -us
Si el sistema no te reconoce el comando es porque te falta el paquete dpkg-dev. Instálalo de la forma habitual, y vuelve a intentarlo:
apt-get install dpkg-dev
INSTALANDO DATASTAX PHP-DRIVER PARA CASSANDRA
Datastax PHP driver, es el controlador y abstracción de base de datos que utilizaremos para conectar con Cassandra desde PHP. Este controlador nos da la posibilidad de trabajar tanto con CQL (Cassandra Query Language. Parecido a SQL) y/o el protocolo binario de Cassandra.
Aunque en la página del repositorio nos indican varias formas de instalar el controlador (https://github.com/datastax/php-driver/blob/master/ext/README.md), el único que me ha funcionado correctamente ha sido el de descargar las fuentes y compilarlo. Tú puedes probar los otros métodos, pero el que te voy a indicar funciona en Debian 8.
Las siguientes instrucciones deberías ejecutarlas en el ordenador de desarrollo y no en el servidor o máquina virtual donde tengas instalada la base de datos. (A no ser que la hayas instalado en el ordenador de desarrollo).
Instalamos algunos paquetes necesarios para realizar la compilación:
apt-get install g++ make cmake libuv-dev libssl-dev libgmp-dev php5 php5-dev openssl libpcre3-dev git
Primero necesitamos descargar las fuentes desde GitHub, utiliza el directorio que prefieras:
git clone https://github.com/datastax/php-driver.git cd php-driver git submodule update --init cd ext ./install.sh
Estos comandos nos ha creado un archivo llamado cassandra.so en /usr/lib/php5/20131226/ (el número del directorio puede variar en tu instalación. Revísalo).
Ahora creamos un archivo .ini para la extensión de PHP:
nano /etc/php5/mods-available/cassandra.ini
Dentro de ese archivo añadimos las siguientes líneas:
; configuration for PHP driver Cassandra extension=cassandra.so
Guardamos.
Le indicamos a PHP que nos active la extensión
php5enmod cassandra
Y reiniciamos Apache:
/etc/init.d/apache2 restart
Ahora si ejecutamos el siguiente comando para mostrar los módulos de PHP debería aparecernos Cassandra, si no es así es que algo a fallado:
php -m
INICIANDO CASSANDRA POR PRIMERA VEZ
Ahora que ya tenemos todo instalado es el momento de arrancar Cassandra. Esto es algo muy sencillo, solo tienes que ejecutar el siguiente comando:
cassandra -f
También tienes otras maneras de iniciar Cassandra. Por ejemplo como servicio:
service cassandra start
Si al iniciar Cassandra te da un error de memoria, haz lo siguiente:
Accede a /etc/cassandra y edita el archivo cassandra-env.sh:
cd /etc/cassandra nano cassandra-env.sh
Busca las siguientes dos líneas:
#MAX_HEAP_SIZE="4G" #HEAP_NEWSIZE="800M"
Descomenta las dos líneas, y sustituye los valores por unos más bajos. En mi caso he bajado MAX_HEAP_SIZE a 2G y HEAP_NEWSIZE lo he dejado como está.
Estas dos líneas permiten configurar la cantidad de memoria RAM que Cassandra utilizará.
Ahora vamos a utilizar el código de ejemplo que hay en el repositorio de PHP-Driver para probar que todo funciona correctamente.
Crea un archivo PHP con el siguiente contenido:
- <?php
- $cluster = Cassandra::cluster() // connects to localhost by default
- ->build();
- $keyspace = 'system';
- $session = $cluster->connect($keyspace); // create session, optionally scoped to a keyspace
- $statement = new Cassandra\SimpleStatement( // also supports prepared and batch statements
- 'SELECT keyspace_name, columnfamily_name FROM schema_columnfamilies'
- );
- $future = $session->executeAsync($statement); // fully asynchronous and easy parallel execution
- $result = $future->get(); // wait for the result, with an optional timeout
-
- foreach ($result as $row) { // results and rows implement Iterator, Countable and ArrayAccess
- como conocer a hombres solteros("The keyspace %s has a table called %s\n", $row['keyspace_name'], $row['columnfamily_name']);
- }
Este código devuelve las tablas que contiene el Keyspace «system» (Más adelante explicaré que es eso). Si te da error como este: «No hosts available for the control connection», puede ser por dos razones, o bien no está funcionando Cassandra, con lo que tendrás que iniciarla con uno de los comandos anteriores, o bien no la tienes en localhost sino en un servidor externo o máquina virtual.
Para resolverlo tendrás que sustituir las siguientes líneas:
- <?php
- $cluster = Cassandra::cluster() // connects to localhost by default
- ->build();
Por estas otras:
- <?php
- $cluster = Cassandra::cluster()
- ->withContactPoints('127.0.0.1')
- ->build();
Sí, solo añadimos «->withContactPoints(‘127.0.0.1’)», con este método le estamos indicando la ip de nuestro servidor. En tu caso es posible que tengas que sustituir «127.0.0.1» por la ip de tu servidor o máquina virtual. Más adelante explicaré cada método, pero para verificar que está funcionando todo correctamente es suficiente.
Con esto finalizamos la instalación de Cassandra para que pueda ser utilizada por PHP.
Integración continua: Automatizando la creación de proyectos WordPress, Drupal, Symfony, etc. (II)
0En el post anterior hemos actualizado el script que crea los repositorios, para poder añadirle unas cuantas acciones para automatizar la creación del proyecto (creación de directorios, directorios ignorados, etc.). Ahora vamos a desarrollar la segunda parte, que consistirá en la automatización de la instalación del cms o framework elegido.
Integración continua: Instalar y configurar nuestra máquina virtual con VirtualBox, por consola
2Este post veremos como crear una máquina virtual utilizando el software de virtualización VirtualBox. Esta máquina nos permitirá automatizar la configuración inicial de los proyectos (creación de bases de datos, configuración de crms, etc.). Además nos permitirá poder realizar test funcionales y otras tareas que nos ahorrarán gran cantidad de tiempo.
Integración continua: PHPMD, detectando problemas en el código
0PHPMD o PHP Mess Detector, es una herramienta que permite detectar posibles bugs, código poco optimizado, expresiones demasiado grandes, etc. Es una herramienta muy útil para controlar la calidad de nuestro software.
Esta herramienta es hija de PMD, una herramienta para la calidad del código en Java. Podéis informaros de más características de PHPMD en su web: http://phpmd.org/
La instalación es muy sencilla:
apt−get install imagemagick php5−imagick pear channel−discover pear.phpmd.org pear channel−discover pear.pdepend.org pear install −−alldeps phpmd/PHP_PMD
Para ejecutar PHPMD tu necesitas darle los archivos a parsear, un formato para la salida y las reglas a usar. Ejemplo:
phpmd . html codesize,unusedcode,naming,design −−reportfile ../messdetector.html −−exclude Tests/
Integración continua: instalando y configurando Jenkins
0Ya vistes la checklist del último post: http://www.interadictos.es/2014/08/11/integracion-continua-primeros-pasos/, ahora vamos a empezar a instalar y configurar algunas herramientas, para ir poco a poco uniéndolas.
¿Qué es Jenkins?
Jenkins es nuestro servidor de integración continua. Es una aplicación que permite automatizar una lista de tareas que le indiquemos. Estas tareas pueden ser iniciadas de forma manual, pero lo habitual será llamar a la primera tarea de la lista cada vez que se realice un commit en el repositorio, e ir concatenando tareas hasta finalizar la lista completa. Tranquilo si no te haces aun a la idea, a medida que vayamos avanzando con esta guía lo iras entendiendo.
Instalando Jenkins
Primero descargamos la key del servidor de Jenkins, que nos permitirá añadirlo al archivo sources.list:
wget −q −O − class="external free" style="color: #663366;" href="http://pkg.jenkins−ci.org/debian/jenkins−ci.org.key" rel="nofollow">http://pkg.jenkins−ci.org/debian/jenkins−ci.org.key | sudo apt−key add −
A continuación lo añadimos al archivo sources.list. Puedes añadirlo de esta manera o añadirlo a mano:
sudo sh −c 'echo deb class="external free" style="color: #663366;" href="http://pkg.jenkins−ci.org/debian" rel="nofollow">http://pkg.jenkins−ci.org/debian binary/ > /etc/apt/sources.list.d/jenkins.list'
Actuliazamos la lista de paquetes e instalamos:
sudo apt−get update sudo apt−get install jenkins
Ahora necesitamos poder acceder a él a través de la red, para ello vamos a crear el subdominio jenkins.ic.net. Para poder acceder por el subdominio jenkins.ic.net es necesario crear un virtual host con proxy inverso, para ello instalamos varios módulos de Apache2 necesarios:
sudo a2enmod proxy sudo a2enmod headers sudo a2enmod deflate sudo a2enmod proxy_http
Ahora creamos un virtualhost en /etc/apache2/sites-available llamado 001-jenkins.ic.net.conf (Podeis usar el nombre que quieras), con el siguiente contenido
*:80> ServerName jenkins.ic.net *> Order deny,allow Allow from all ProxyPreserveHost On ProxyPass / class="external free" style="color: #663366;" href="http://localhost:8080/" rel="nofollow">http://localhost:8080/ ProxyPassReverse / class="external free" style="color: #663366;" href="http://localhost:8080/" rel="nofollow">http://localhost:8080/
La ruta habitual para acceder a Jenkins sería http://localhost:8080, si pudieramos acceder desde el mismo servidor de integración continua, si lo hicieramos desde fuera sería http://ic.net:8080. Para evitar tener que recordar el número de puerto utilizamos el archivo anterior. Nos facilitará la vida.
Ahora creamos un enlace simbólico de este archivo en /etc/apache2/sites-enabled.
sudo ln −s /etc/apache2/sites−available/001−jenkins.ic.net.conf /etc/apache2/sites−enabled/001−jenkins.ic.net.conf
Reiniciamos apache con:
sudo /etc/init.d/apache2 reload
En nuestro ordenador tendremos que editar el archivo hosts, para indicarle al pc a qué ip debe dirigirse para encontrar el alojamiento de jenkins.ic.net. Añadimos la siguiente línea al archivo (sustituye la IP por la de tu servidor de integración continua):
192.168.1.40 jenkins.ic.net
Ahora podrás escribir el subdominio en el navegador para acceder a la página principal de Jenkins.
A partir de aquí te recomiendo que explores todas las opciones de Jenkins, además de echarle un ojo a la documentación: https://wiki.jenkins-ci.org/display/JENKINS/Use+Jenkins
En la administración de Jenkins puedes acceder al apartado de plugins, revísalos y podrás hacerte una idea de las posibilidades de esta herramienta.

Obligar a las apps de Android a instalarse en la tarjeta SD (desde Debian y Windows)
0Hace unos días, y después de una actualización de las apps que tengo instaladas en el móvil me apareció el mensajito de falta de espacio en la memoria. He de decir que mi móvil es un HTC Nexus One y que ya de por si venía escaso de memoria interna (sobre 256MB), que os voy a contar de la RAM de este móvil que no sepáis ya, aunque esto último no es algo que me preocupe en exceso ya que no uso el móvil para aplicaciones con grandes consumos de memoria (si, si, ni para jugar. Para eso está el Diablo III xD).
Pero aun así las aplicaciones ocupan espacio en la memoria del teléfono, y eso de estar pasándolas a la tarjeta SD a mano es repetitivo, así que me he puesto a buscar algo de información para obligar a android que instale las apps en la tarjeta SD.
Bueno, pues en esa búsqueda de información encontré la siguiente guía de como hacerlo, pero para Windows:
http://onsoftware.softonic.com/como-obligar-android-a-instalar-apps-en-la-tarjeta-sd
La mayoría de aplicaciones que pide ya las tenía instaladas desde hace un tiempo. Al aprender a programar para android la mayoría son obligatorias. Respecto a los drivers para el usb de HTC, en Debian no son necesarios (ni en ningún sistema GNU/Linux o MacOS X).
Por tanto solo hay que activar en el móvil la depuración por USB, ubicado en la siguiente ruta:
ajustes -> aplicaciones -> desarrollo
Una vez activada esa opción conectamos el cable USB al móvil y luego al PC.
Abrimos una consola y nos identificamos como root.
Nos vamos a la ruta donde se instaló el SDK de Android, en mi caso lo encontré en:
/var/local/android-sdk-linux
En esa ruta accedemos a la carpeta platform-tools, y ejecutamos el siguiente comando:
./adb device
Esperamos a que nos devuelva el resultado, donde podremos ver el número de serie del dispositivo.
Comprobamos con netstat si el puerto 5037 está siendo usado, si es así tendremos que matar el proceso que lo esté utilizando.
Por último ejecutamos el siguiente comando:
./adb shell pm setInstallLocation 2
Cuando nos devuelva al símbolo del sistema desconectamos el móvil del PC y lo reiniciamos.
Ya tenemos activada la opción para que Android instale las aplicaciones en la tarjeta SD en vez de en la memoria interna.

Cassandra 1.x y PHP para desarrolladores SQL: Instalación
4La base de datos No-SQL Cassandra fue creada por Facebook a causa de la necesidad de disponer de una base de datos distribuida de alto rendimiento, flexible, tolerante a fallos, escalable y que fuese capaz de procesar grandes cantidades de datos, más tarde fue liberada bajo licencia Apache y actualmente es utilizada principalmente por empresas de internet con proyectos con un alto uso de base de datos como Twitter.
En esta serie de artículos iré desgranando la instalación, funcionamiento y desarrollo de aplicaciones en PHP con Cassandra, comparando las sentencias utilizadas para insertar, actualizar, etc de SQL con los métodos a utilizar en Cassandra. Por desgracia al ser algo completamente distinto a cualquier base de datos SQL tendré que añadir algo de teoría, pero intentaré que os resulte lo más ameno posible.
Al toro.
REQUISITOS
Para la realización de esta guía se utilizará Debian Squeeze como sistema operativo.
Doy por hecho que ya se dispone de un servidor web Apache con PHP instalado en la máquina de testeo que se esté usando. Las aplicaciones que se van a instalar han sido probadas en una máquina virtual Debian utilizando como aplicación de virtualización, VirtualBox instalado en un host Windows XP SP3.
En un servidor de producción recomiendo que tenga bastante RAM (por encima de 1GB, ya veremos más adelante el porqué. En la máquina virtual que uso de testeo dispone de 700 MB y funciona bien, pero en producción no es lo recomendable).
Instalaremos la base de datos Cassandra, el protocolo para conectar con ella y que nos generará el módulo para poder trabajar desde PHP, y PHPCassa que será la abstracción de la base de datos donde tenemos los métodos básicos para trabajar con Cassandra: insertar, actualizar, borrar, crear, etc.
PREPARANDO EL SISTEMA
Antes de empezar a instalar debemos actualizar el sistema operativos de la forma habitual:
apt-get update apt-get upgrade
Una vez actualizado el sistema empezamos a instalar.
INSTALANDO CASSANDRA
Lo primero que necesitamos hacer para instalar Cassandra es editar los repositorios de Debian:
nano /etc/apt/sources.list
Una vez que se abra el editor añadimos las siguientes lineas:
deb http://www.apache.org/dist/cassandra/debian/ 11x main deb-src http://www.apache.org/dist/cassandra/debian/ 11x main
Como podrás observar después de la ruta del repositorio se ha añadido «11x» esto indica el número de versión a obtener, en este caso es la versión actual de cassandra al crear este post. No se indica el número de parche, es decir, actualmente se puede descargar Cassandra 1.1.
Si dentro de unos meses sale la versión «1.2» solo tendrás que cambiar el uno por el dos.
Volvemos a consola y actualizamos los repositorios.
apt-get update
Nos dará un error en las claves gpg. Procedemos a actualizarlas con las siguientes instrucciones:
gpg --keyserver pgp.mit.edu --recv-keys F758CE318D77295D gpg --export --armor F758CE318D77295D | sudo apt-key add -
Ojo con el guión del final, hay que añadirlo sino dará error.
Con el paquete 0.7.5 nos da otro error de clave gpg así que también instalamos esta de la misma manera:
gpg --keyserver pgp.mit.edu --recv-keys 2B5C1B00 gpg --export --armor 2B5C1B00 | sudo apt-key add -
Verificamos que tenemos el sistema actualizado.
apt-get update apt-get upgrade
Actualizamos todos los paquetes que aparezcan.
Procedemos a instalar el paquete de la base de datos NoSQL Cassandra:
apt-get install cassandra
Cassandra necesita a Java para funcionar para ello, una vez instalado Cassandra instalaremos el paquete sun-java6-jdk de la siguiente manera:
apt-get install sun-java6-jdk
En el caso de que no encuentre el paquete verificar que los repositorios de Debian son correctos. Verifica la versión de Java con:
java -version
Debería aparecer algo así:
java version "1.6.0_20" Java(TM) SE Runtime Environment (build 1.6.0_20-b02) Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode, sharing)
Se recomienda usar la versión de Java de Sun (Sun JDK) en vez de Open JDK debido a un bug encontrado en el mismo.
Si os muestra algo distinto a esto, escribid el siguiente comando:
update-alternatives --config javac
Os mostrará un listado con los diferentes paquetes instalados en el sistema que pueden ser utilizados para trabajar con Java. Nosotros usaremos el paquete de Sun, así que pulsa el número del paquete para que Debian lo utilice.
Por último, ejecutamos el siguiente comando para construir las dependencias:
dpkg-buildpackage -uc -us
INSTALANDO THRIFT Y LA EXTENSIÓN PARA PHP
[ci-box type=»info»]PHPCassa ya incluye Thrift en el archivo descargable, con lo que puedes saltarte esta parte si quieres. En la sección de PHPCassa se trata la creación del archivo .so con los archivos contenidos en el paquete de PHPCassa[/ci-box]
Thrift es tan solo el protocolo de conexión para poder utilizar Cassandra. Aunque en la extensión para PHP existen métodos para poder trabajar con cassandra, requieren bastante código por eso utilizaremos PHPCassa como abstracción de la base de datos.
Primero descargamos Thrift desde su web: http://thrift.apache.org/download/ y descomprimimos
tar -xzvf thrift-0.8.0.tar.gz
Nos colocamos dentro de la carpeta de Thrift.
Antes de hacer nada ahí instalamos algunos paquetes que nos serán necesarios:
apt-get install libboost-dev automake libtool flex bison pkg-config g++
Una vez instalados esos paquetes configuramos y construimos Thrift:
./configure make
Construimos la interfaz de PHP Thrift para Cassandra:
./compiler/cpp/thrift -gen php ../ruta-a-cassandra/interface/cassandra.thrift
Copiamos archivos necesario para que PHPCassa funcione:
mkdir -p /usr/share/php/Thrift cp -R gen-php/ /usr/share/php/Thrift/packages/ cp -R lib/php/src/* /usr/share/php/Thrift/
Cambiamos al directorio del protocolo de Thrif: ruta-a-thrift/lib/php/src/ext/thrift_protocol.
Instalamos el paquete para construir las extensiones de PHP:
apt-get install php5-dev
Construimos la extensión:
phpize ./configure --enable-thrift_protocol make
Copiamos la extensión a la siguiente carpeta (cuidado: dependiendo del sistema el nombre de la carpeta de destino puede variar):
cp modules/thrift_protocol.so /usr/lib/php5/20060613/
Habilitamos el módulo creando el archivo /etc/php5/conf.d/thrift_protocol.ini con el siguiente texto:
extension=thrift_protocol.so
Comprobamos la instalación:
php -i | grep -v "PWD" | grep "thrift_protocol"
Si todo ha ido bien, reiniciamos Apache:
/etc/init.d/apache2 restart
Iniciamos Cassandra:
/opt/cassandra/bin/cassandra
Y probamos la consola para comprobar que todo ha ido correctamente:
/opt/cassandra/bin/cassandra-cli -host localhost -port 9160
Debería indicarte algo así:
Connected to: "Test Cluster" on localhost/9160 Welcome to cassandra CLI.
INSTALANDO PHPCassa
Bajamos PHPCassa desde github: https://github.com/thobbs/phpcassa
Descomprimimos a una carpeta dentro del proyecto en el que vayamos a utilizar PHPCassa, para el tutorial usaré /var/www/prueba_cassandra/phpcassa.
Si aun no has creado el archivo .so para que PHP pueda trabajar con Cassandra, escribe los siguientes comandos en tu consola:
cd lib/thrift/ext/thrift_protocol phpize ./configure make sudo make install
Una vez finalizados estos pasos edita el archivo php.ini y añade la siguiente línea:
extension=thrift_protocol.so
Con esto finalizamos la instalación de Cassandra para que pueda ser utilizada por PHP.
Cassandra y PHP para desarrolladores SQL: Instalación
6La base de datos No-SQL Cassandra fue creada por Facebook a causa de la necesidad de disponer de una base de datos distribuida de alto rendimiento, flexible, tolerante a fallos, escalable y que fuese capaz de procesar grandes cantidades de datos, más tarde fue liberada bajo licencia Apache y actualmente es utilizada principalmente por empresas de internet con proyectos con un alto uso de base de datos como Twitter.
En esta serie de artículos iré desgranando la instalación, funcionamiento y desarrollo de aplicaciones en PHP con Cassandra, comparando las sentencias utilizadas para insertar, actualizar, etc de SQL con los métodos a utilizar en Cassandra. Por desgracia al ser algo completamente distinto a cualquier base de datos SQL tendré que añadir algo de teoría, pero intentaré que os resulte lo más ameno posible.
Al toro.
REQUISITOS
Para la realización de esta guía se utilizará Debian Squeeze como sistema operativo. En algunos de los links que dejo como bibliografía al final del artículo existen ejemplos para realizar la instalación en otros sistemas operativos, principalmente CentOS.
Doy por hecho que ya se dispone de un servidor web Apache con PHP instalado en la máquina de testeo que se esté usando. Las aplicaciones que se van a instalar han sido probadas en una máquina virtual Debian utilizando como aplicación de virtualización, VirtualBox instalado en un host Windows XP SP3.
En un servidor de producción recomiendo que tenga bastante RAM (por encima de 1GB, ya veremos más adelante el porqué. En la máquina virtual que uso de testeo dispone de 700 MB y funciona bien, pero en producción no es lo recomendable).
Instalaremos la base de datos Cassandra, el protocolo para conectar con ella y que nos generará el módulo para poder trabajar desde PHP, y PHPCassa que será la abstracción de la base de datos donde tenemos los métodos básicos para trabajar con Cassandra: insertar, actualizar, borrar, crear, etc.
PREPARANDO EL SISTEMA
Antes de empezar a instalar debemos actualizar el sistema operativos de la forma habitual:
apt-get update
apt-get upgrade
Una vez actualizado el sistema empezamos a instalar.
INSTALANDO CASSANDRA
Lo primero que necesitamos hacer para instalar Cassandra es editar los repositorios de Debian:
- nano /etc/apt/sources.list
Una vez que se abra el editor añadimos las siguientes lineas:
deb http://www.apache.org/dist/cassandra/debian/ 08x main
deb-src http://www.apache.org/dist/cassandra/debian/ 08x main
Como podrás observar después de la ruta del repositorio se ha añadido «08x» estoy indica el número de versión a obtener, en este caso es la versión actual de cassandra al crear este post. No se indica el número de parche, es decir, actualmente se puede descargar Cassandra 8.4, el «.4» lo obviamos a la hora de los repositorios.
Si dentro de unos meses sale la versión «9.0» solo tendrás que cambiar el ocho por el nueve.
Volvemos a consola y actualizamos los repositorios.
apt-get update
Nos dará un error en las claves gpg. Procedemos a actualizarlas con las siguientes instrucciones:
- gpg --keyserver pgp.mit.edu --recv-keys F758CE318D77295D
- gpg --export --armor F758CE318D77295D | sudo apt-key add -
Ojo con el guión del final, hay que añadirlo sino dará error.
Con el paquete 0.7.5 nos da otro error de clave gpg así que también instalamos esta de la misma manera:
gpg --keyserver pgp.mit.edu --recv-keys 2B5C1B00
gpg --export --armor 2B5C1B00 | sudo apt-key add -
Verificamos que tenemos el sistema actualizado.
- apt-get update
- apt-get upgrade
Actualizamos todos los paquetes que aparezcan.
Procedemos a instalar el paquete de la base de datos NoSQL Cassandra:
- apt-get install cassandra
Cassandra necesita a Java para funcionar para ello, una vez instalado Cassandra instalaremos el paquete sun-java6-jdk de la siguiente manera:
- apt-get install sun-java6-jdk
En el caso de que no encuentre el paquete verificar que los repositorios de Debian son correctos. Verifica la versión de Java con:
java -version
Debería aparecer algo así:
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode, sharing)
Se recomienda usar la versión de Java de Sun (Sun JDK) en vez de Open JDK debido a un bug encontrado en el mismo.
Si os muestra algo distinto a esto, escribid el siguiente comando:
update-alternatives --config javac
Os mostrará un listado con los diferentes paquetes instalados en el sistema que pueden ser utilizados para trabajar con Java. Nosotros usaremos el paquete de Sun, así que pulsa el número del paquete para que Debian lo utilice.
Por último, ejecutamos el siguiente comando para construir las dependencias:
dpkg-buildpackage -uc -us
Una vez instalado procedemos a realizar la configuración de Cassandra:
Creamos varias carpetas necesarias si no han sido creadas automáticamente:
- mkdir -p {callouts,commitlog,data,saved,caches,staging}
- mkdir /var/log/cassandra
Damos permisos a esta carpeta:
chmod -R 777 /var/log/cassandra/
Creamos el archivo /var/log/cassandra/system.log y le damos permisos:
chmod -R 777 /var/log/cassandra/system.log
INSTALANDO THRIFT Y LA EXTENSIÓN PARA PHP
Thrift es tan solo el protocolo de conexión para poder utilizar Cassandra. Aunque en la extensión para PHP existen métodos para poder trabajar con cassandra, requieren bastante código por eso utilizaremos PHPCassa como abstracción de la base de datos.
Primero descargamos Thrift desde su web: http://thrift.apache.org/download/ y descomprimimos
- tar -xzvf thrift-0.7.0.tar.gz
Nos colocamos dentro de la carpeta de Thrift.
Antes de hacer nada ahí instalamos algunos paquetes que nos serán necesarios:
- apt-get install libboost-dev automake libtool flex bison pkg-config g++
Una vez instalados esos paquetes configuramos y construimos Thrift:
- ./configure
- make
Construimos la interfaz de PHP Thrift para Cassandra:
- ./compiler/cpp/thrift -gen php ../ruta-a-cassandra/interface/cassandra.thrift
Copiamos archivos necesario para que PHPCassa funcione:
- mkdir -p /usr/share/php/Thrift
- cp -R gen-php/ /usr/share/php/Thrift/packages/
- cp -R lib/php/src/* /usr/share/php/Thrift/
Cambiamos al directorio del protocolo de Thrif: ruta-a-thrift/lib/php/src/ext/thrift_protocol.
Instalamos el paquete para construir las extensiones de PHP:
- apt-get install php5-dev
Construimos la extensión:
- phpize
- ./configure --enable-thrift_protocol
- make
Copiamos la extensión a la siguiente carpeta (cuidado: dependiendo del sistema el nombre de la carpeta de destino puede variar):
- cp modules/thrift_protocol.so /usr/lib/php5/20060613/
Habilitamos el módulo creando el archivo /etc/php5/conf.d/thrift_protocol.ini con el siguiente texto:
- extension=thrift_protocol.so
Comprobamos la instalación:
- php -i | grep -v "PWD" | grep "thrift_protocol"
Si todo ha ido bien, reiniciamos Apache:
- /etc/init.d/apache2 restart
Iniciamos Cassandra:
- /opt/cassandra/bin/cassandra -f
Y probamos la consola para comprobar que todo ha ido correctamente:
- /opt/cassandra/bin/cassandra-cli -host localhost -port 9160
Debería indicarte algo así:
- Connected to: "Test Cluster" on localhost/9160
- Welcome to cassandra CLI.
INSTALANDO PHPCassa
ACTUALIZACIÓN 20/05/2012
Hace un par de semanas se publicó una nueva versión de phpCassa. Este tutorial está basado en la versión 0.8.a.2 de PHPCassa.Te recomiendo que te descargues esta versión de PHPCassa para realizar el tutorial.
He actualizado el tutorial a la versión 1.0.a.3 de PHPCassa. Para seguir el tutorial actualizado entra en Cassandra y PHP para desarrolladores SQL.
Bajamos PHPCassa desde github: https://github.com/thobbs/phpcassa
Al descomprimir verás cuatro archivos PHP, copia esos archivos a una carpeta del proyecto en el que estés trabajando.
Abre el archivo «connection.php», la primera línea será una variable global: $GLOBALS[‘THRIFT_ROOT’], modifica su valor con la ruta hacia los archivos Thrift que copiamos con anterioridad. En mi caso se quedaría así:
- <?php
- $GLOBALS['THRIFT_ROOT'] = '/usr/share/php/Thrift/';
Con esto finalizamos la instalación de Cassandra para que pueda ser utilizada por PHP.
Os dejo algunas páginas de interés:
CASSANDRA
http://cassandra.apache.org/
http://cassandra.apache.org/download/
http://wiki.apache.org/cassandra/
http://www.apache.org/dist/cassandra/debian/dists/
http://wiki.apache.org/cassandra/DebianPackaging
http://wiki.apache.org/cassandra/CloudConfig
http://cassandra-user-incubator-apache-org.3065146.n2.nabble.com/Cannot-connect-to-Cassandra-td6463518.html
http://sentidoweb.com/2010/03/18/instalar-cassandra-en-ubuntu.php
http://gettingstartedwithcassandra.blogspot.com/2011/06/exception-connecting-to-localhost9160.html
https://wiki.fourkitchens.com/display/PF/Using+Cassandra+with+PHP
http://es.paperblog.com/instalar-cassandra-en-ubuntu-78327/
http://www.unixmen.com/linux-tutorials/960-install-nosql-cassandra-db-in-ubuntu-via-ppa-repository
http://wiki.apache.org/cassandra/ClientOptions
THRIFT
http://thrift.apache.org/
PHPCassa
https://github.com/thobbs/phpcassa
http://groups.google.com/group/phpcassa?pli=1

Instalar Eaccelerator y Zend Optimizer en Plesk y CentOS
25Fin de semana entretenido además de atareado. Y por fin puedo decir que he conseguido instalar Eaccelerator y Zend Optimizer en el VPS.
Después de asegurarme de que todo ha funcionado correctamente, os escribo este post con la pequeña odisea.
Instalar yum
En el último post que escribí os conté que no fui capaz de instalar nada debido a que el comando yum no estaba disponible en el VPS. Bien pues vamos al tema:
Para los que no lo sepais, el comando yum es el «clon» del comando apt-get de las distribuciones basadas en Debian; yum es el comando para las distribuciones RedHat, y CentOS es una de estas. Ambos comandos sirven para instalar, desinstalar, actualizar (tanto programas como la misma distribución), etc.
Para poder usar el comando yum es necesario instalar un paquete para Plesk. Los comandos necesarios son los siguientes:
wget -q -O – http://www.atomicorp.com/installers/atomic |sh
Una vez instalado ya podremos usar el comando yum perfectamente. Así que… ¡Hala! A actualizar el servidor:
yum upgrade
PHP
Para poder instalar Eaccelerator es necesario disponer de PHP 5.x, comprueba tu versión a través del siguiente comando:
php -v
Podeis probar a actualizar la versión de vuestro PHP si veis que no es la actual:
yum update php
Instalar Eaccelerator
Para poder instalar Eaccelerator necesitas varios paquetes que deben estar instalados en tu servidor:
PHP 5, autoconf, automake, libtool y m4
Una vez comprobado que tienes estos paquetes instalados procede a descargar Eaccelerator:
wget http://bart.eaccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.zip
Descomprimimos:
unzip eaccelerator-0.9.6.1.zip
Accedemos a la carpeta que se ha creado:
cd eaccelerator-0.9.6.1
Y ejecutamos los siguientes comandos:
phpize
./configure
make
make install
Con estos comandos Eaccelerator se instalará y solo nos quedaría reiniciar Apache:
/etc/init.d/httpd restart
O bien:
service httpd restart
Una vez reiniciado Apache debería mostrarnos, en la versión de php, que Eaccelerator está instalado:
php -v
nos debería mostrar algo como esto:
PHP 5.2.13 (cli) (built: Jun 2 2010 16:29:01)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies
with eAccelerator v0.9.6.1, Copyright (c) 2004-2010 eAccelerator, by eAccelerator
with Zend Optimizer v3.3.9, Copyright (c) 1998-2009, by Zend Technologies
Zend Optimizer
Con Eaccelerator se consigue que el consumo de memoria se reduzca considerablemente, pero aun se puede reducir más. Para ello instalaremos Zend Optimizer en nuestro servidor.
Esta aplicación es mucho más fácil de instalar que la anterior:
cd /usr/local/src
wget http://www.eth0.us/files/ZendOptimizer-3.3.9-linux-glibc23-x86_64.tar.gz
tar -zxf ZendOptimizer-3.3.9-linux-glibc23-x86_64.tar.gz
cd ZendOptimizer-3.3.9-linux-glibc23-x86_64
./install
Ya está. Reinicia Apache como he indicado anteriormente y comprueba, en la versión de php, que Zend Optimizer está instalado correctamente.
WordPress
Para los que hayais llegado hasta este post buscando como optimizar WordPress, os diré que con estas dos aplicaciones se puede reducir el consumo de memoría a una cuarta parte de lo habitual. Así se ha quedado mi WordPress después de instalar Eaccelerator y Zend Optimizer:
WordPress pasó de consumir 41,79 MB a 11,7 MB (72% de reducción).
Instalar PEAR desde WAMP + Bonus track: instalar Symfony desde PEAR
0Hace tiempo que quería crear un post explicando con instalar PEAR en wamp, y además, desde hace unos meses, crear otro explicación como instalar Symfony desde PEAR. y hoy navegando un poco por la red, he encontrado dos fabulosos tutoriales que explica a la perfección estos dos temas. Así que, sin más preambulos, os dejo los links a estos dos geniales post: