Recibe actualizaciones por: rss | twitter | email

Apache, PHP, MySQL en FreeBSD

Escrito por:
Fecha: 2015-02-01 16:05:00 00:00

Introducción

Siempre me gustó el estilo BSD de Slackware, y ahora que Digital Ocean ofrece FreeBSD, estoy aprovechando para pasar un rato trabajando con él.

Hoy vamos a ver como instalar y configurar Apache 2.4, MariaDB y PHP en FreeBSD 10, vamos a optimizarlo para que puede soportar carga sin requerir grandes prestaciones del servidor. Lo lograremos configurando de la siguiente manera:

  • Apache Event MPM (trabaja de la misma forma que Nginx, por lo que es muy eficiente)
  • PHP-FPM, PHP es un servicio independiente de Apache, lo que hace que solo sea invocado cuando se requiere y no para servir contenido estático.
  • MariaDB, que deriva de MySQL, manteniendo total compatibilidad con esta última, pero agregando mejoras que MySQL no posee.

Apache 2.4 Event MPM

Vamos primero con Apache, como dije antes, vamos a instalarlo compilandolo para usar MPM Event, que funciona mucho más rápido que el prefork que usa por defecto.

cd /usr/ports/www/apache24/
make install clean

Asegurate de seleccionar estos módulos a la hora de compilar.

| [x] ACCESS_COMPAT      mod_access compatibility
| [x] ACTIONS            Action triggering on requests 
| [x] ALIAS              Mapping of requests to different filesystem parts
| [x] AUTHZ_CORE         Core authorization provider vector module
| [x] AUTHZ_HOST         Host-based authorization control
| [x] DIR                Directory request handling
|+[x] EXPIRES            Expires header control
|+[x] HEADERS            HTTP header control
|+[x] REWRITE            Rule based URL manipulation
|+[x] VERSION            Determining httpd version in config files
|+[x] VHOST_ALIAS        Mass virtual hosting
|+(*) MPM_EVENT          MPM worker variant with the goal of consuming
| [x] MIME               Mapp file-ext. to MIME (recommended)
| [x] PROXY              Build enabled PROXY modules
| [x] PROXY_FCGI         FastCGI support module for mod_proxy

A mi personalmente me gusta tener los servidores virtuales en archivos separados, al estilo de Ubuntu, y no como parte de un monolítico archivo httpd.conf, para ello vamos a hacer lo siguiente.

mkdir /usr/local/etc/apache24/conf.d

Agrega esta línea al final del archivo /usr/local/etc/apache24/httpd.conf

