FEMP stack · 13 min read · Jan 26, 2026
Instalar Nginx, MariaDB y PHP (stack FEMP) en FreeBSD 11
En este tutorial, describiré el proceso de instalación y configuración del stack FEMP en FreeBSD 11.x. El stack de software FEMP es un acrónimo que representa un grupo de programas que generalmente se instalan en sistemas operativos Unix/Linux y se utilizan principalmente para implementar aplicaciones web dinámicas. En este caso, el acrónimo FEMP se refiere al sistema operativo similar a Unix FreeBSD, sobre el cual se instalan estas aplicaciones:
- Nginx servidor web, que es un servidor web popular de rápido crecimiento, utilizado principalmente para servir contenido HTML, pero que también puede proporcionar balanceo de carga, alta disponibilidad o proxy inverso para un servidor web o para otros servicios de red.
- PHP intérprete de lenguaje de programación dinámico, utilizado en el backend para manipular datos de bases de datos y crear contenido web dinámico que puede ser incluido en HTML simple. Los scripts PHP se ejecutan solo en el lado del servidor, nunca en el lado del cliente (en navegadores).
- Mariadb\MySQL RDBMS donde se almacenan los datos en el backend, mientras que el procesamiento dinámico es manejado por PHP. En este tutorial, instalaremos y utilizaremos el sistema de gestión de bases de datos relacional MariaDB, un fork comunitario de MySQL, a favor de la base de datos MySQL, que ahora es propiedad y está desarrollada por Oracle.
REQUISITOS:
- Una instalación mínima de FreeBSD 11.x.
- Una dirección IP estática configurada para una interfaz de red.
- Una cuenta regular configurada con privilegios de root o acceso directo al sistema a través de la cuenta root.
- Preferiblemente, un nombre de dominio registrado públicamente configurado con los registros DNS mínimos (registros A y CNAME).
Paso 1 – Instalar la base de datos MariaDB
En el primer paso, instalaremos el sistema de base de datos MariaDB, que es el componente FEMP que se utilizará para almacenar y gestionar los datos dinámicos del sitio web. MariaDB/MySQL es una de las bases de datos relacionales de código abierto más utilizadas en el mundo junto con el servidor web Nginx o Apache. Ambos servidores son altamente utilizados para crear y desarrollar aplicaciones web complejas o sitios web dinámicos. MariaDB se puede instalar en FreeBSD directamente desde los binarios proporcionados por los repositorios PORTS. Sin embargo, una búsqueda simple utilizando el comando ls en la sección de bases de datos de FreeBSD Ports revela múltiples versiones de MariaDB, como se muestra en la salida del siguiente comando. Además, ejecutar el comando del Gestor de Paquetes pkg muestra los mismos resultados.
ls -al /usr/ports/databases/ | grep mariadbpkg search mariadb
En esta guía, instalaremos la última versión de la base de datos y el cliente de MariaDB utilizando el comando pkg como se ilustra en el siguiente extracto.
pkg install mariadb102-server mariadb102-clientDespués de que MariaDB haya terminado de instalarse en el sistema, emita el siguiente comando para habilitar el servidor MySQL a nivel del sistema. Además, asegúrese de iniciar el demonio de MariaDB como se muestra a continuación.
sysrc mysql_enable="YES"service mysql-server startA continuación, necesitaremos asegurar la base de datos de MariaDB ejecutando el script mysql_secure_installation. Al ejecutar el script, se nos harán una serie de preguntas. El propósito de estas preguntas es proporcionar un nivel de seguridad para el motor MySQL, como establecer una contraseña de root para el usuario root de MySQL, eliminar el usuario anónimo, deshabilitar el inicio de sesión remoto para el usuario root y eliminar la base de datos de prueba. Después de elegir una contraseña fuerte para el usuario root de MySQL, responda sí a todas las preguntas, como se ilustra en el siguiente ejemplo del script. No confunda el usuario root de la base de datos MariaDB con el usuario root del sistema. Aunque estas cuentas tienen el mismo nombre, root, no son equivalentes y se utilizan para diferentes propósitos, uno para la administración del sistema y el otro para la administración de bases de datos.
/usr/local/bin/mysql_secure_installationNOTA: ¡SE RECOMIENDA EJECUTAR TODAS LAS PARTES DE ESTE SCRIPT PARA TODOS LOS SERVIDORES DE MariaDB EN USO DE PRODUCCIÓN! ¡LEA CADA PASO CUIDADOSAMENTE! Para iniciar sesión en MariaDB y asegurarla, necesitaremos la contraseña actualpara el usuario root. Si acaba de instalar MariaDB, yno ha establecido la contraseña de root aún, la contraseña estará en blanco,por lo que solo debe presionar enter aquí. Ingrese la contraseña actual para root (presione enter para ninguno):OK, se utilizó la contraseña correctamente, continuando... Establecer la contraseña de root asegura que nadie pueda iniciar sesión en elusuario root de MariaDB sin la autorización adecuada.¿Establecer contraseña de root? [Y/n]y
Nueva contraseña:Reingrese la nueva contraseña:¡Contraseña actualizada con éxito!Recargando tablas de privilegios.. ... ¡Éxito!Por defecto, una instalación de MariaDB tiene un usuario anónimo, permitiendo que cualquierainicie sesión en MariaDB sin tener que tener una cuenta de usuario creada parael mismo. Esto está destinado solo para pruebas, y para hacer que la instalaciónsea un poco más fluida. Debe eliminarlos antes de pasar a unentorno de producción.¿Eliminar usuarios anónimos? [Y/n]y
... ¡Éxito!Normalmente, solo se debería permitir que root se conecte desde 'localhost'. Estoasegura que alguien no pueda adivinar la contraseña de root desde la red.¿Deshabilitar el inicio de sesión remoto para root? [Y/n]y
... ¡Éxito!Por defecto, MariaDB viene con una base de datos llamada 'test' a la que cualquiera puedeacceder. Esto también está destinado solo para pruebas, y debe ser eliminadoantes de pasar a un entorno de producción.¿Eliminar la base de datos de prueba y el acceso a ella? [Y/n]y
- Eliminando base de datos de prueba... ... ¡Éxito! - Eliminando privilegios en la base de datos de prueba... ... ¡Éxito!Recargar las tablas de privilegios asegurará que todos los cambios realizados hasta ahorase apliquen de inmediato.¿Recargar tablas de privilegios ahora? [Y/n]y**
... ¡Éxito!Limpiando...¡Todo listo! Si ha completado todos los pasos anteriores, su instalación de MariaDBdebe estar ahora segura.¡Gracias por usar MariaDB!Finalmente, después de haber terminado de asegurar la base de datos de MariaDB, pruebe si se le permite realizar un inicio de sesión local en la base de datos desde la cuenta root ejecutando el siguiente comando. Una vez conectado al aviso de la base de datos, simplemente escriba quit o exit para salir de la consola de la base de datos y volver al aviso de la consola del usuario del sistema, como se muestra en la siguiente captura de pantalla.
mysql -u root -p*MariaDB> quit***
Ejecutar el comando sockstat en FreeBSD revela rápidamente el hecho de que MariaDB está abierto a conexiones de red externas y puede ser accedido de forma remota desde cualquier red a través del puerto 3306/TCP.
sockstat -4 -6
Para deshabilitar completamente las conexiones de red remotas a MariaDB, necesita forzar el socket de red de mysql a enlazarse solo a la interfaz loopback agregando la siguiente línea al archivo /etc/rc.conf con el siguiente comando.
sysrc mysql_args="--bind-address=127.0.0.1"Después, reinicie el demonio de MariaDB para aplicar los cambios y ejecute nuevamente el comando sockstat para mostrar el socket de red para el servicio mysql. Esta vez, el servicio de MariaDB debería escuchar conexiones de red solo en el socket localhost:3306.
service mysql-server restartsockstat -4 -6|grep mysql
Si está desarrollando una aplicación web remota que necesita acceso a la base de datos en esta máquina, revierta los cambios en el socket de MySQL realizados hasta ahora eliminando o comentando la línea mysql_args=”–bind-address=127.0.0.1” del archivo /etc/rc.conf y reiniciando la base de datos para reflejar los cambios. En este caso, debe tener en cuenta otras alternativas para limitar o deshabilitar el acceso remoto a MySQL, como ejecutar un firewall localmente y filtrar las direcciones IP de los clientes que necesitan inicio de sesión remoto o crear usuarios de MySQL con las direcciones IP adecuadas concedidas para iniciar sesión en el servidor.
Paso 2 – Instalar el servidor web Nginx
El siguiente demonio importante que instalaremos en FreeBSD para nuestro stack FEMP es el servidor web, representado por el servicio Nginx. El proceso de instalación del servidor web Nginx en FreeBSD es bastante sencillo. El servidor web Nginx se puede instalar desde los binarios proporcionados por FreeBSD 11.x Ports. Una búsqueda simple a través de los repositorios de Ports en la sección www puede mostrar una lista de qué versiones precompiladas están disponibles para el software Nginx, como se muestra en el siguiente extracto del comando.
ls /usr/ports/www/ | grep nginxEmitir el comando de gestión de paquetes puede mostrar los mismos resultados como se muestra en la siguiente imagen.
pkg search –o nginx
Para instalar la versión más común de Nginx en FreeBSD, ejecute el siguiente comando. Al instalar el paquete binario, el gestor de paquetes le preguntará si acepta descargar e instalar el paquete de Nginx. Por lo general, debe escribir la palabra sí o y en el aviso para comenzar el proceso de instalación. Para evitar el aviso, agregue la bandera –y al emitir el comando: pkg –y install nginx.
pkg install nginx
Después de que el software del servidor web Nginx se haya instalado en su sistema, debe habilitar y ejecutar el servicio emitiendo los siguientes comandos.
sysrc nginx_enable="yes"service nginx startPuede ejecutar el comando sockstat para verificar si el servicio Nginx se ha iniciado en su sistema y en qué sockets de red se enlaza. Normalmente, debería enlazarse por defecto en el socket TCP :80. Puede usar el filtro de línea de comandos grep para mostrar solo los sockets que coinciden con el servidor *nginx.
sockstat -4 -6 | grep nginxPara visitar la página web predeterminada de Nginx, abra un navegador en una computadora de su red y navegue a la dirección IP de su servidor a través del protocolo HTTP. En caso de que haya registrado un nombre de dominio o use un servidor DNS local en sus instalaciones, puede escribir el nombre de dominio completamente calificado de su máquina o el nombre de dominio en el campo URI del navegador. Un mensaje de título que dice “¡Bienvenido a nginx!” junto con algunas líneas de HTML debería mostrarse en su navegador, como se muestra en la siguiente captura de pantalla.

