Cómo Instalar Nginx, MySQL, PHP (FEMP Stack) en FreeBSD 14.0

Introducción

FreeBSD, Nginx, MySQL y PHP (FEMP stack) es un conjunto de aplicaciones de código abierto que permite el desarrollo, alojamiento y entrega de aplicaciones web dinámicas en un servidor. FreeBSD funciona como sistema operativo de despliegue, Nginx como servidor web, MySQL o MariaDB como la base de datos y PHP como el procesador de scripts del lado del servidor.

Este artículo explica cómo instalar Nginx, MySQL y PHP (FEMP stack) en FreeBSD 14.0 y configurar los paquetes para permitir la entrega de aplicaciones web dinámicas en tu servidor.

Requisitos previos

Antes de comenzar:

Antes de instalar cualquier paquete, actualiza FreeBSD

  1. Actualiza el repositorio de paquetes.
sudo pkg update
  1. Actualiza los paquetes instalados.
sudo pkg upgrade

Instalar Nginx

  1. Instala Nginx usando el gestor de paquetes.
sudo pkg install nginx
  1. Activa Nginx.
sudo sysrc nginx_enable=yes
  1. Inicia Nginx.
sudo service nginx start
  1. Verifica que Nginx esté en ejecución.
sudo service nginx status

Salida:

nginx is running as pid 2273.

Instalar MySQL

  1. Instala el paquete del servidor MySQL.
sudo pkg install mysql80-server
  1. Activa MySQL.
sudo sysrc mysql_enable=yes
  1. Inicia MySQL.
sudo service mysql-server start
  1. Verifica que MySQL esté en ejecución.
sudo service mysql-server status

Salida:

mysql is running as pid 4044.
  1. Asegura la instalación de MySQL.
sudo mysql_secure_installation

Este script te guiará en la configuración de seguridad básica de tu instalación de MySQL. Se te pedirá:

  • VALIDATE PASSWORD component: Presiona Y.
  • Password Validation Policy: Ingresa 2 para STRONG.
  • New password: Ingresa la nueva contraseña.
  • Re-enter new password: Confirma la nueva contraseña.
  • Do you wish to continue with the password provided? Ingresa Y.
  • Remove anonymous users? Ingresa Y.
  • Disallow root login remotely? Ingresa Y.
  • Remove test database and access to it? Ingresa Y.
  • Reload privilege tables now? Ingresa Y.

Instalar PHP y PHP-FPM

  1. Instala PHP y PHP-FPM.
sudo pkg install php83
  1. Activa PHP-FPM.
sudo sysrc php_fpm_enable=yes
  1. Inicia PHP-FPM.
sudo service php-fpm start
  1. Verifica que PHP-FPM esté en ejecución.
sudo service php-fpm status

Salida:

php_fpm is running as pid 5524.

Instalar Módulos de PHP

  1. Instala los módulos comunes de PHP.
sudo pkg install php83-mysqli php83-curl php83-gd php83-intl php83-mbstring php83-xml php83-zip
  1. Habilita mysqli en la configuración de PHP.
sudo nano /usr/local/etc/php.ini-production
  1. Descomenta la línea ;extension=mysqli.
extension=mysqli
  1. Reinicia PHP-FPM para aplicar los cambios.
sudo service php-fpm restart

Acceder al Servidor de Base de Datos MySQL

  1. Inicia sesión en el shell de MySQL como usuario root.
sudo mysql -u root -p
  1. Crea una nueva base de datos MySQL.

Crea una nueva base de datos llamada example_db:

mysql> CREATE DATABASE example_db;
  1. Lista las bases de datos existentes en MySQL.
mysql> SHOW DATABASES;

Deberías ver example_db en la salida.

+--------------------+
| Database           |
+--------------------+
| example_db         |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)
  1. Sal del Shell de MySQL.

Ejecuta \q para salir:

mysql> \q

Crear una Nueva Configuración de Host Virtual en Nginx

  1. Crea el directorio para los hosts virtuales.
sudo mkdir -p /usr/local/etc/nginx/vhosts/
  1. Crea un nuevo archivo de configuración para tu host virtual.
sudo nano /usr/local/etc/nginx/vhosts/app.example.com.conf

Atención: Reemplaza app.example.com con el nombre de dominio real que has configurado para tu servidor. Asegúrate de que tu dominio esté configurado y apunte a la dirección IP de tu instancia en la nube.

  1. Añade el siguiente contenido al archivo.
server {
    listen 80;
    server_name app.example.com;
    root /usr/local/www/app.example.com;

    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/local/www/app.example.com;
    }
}
  1. Habilita la configuración del host virtual.
sudo nano /usr/local/etc/nginx/nginx.conf
  1. Añade la siguiente línea dentro del contexto http.