Include etc/apache24/conf.d/*.conf

PHP 5.6

Ahora es el turno de PHP, vamos a compilar con la opción PHP-FPM encendida.

cd /usr/ports/lang/php56

make install

Y seleccionamos lo siguiente.

|+[x] CLI       Build CLI version
|+[x] CGI       Build CGI version
|+[x] FPM       Build FPM version
|+[ ] EMBED     Build embedded library
|+[ ] PHPDBG
|+[ ] DEBUG     Enable debug
|+[ ] DTRACE    Enable DTrace support
|+[x] IPV6      Enable ipv6 support
|+[ ] MAILHEAD  Enable mail header patch
|+[x] LINKTHR   Link thread lib (for threaded extensions)
|+[ ] ZTS       Force Zend Thread Safety (ZTS) build

Finalmente limpiamos el disco.

make clean

Ahora tenemos PHP 5.6 instalado, pero requerimos ciertos módulos tambien, así que:

cd ../php56-extensions/

make install clean

Asegúrate de marcar GD, CURL y MySQL así como también MySQLi

|+[x] CURL          CURL support
|+[x] GD            GD library support
|+[x] MYSQL         MySQL database support
|+[x] MYSQLI        MySQLi database support

Estos además de los que están marcados por defecto.

MariaDB 10.0

Es el turno de MariaDB, el cual instalaremos en lugar de MySQL

En su sitio oficial dice:

MariaDB 10.0 es actualmente la versión estable de MariaDB. Esta basada en MariaDB 5.5 y mantiene características de MySQL 5.6 además de características que no se encuentran en ningún otro lado.

Para instalarlo ejecutamos:

cd /usr/ports/databases/mariadb100-server

make install clean

Y dejamos todas las opciones por defecto, luego aseguramos la instalación y ejecutamos:

mysql_secure_installation

Donde te pregunten por la contraseña, coloca una buena contraseña difícil de adivinar. Y luego acepta todas las opciones por defecto.

Finalizando la instalación

Preparando los servicios para ejecutarse

Requerimos ahora configurar todos los servicios para que arranquen al reiniciar el servidor, para ello es necesario editar el achivo /etc/rc.conf y adicionar estas líneas.

apache24_enable="YES"
php_fpm_enable="YES"
mysql_enable="YES"

Es necesario un paso más para Apache. Edita el archivo /usr/local/etc/apache24/httpd.conf y agrega esta línea justo antes de Include….

ServerName localhost

Asegurate que estos módulos esten activos, esto lo haces verificando estas líneas en el archivo /usr/local/etc/apache24/httpd.conf

LoadModule authn_core_module libexec/apache24/mod_authn_core.so
LoadModule authz_core_module libexec/apache24/mod_authz_core.so
LoadModule log_config_module libexec/apache24/mod_log_config.so
LoadModule expires_module libexec/apache24/mod_expires.so
LoadModule headers_module libexec/apache24/mod_headers.so
LoadModule version_module libexec/apache24/mod_version.so
LoadModule unixd_module libexec/apache24/mod_unixd.so
LoadModule vhost_alias_module libexec/apache24/mod_vhost_alias.so
LoadModule dir_module libexec/apache24/mod_dir.so
LoadModule rewrite_module libexec/apache24/mod_rewrite.so
LoadModule mime_module  libexec/apache24/mod_mime.so
LoadModule actions_module libexec/apache24/mod_actions.so
LoadModule alias_module libexec/apache24/mod_alias.so
LoadModule authz_host_module libexec/apache24/mod_authz_host.so
LoadModule access_compat_module libexec/apache24/mod_access_compat.so
LoadModule proxy_module libexec/apache24/mod_proxy.so
LoadModule proxy_fcgi_module libexec/apache24/mod_proxy_fcgi.so

Y finalmente arrancamos los servicios.

service apache24 start
service mysql-server start
service php-fpm start

Probando la instalación

Vamos a crear un sitio de prueba para asegurarnos que todo funcione.

Crea un directorio para tu sitio de pruebas

mkdir -p /usr/local/www/site1/{public_html,logs}
chown -R www:www /usr/local/www/site1/

Configura el host virtual

Crea el archivo /usr/local/etc/apache24/conf.d/site1.conf, le puedes llamar como gustes, y coloca este contenido en su interior:

    <VirtualHost *:80>
        ServerAdmin webmaster@example.com
        DocumentRoot "/usr/local/www/site1/public_html"
        ServerName freebsd.garron.me
        ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/usr/local/www/site1/public_html/$1
        ErrorLog "/usr/local/www/site1/logs/error.log"
        CustomLog "/usr/local/www/site1/logs/access.log" common
        ScriptAlias /cgi-bin/ "/usr/local/www/site1/cgi-bin/"

    <Directory "/usr/local/www/site1/public_html">
        Options +Indexes +FollowSymLinks +ExecCGI
        AllowOverride AuthConfig FileInfo
        Require all granted
        Allow from all
    </Directory>

</VirtualHost>

Comprueba la configuración

Necesitamos crear un archivo llamado phpinfo.php con este contenido:

<?php
    phpinfo();
?>

Una vez guardado, podemos ir a http://freebsd.garron.me/phpinfo.php, (esto solo en este caso) y la información de PHP debe aparecer. Esta línea es importante.

Server API 	FPM/FastCGI 

Nos muestra que estamos corriendo PHP como un servicio independiente llamado PHP-FPM, además deberíamos verificar el MPM de Apache.

httpd -V | grep MPM

La respuestas debe ser:

Server MPM:     event