La ubicación donde se almacenan los archivos web para Nginx en FreeBSD 11.x es el directorio /usr/local/www/nginx/. Este directorio es un enlace simbólico al directorio nginx-dist. Para implementar un sitio web, copie los archivos html o scripts php en este directorio. Para cambiar el directorio webroot predeterminado de Nginx, abra el archivo de configuración de Nginx desde el directorio /usr/local/etc/nginx/ y actualice la línea de declaración root como se muestra en el siguiente ejemplo.
nano /usr/local/etc/nginx/nginx.confEste será el nuevo camino webroot para Nginx:
*root /usr/local/www/new_html_directory;*
Paso 3 – Instalar el lenguaje de programación PHP
Por defecto, el servidor web Nginx no puede analizar directamente los scripts PHP, Nginx necesita pasar el código PHP a través de la puerta de enlace FastCGI al demonio PHP-FPM, que interpreta y ejecuta los scripts PHP. Para instalar el demonio PHP-FPM en FreeBSD, busque los paquetes binarios precompilados de PHP disponibles emitiendo los siguientes comandos.
ls /usr/ports/lang/ | grep phppkg search –o phpDe la multitud de versiones de PHP disponibles en los repositorios de FreeBSD Ports, elija instalar la última versión del intérprete PHP, actualmente la versión PHP 7.1, emitiendo el siguiente comando.
pkg install php71Para instalar algunas extensiones PHP adicionales, que pueden ser necesarias para implementar aplicaciones web complejas, emita el siguiente comando. Una lista de extensiones PHP oficialmente soportadas se puede encontrar visitando el siguiente enlace: http://php.net/manual/en/extensions.alphabetical.php
Si planea construir un sitio web basado en un sistema de gestión de contenido, revise la documentación del CMS para averiguar los requisitos de su sistema, especialmente qué módulos o extensiones de PHP son necesarios.
php71-mcrypt mod_php71 php71-mbstring php71-curl php71-zlib php71-gd php71-jsonDado que estamos ejecutando un servidor de base de datos en nuestra configuración, también deberíamos instalar la extensión del controlador de base de datos PHP, que es utilizada por el intérprete PHP para conectarse a la base de datos MariaDB.
pkg install php71-mysqliA continuación, actualice el usuario y grupo de PHP-FPM para que coincidan con el usuario de ejecución de Nginx editando el archivo de configuración de PHP-FPM. Cambie las variables de las líneas de usuario y grupo a www como se muestra en el siguiente extracto.
cp /usr/local/etc/php-fpm.d/www.conf{,.backup}nano /usr/local/etc/php-fpm.d/www.confCambie las siguientes líneas para que se vean como a continuación.
user = www
group = www**
Por defecto, el demonio Nginx se ejecuta con los privilegios del usuario del sistema ‘nobody‘. Cambie el usuario de ejecución de Nginx para que coincida con el usuario de ejecución de PHP-FPM, editando el archivo /usr/local/etc/nginx/nginx.conf y actualizando la siguiente línea:
user www;
Por defecto, el demonio PHP-FPM en FreeBSD abre un socket de red en localhost:9000 en estado de escucha. Para mostrar este socket, puede usar el comando sockstat como se muestra en el siguiente ejemplo.
sockstat -4 -6| grep php-fpm
Para que el servidor web Nginx intercambie scripts PHP con la puerta de enlace PHP FastCGI en el socket de red 127.0.0.1:9000, abra el archivo de configuración de Nginx y actualice el bloque PHP-FPM como se muestra en el siguiente ejemplo.
Ejemplo de puerta de enlace PHP FastCGI para Nginx:
location ~ \.php$ {
root /usr/local/www/nginx;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
include fastcgi_params;
}
Después de haber realizado todos los cambios anteriores, cree un archivo de configuración para PHP basado en el archivo de producción predeterminado emitiendo el siguiente comando. Puede cambiar la configuración de tiempo de ejecución de PHP editando las variables presentes en el archivo php.ini.
ln -s /usr/local/etc/php.ini-production /usr/local/etc/php.iniFinalmente, para aplicar todos los cambios realizados hasta ahora, habilite el demonio PHP-FPM a nivel del sistema y reinicie los servicios PHP-FPM y Nginx emitiendo los siguientes comandos.
sysrc php_fpm_enable=yesservice php-fpm restartPruebe las configuraciones de nginx para errores de sintaxis:
ginx –t service nginx restart
Para obtener la información actual de PHP disponible para su stack FEMP en FreeBSD, cree un archivo phpinfo.php en el directorio raíz de documentos de su servidor emitiendo el siguiente comando.
echo "" | tee /usr/local/www/nginx/phpinfo.phpLuego, abra un navegador y navegue a la página phpinfo.php visitando el nombre de dominio o la dirección IP pública de su servidor seguido del archivo /phpinfo.php, como se ilustra en la siguiente captura de pantalla.

¡Eso es todo! Ha instalado y configurado con éxito el stack FEMP en FreeBSD 11. El entorno ahora está listo y completamente funcional para comenzar a implementar aplicaciones web dinámicas en sus instalaciones.
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.