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:
- Despliega una instancia de FreeBSD 14.0 en Vultr.
- Crea un nuevo registro de dominio tipo A apuntando a la dirección IP de la instancia. Por ejemplo,
app.example.com
. - Accede al servidor usando SSH como un usuario no root pero con privilegios sudo.
Antes de instalar cualquier paquete, actualiza FreeBSD
- Actualiza el repositorio de paquetes.
sudo pkg update
- Actualiza los paquetes instalados.
sudo pkg upgrade
Instalar Nginx
- Instala Nginx usando el gestor de paquetes.
sudo pkg install nginx
- Activa Nginx.
sudo sysrc nginx_enable=yes
- Inicia Nginx.
sudo service nginx start
- Verifica que Nginx esté en ejecución.
sudo service nginx status
Salida:
nginx is running as pid 2273.
Instalar MySQL
- Instala el paquete del servidor MySQL.
sudo pkg install mysql80-server
- Activa MySQL.
sudo sysrc mysql_enable=yes
- Inicia MySQL.
sudo service mysql-server start
- Verifica que MySQL esté en ejecución.
sudo service mysql-server status
Salida:
mysql is running as pid 4044.
- 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
paraSTRONG
. - 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
- Instala PHP y PHP-FPM.
sudo pkg install php83
- Activa PHP-FPM.
sudo sysrc php_fpm_enable=yes
- Inicia PHP-FPM.
sudo service php-fpm start
- 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
- Instala los módulos comunes de PHP.
sudo pkg install php83-mysqli php83-curl php83-gd php83-intl php83-mbstring php83-xml php83-zip
- Habilita
mysqli
en la configuración de PHP.
sudo nano /usr/local/etc/php.ini-production
- Descomenta la línea
;extension=mysqli
.
extension=mysqli
- Reinicia PHP-FPM para aplicar los cambios.
sudo service php-fpm restart
Acceder al Servidor de Base de Datos MySQL
- Inicia sesión en el shell de MySQL como usuario root.
sudo mysql -u root -p
- Crea una nueva base de datos MySQL.
Crea una nueva base de datos llamada example_db
:
mysql> CREATE DATABASE example_db;
- 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)
- Sal del Shell de MySQL.
Ejecuta \q
para salir:
mysql> \q
Crear una Nueva Configuración de Host Virtual en Nginx
- Crea el directorio para los hosts virtuales.
sudo mkdir -p /usr/local/etc/nginx/vhosts/
- 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.
- 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;
}
}
- Habilita la configuración del host virtual.
sudo nano /usr/local/etc/nginx/nginx.conf
- Añade la siguiente línea dentro del contexto
http
.
include /usr/local/etc/nginx/vhosts/*.conf;
- Verifica la configuración de Nginx.
sudo nginx -t
- Reinicia Nginx para aplicar los cambios.
sudo service nginx restart
Crear una Aplicación Web Dinámica de Ejemplo
- Crea un directorio para tu sitio web.
sudo mkdir -p /usr/local/www/app.example.com
- 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.
- 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.
- Selecciona la base de datos.
Selecciona la base de datos creada para este propósito:
mysql> use example_db;
- 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)
);
- Agrega el mensaje de saludo a la tabla.
Inserta tu mensaje en la tabla greetings
:
mysql> INSERT INTO greetings (message) VALUES ('Greetings from Vultr');
- Sal del Shell de MySQL.
Ejecuta \q
para salir:
mysql> \q
- 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.
- Reinicia el servidor web Nginx para aplicar los cambios.
sudo service nginx restart
- 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
Asegurar el Servidor
- Instala Certbot.
sudo pkg install py39-certbot py39-certbot-nginx
- Genera certificados SSL de confianza con Let's Encrypt.
sudo certbot --nginx -d app.example.com
- Verifica la configuración de Nginx.
sudo nginx -t
- Reinicia Nginx para aplicar los cambios.
sudo service nginx restart
- 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
- Abre tu navegador web y navega a
https://app.example.com
. - 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:
- FreeBSD.
- Nginx.
- MySQL.
- PHP.
- Guías de Vultr.