Publicado el Domingo 20 de Enero del 2008 @ 14:46 por Armonth.
Con la “desaparición de mod_php” en Dreamhost y el uso cada vez mayor de PHP 5 por parte de la gente se me está haciendo hasta normal recibir consultas de cómo compilar PHP con opciones adicionales como eAccelerator o APC.
Hace unos días me hicieron la última consulta y acabe cayendo en una cosa: si PHP se ejecuta como mod_php no hay mucho que hacer pero si lo hace como CGI (o FastCGI) ¿por qué no se debe poder usar tu propio php.ini?. Total es sólo un proceso más en el ordenador, independiente del servidor.
Justamente eso andaba buscando cuando encontré una forma sencilla de cargar PHP como CGI (FastCGI) al mismo tiempo que se compila eAccelerator y se pasa a usar tu propio php.ini, ¡y sin compilar PHP! (que es lo que más mata al personal).
Es posible que las versiones no sean las mismas, tened en cuenta que el artículo es de junio del año pasado aunque con versiones más recientes no (me ha) dado problemas.
mod_php versus cgi/fastcgiComo ya se advirtió en el artículo anterior al respecto, si se va al panel de dreamhost y se activa PHP4/PHP5 en lugar de “mod_php” se pierde la posibilidad de volver a mod_php el cual es 10 veces más rápido (consume de media 10 veces menos) que la versión CGI. Además de que con CGI pueden controlar tu consumo de CPU.
Si a eso le añadimos que pasar de CGI a FastCGI aumenta la velocidad entre 6 y 9 veces pero no siempre funciona en todos los servidores de DH lo mejor que podemos hacer es tener en cuenta este artículo sólo para sitios que:
mod_php sólo está para PHP 4).mod_php.mod_php.Lo primero es instalar autoconf y automake ya que son necesarios para compilar eAccelerator, también son necesarios libtool y m4 pero estos ya los usa Dreamhost.
mkdir $HOME/gnu
wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.61.tar.gz
tar -xvzf autoconf-2.61.tar.gz
cd autoconf-2.61
./configure –prefix=$HOME/gnu
make
make install
export PATH=$PATH:$HOME/gnu
wget http://ftp.gnu.org/gnu/automake/automake-1.9.tar.gz
tar -xvzf automake-1.9.tar.gz
./configure –prefix=$HOME/gnu
make
make install
Con esto ya tendremos instalados automake y autoconf en $HOME/gnu, además de que el export permitirá compilar eAccelerator encontrando las dependencias en los sitios habituales + $HOME/gnu.
wget http://bart.eaccelerator.net/source/0.9.5.1/eaccelerator-0.9.5.1.tar.bz2
tar -xjf eaccelerator-0.9.5.1.tar.bz2
cd eaccelerator-0.9.5
export PHP_PREFIX=/usr/local/php5/bin
$PHP_PREFIX/phpize
./configure –prefix=$HOME/gnu –enable-eaccelerator-shared –with-php-config=$PHP_PREFIX/php-config
make
mkdir $HOME/phpini
mkdir $HOME/phpini/lib
cp modules/eaccelerator.so $HOME/phpini/lib
Nota: he corregido el último “cp” ya que guardaba el eaccelerator.so en phpini en lugar de phpini/lib y luego en el php.ini lo referenciaba a phpini/lib por lo que es un error.
Con esto ya tenemos eAccelerator compilado y guardado en $HOME/phpini/lib, ahora copiamos el php.ini:
cp /etc/php5/cgi/php.ini $HOME/phpini/php.ini
Abrimos el php.ini y lo primero que modificaremos es el campo extension_dir para apuntar a /home/TU-USUARIO/phpini/lib.
Si no sabes que usuario tienes (antes podíamos usar la variable $HOME pero ahora no es recomendable) podemos verla con un echo $HOME.
Luego en el php.ini añadimos debajo de la sección “dynamic extensions” lo siguiente:
extension="eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/home/TU-USUARIO/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="0"
eaccelerator.compress_level="9"
Apunte sobre compress_level=9 + compress = 0, no es completamente necesario ya que desactivamos la compresión pero es necesario si queremos hacer compresión de cache.
También hay que crear el directorio $HOME/tmp/eaccelerator donde se guardan los temporales:
mkdir -p $HOME/tmp/eaccelerator
El sistema es casi igual a la vez anterior, nos vamos al dominio que queramos tener con FastCGI — ej: $HOME/tu-dominio — y creamos el fichero fastcgi.fcgi (según articulo) o php5-wrapper.fcgi (según documentación oficial de DH).
En él tenemos que añadir el siguiente código:
#!/bin/sh
export PHPRC=/home/TU-USUARIO/phpini
export PHP_FCGI_CHILDREN=3
exec /dh/cgi-system/php5.cgi
Como se puede ver, igualito que el anterior si obviamos el PHPRC que es la variable para que cargue nuestro php.ini en lugar del de dreamhost.
Guardamos y modificamos el .htaccess al principio del todo para que todas las peticiones PHP vayan al fichero fastcgi.fcgi:
AddHandler fastcgi-script fcg fcgi fpl
AddHandler php5-fastcgi .php
Action php5-fastcgi /fastcgi.fcgi
Options +ExecCGI
Luego matamos todos los procesos php5.cgi (killall php5.cgi) para que empiece a trabajar.
Toca crear un fichero phpinfo.php que contenga:
<?php phpinfo() ?>
Y abrirlo para ver si se ha creado una sección de eAccelerator. Si es así y además indica que hay scripts cacheados ya está funcionando.
El proceso es igual que activar FastCGI sólo que le añadimos un php.ini personalizado, aprovechando esa circunstancia podemos añadir nuevas extensiones que toca compilar.
Ningún misterio pero altamente útil, a partir de ahí se pueden añadir todas las extensiones que se quieran (siempre que funcionen bajo FastCGI) compilando y añadiendo luego la información al php.ini, solamente hace falta matar los procesos php5.cgi.
Duda:
Se supone que php5-memcache hace lo mismo que eAccelerator no?. O al menos persiguen el mismo fin si no me equivoco.
Si esto es así, ¿cual da mejores resultados en un servidor con poca memoria RAM disponible?.
Pero esta modificación es para un servidor dedicado no? Que tal van estos?
Armonth segui tus pasos al pie de la letra, casi que me dedique a copiar y pegar, pero al llegar al comando $PHP_PREFIX/phpize me salio el siguiente mensaje.
Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF
environment variable is set correctly and then rerun this script.
que hice mal?
Armounth ya encontré el problema y lo solucione con el siguiente comando
export PATH=$PATH:/$HOME/gnu/bin
ahora lo que pasa es que no encuentro la sección “dynamic extensions” en el php.ini
Gracias Armonth me toco meterle el “Dynamic Extensions” por que no estaba, ya termine de seguir tu tuto pero cuando edito el .htaccess y lo pongo a correr con fastcgi, no pasa nada, revise el phpinfo y al parecer es que todavía sigue usando el php.ini en /etc/php5/cgi y no en /home/camilo/ phpini/
creo que por eso es la falla pero no se como hacer para que use mi php.ini modificado simplemente sigue usando el de dreamhost.