include /usr/local/etc/nginx/vhosts/*.conf;
  1. Verifica la configuración de Nginx.
sudo nginx -t
  1. Reinicia Nginx para aplicar los cambios.
sudo service nginx restart

Crear una Aplicación Web Dinámica de Ejemplo

  1. Crea un directorio para tu sitio web.
sudo mkdir -p /usr/local/www/app.example.com
  1. Crea un archivo PHP para probar la configuración.
sudo touch /usr/local/www/app.example.com/index.php

Probar el FEMP Stack

Ahora que tu FEMP stack está configurado, probemos si todo funciona como se espera. Crea una página web que muestre un mensaje de saludo obtenido de tu base de datos MySQL, demostrando que tu código PHP puede comunicarse con la base de datos.

  1. Conéctate a tu base de datos MySQL.

Abre tu terminal e inicia sesión en tu servidor MySQL como usuario root:

sudo mysql -u root -p

Ingresa tu contraseña de root cuando se te solicite.

  1. Selecciona la base de datos.

Selecciona la base de datos creada para este propósito:

mysql> use example_db;
  1. Crea una tabla para tu mensaje de saludo.

Dentro del shell de MySQL, crea una tabla llamada greetings para almacenar el mensaje:

mysql> CREATE TABLE greetings (
    id INT AUTO_INCREMENT PRIMARY KEY,
    message VARCHAR(255)
);
  1. Agrega el mensaje de saludo a la tabla.

Inserta tu mensaje en la tabla greetings:

mysql> INSERT INTO greetings (message) VALUES ('Greetings from Vultr');
  1. Sal del Shell de MySQL.

Ejecuta \q para salir:

mysql> \q
  1. Prueba la conexión PHP-

MySQL.

Abre el archivo index.php que creaste antes en el directorio /usr/local/www/app.example.com usando tu editor de texto preferido (como nano):

sudo nano /usr/local/www/app.example.com/index.php

Nota: Reemplaza app.example.com con tu propio nombre de dominio en todas las instrucciones.

Reemplaza el contenido existente con este código PHP:

<?php
    $servername = "localhost";
    $username = "test_user";
    $password = "Strong)P@ssword123";
    $dbname = "test_db";

    // Crear conexión con la base de datos
    $conn = new mysqli($servername, $username, $password, $dbname);

    // Verificar la conexión con la base de datos
    if ($conn->connect_error) {
        die("Database Connection Failed." . $conn->connect_error);
    }

    echo "<h4 align='center'> Below is the message retrieved from the test_db Mysql database on your server</h4>";

    // Recuperar el registro de la tabla greetings
    $sql = "SELECT message FROM greetings";
    $result = $conn->query($sql);

    if ($result->num_rows > 0) {
        $row = $result->fetch_assoc();
        echo "<h1 align='center'>" . $row["message"]. "</h1>";

    } else {
        echo "<h1 align='center'>No message found.</h1>";
    }

    $conn->close();
?>

Guarda y cierra el archivo.

  1. Reinicia el servidor web Nginx para aplicar los cambios.
sudo service nginx restart
  1. Verifica tu página de prueba.
  • Accede a tu dominio usando un navegador web como Chrome y verifica que aparezca el mensaje Greetings from Vultr en tu navegador.
http://app.example.com

Greetings from Vultr

Asegurar el Servidor

  1. Instala Certbot.
sudo pkg install py39-certbot py39-certbot-nginx
  1. Genera certificados SSL de confianza con Let's Encrypt.
sudo certbot --nginx -d app.example.com
  1. Verifica la configuración de Nginx.
sudo nginx -t
  1. Reinicia Nginx para aplicar los cambios.
sudo service nginx restart
  1. Configura un cron job para renovar los certificados SSL automáticamente.
echo "0 0 * * * /usr/local/bin/certbot renew --quiet" | sudo tee -a /etc/crontab

Verificar Certificado SSL

  1. Abre tu navegador web y navega a https://app.example.com.
  2. Revisa el ícono del candado en la barra de direcciones para asegurarte de que la conexión es segura.

Conclusión

Has instalado Nginx, MySQL y PHP (FEMP stack) en tu servidor FreeBSD y configurado una aplicación web de ejemplo para entregar contenido web dinámico en tu servidor. Puedes usar el FEMP stack para desarrollar y entregar aplicaciones web de alto rendimiento de manera segura en tu servidor utilizando configuraciones de host virtual. Para más información y opciones de configuración para cada aplicación en el stack, consulta los siguientes recursos de documentación:

José Rafael Gutierrez

Soy un desarrollador web con más de 14 años de experiencia, especializado en la creación de sistemas a medida. Apasionado por la tecnología, la ciencia, y la lectura, disfruto resolviendo problemas de...

Suscríbete para Actualizaciones

Proporcione su correo electrónico para recibir notificaciones sobre nuevas publicaciones o actualizaciones.