domingo, 21 de marzo de 2010

CakePHP: instalación en public_html bajo Opensuse 11.2

El objetivo es intalar el framework CakePhp en el directorio public_html de un usuario en concreto, para que este usuario pueda usar dicho framework. Presuponemos instalado y funcionando apache2 y php5, bajo una máquina opensuse 11.2. Presuponemos que esta con los valores por defecto ( con la directiva UserDir habilitada) de modo que el usuario puede acceder a su web con la siguiente URL:
http://localhost/~usuario

Los pasos son los siguientes:
1- Descargar CakePHP desde su página principal http://cakephp.org/ :
wget http://github.com/cakephp/cakephp1x/tarball/1.2.6

2- Descomprimimos el archivo en el directorio public_html del usuario (ej dieguz2), de modo que al hacer un ls quede así:
/home/dieguz2/public_html/app
/home/dieguz2/public_html/cake
/home/dieguz2/public_html/plugins
/home/dieguz2/public_html/vendors
/home/dieguz2/public_html/index.php
/home/dieguz2/public_html/README
Tras este paso deberiamos poder conectar al servidor y ver la página de CakePHP, nos saldrán varios errores, que corregiremos a continuación:
http://localhost/~dieguz2/index.php
Si no tenemos activado el MOD_REWRITE de apache veremos la página (sin estilos ni imágenes), con una serie de errores,en todos los casos HAY que activar el rewrite. Si lo tenemos activado tenemos que hacer los cambios explicados en el siguiente paso.

Para activar el módulo rewrite, podemos hacerlo a través de yast (servidor http /Módulos del servidor / rewrite / habilitar ) o a través de la linea de comando:
a2enmod rewrite
sudo /etc/init.d/apache2 force-reload

3- Si tenemos activado el MOD_REWRITE en apache, nos saldrá el mensaje "Objeto no encontrado", tenemos que hacer cambios en dos archivos .htaccess añadiendo la directiva RewriteBase de modo que queden así:
/home/dieguz2/public_html/.htaccess

RewriteEngine on
RewriteRule (.*) app/webroot/$1 [L]
RewriteBase /~dieguz2/

/home/dieguz2/public_html/app/webroot/.htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
RewriteBase /~dieguz2/

Si tenemos algun problema adicional (como que no hace caso de los .htaccess tendremos que activar el AllowOverride en apache.

4- Cambiamos los permisos del directorio tmp para evitar que nos de errores de escritura ( CAKE Warning (512) app/tmp/cache/ is not writable [CORE/cake/libs/cache/file.php, line 263])
chmod 777 -R /home/dieguz2/public_html/app/tmp

5- Editamos el archivo:
vi /home/dieguz2/public_html/app/config/core.php
Buscamos la cadena "Security.salt" cambiamos la cadena por defecto por otros numeros y letras aleatorios. por ejemplo, podría quedar asi
Configure::write('Security.salt', 'imaqm1897dfnAsk1938ajmKnau812na2A2kajsai');

Hacemos lo mismo con la "cipherSeed", pero en este caso usamos sólo números aleatorios
Configure::write('Security.cipherSeed', '16359506657458542996042684645');

Con estos cambios evitaremos los siguientes errores:
Notice (1024): Please change the value of 'Security.salt' in app/config/core.php to a salt value specific to your application [CORE/cake/libs/debugger.php, line 674]
Notice (1024): Please change the value of 'Security.cipherSeed' in app/config/core.php to a numeric (digits only) seed value specific to your application [CORE/cake/libs/debugger.php, line 678]

6- Si no tenemos definida una zona horaria en php, podemos tener un mensaje de error como este:
[http://php.net/function.strtotime]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting

Para corregirlo editamos como root el archivo php.ini (/etc/php5/apache2/php.ini) fijando la variable a la zona horaria que queramos (listado de zonas horarias en php):
date.timezone = Europe/Madrid
7- Finalmente pasamos a editar el archivo de configuración de la base de datos. En CakePhp nos envía un archivo de ejemplo para mysql, lo copiaremos y editaremos con los valores que necesitemos (usuario,contraseña...) para conectar con nuestra base de datos (que debe estar ejecutándose):
cp /home/dieguz2/public_html/app/config/database.php.default /home/dieguz2/public_html/app/config/database.php
vi /home/dieguz2/public_html/app/config/database.php

El resultado final ( en la imagen no he configurado la BD) debe ser algo similar a esto:

2 comentarios:

Perkin dijo...

Muchas gracias por la data. He estado lidiando un largo rato con el asunto de los rewrites y el directorio de usuario pero con tu artículo pude solucionarlo.

Muchas Gracias!

Rox dijo...

buenisimo muchas gracias! estaba buscando como sabar esas advertencias, aunque no se si les paso a todos, pero las lineas que indica en el core.php a modificar, por ejemplo, no cohinicden con el lugar en el que estan verdaderamente situadas.. beuno en fin anduvo.