Apache, PHP, MySQL en FreeBSD
Escrito por: Guillermo Garron
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