Desplegar servidor web con Nginx, PHP y MySQL

—

por

En este laboratorio vamos a desplegar un servidor web completo utilizando:

  • Nginx como servidor HTTP.
  • PHP-FPM para ejecutar aplicaciones desarrolladas en PHP.
  • MySQL como sistema gestor de bases de datos.
  • Ubuntu Server como sistema operativo.

Además de realizar una instalación básica, aprenderemos a modificar las rutas predeterminadas utilizadas por los distintos servicios.

La estructura que utilizaremos será la siguiente:

/data/
├── mysql/
│   └── data/
├── web/
│   └── laboratorio/
│       ├── public/
│       ├── private/
│       ├── logs/
│       └── backups/
└── backups/
    └── mysql/

La web será accesible desde:

/data/web/laboratorio/public

Los datos de MySQL se almacenarán en:

/data/mysql/data

Esta separación permite que los datos importantes no dependan directamente de las rutas predeterminadas del sistema.


Objetivos

Al finalizar el laboratorio seremos capaces de:

  • Instalar Nginx, PHP-FPM y MySQL.
  • Crear un servidor virtual en Nginx.
  • Ejecutar archivos PHP desde Nginx.
  • Crear una base de datos y un usuario MySQL.
  • Conectar PHP con MySQL.
  • Cambiar la carpeta pública de una página web.
  • Cambiar el directorio de datos de MySQL.
  • Configurar correctamente propietarios y permisos.
  • Comprender la diferencia entre configuración, aplicación y datos.
  • Diagnosticar errores mediante logs y comandos del sistema.

Requisitos

Para realizar el laboratorio necesitaremos:

  • Ubuntu Server.
  • Acceso mediante SSH o consola.
  • Un usuario con permisos de sudo.
  • Al menos 2 GB de RAM.
  • Aproximadamente 10 GB de espacio libre.
  • Conectividad de red.

El laboratorio puede realizarse en:

  • Una máquina virtual.
  • Un servidor físico.
  • Una instancia VPS.
  • Un equipo de laboratorio.
  • Una Raspberry Pi con Ubuntu Server de 64 bits.
1 – Preparar el sistema 2 – Definir la estructura de directorios 3 – Instalar Nginx 4 – Configurar el cortafuegos 5 – Instalar PHP-FPM 6 – Preparar la página web 7 – Crear el servidor virtual de Nginx 8 – Resolver el nombre del laboratorio 9 – Configurar PHP en Nginx 11 – Comprobar el acceso a MySQL 12 – Crear la base de datos y el usuario 13 – Conectar PHP con MySQL 14 – Cambiar la ruta de una página web 15 – Permisos necesarios para una ruta web personalizada 16 – Cambiar el directorio de datos de MySQL 17 – Autorizar la ruta en AppArmor 18 – Comprobar restricciones de systemd 19 – Arrancar MySQL con la nueva ruta 20 – Eliminar la copia antigua 21 – Recuperar el directorio original 22 – Alternativa: utilizar un montaje bind 23 – Separar los logs de Nginx 24 – Rotación de logs personalizados 25 – Configuración básica de PHP 26 – Diagnóstico de problemas 27 – Comandos de comprobación final 28 – Estructura final 29 – Qué rutas conviene cambiar 30 – Consideraciones de seguridad 31 – Ejercicio propuesto Conclusión


archivos arranque backup buscar completa conexiones configuración copiar copias de seguridad cortafuegos cpu deshabilitar disco escaneo espacio espacio ocupado filtrar firewall habilitar herramienta incremental inicio interfaz lectura listar log mantenimiento monitorización monousuario patrones procesos pruebas ram recursos red redes seguridad servicios sincronización sockets tcp texto udp uso ver

  • mkdir

    Descripción El comando mkdir (Make Directory) se utiliza para crear directorios en sistemas Linux y Unix. Es una de las herramientas más básicas y utilizadas…

  • hostnamectl

    Descripción El comando hostnamectl permite consultar y modificar el nombre del equipo (hostname) y otra información relacionada con el sistema en distribuciones Linux que utilizan…

  • uname

    Descripción El comando uname (Unix Name) se utiliza para mostrar información sobre el sistema operativo y el kernel en ejecución. Es una herramienta sencilla pero…

  • ack

    Descripción El comando ack es una herramienta de búsqueda de texto diseñada especialmente para desarrolladores y administradores de sistemas. Su objetivo es encontrar cadenas de…

  • find

    Descripción: El comando find se utiliza para buscar archivos y directorios dentro del sistema de archivos en Linux. Permite localizar elementos por nombre, tipo, tamaño,…

  • journalctl

    Descripción: El comando journalctl es la herramienta para consultar los registros del sistema gestionados por systemd-journald. Permite visualizar logs del sistema operativo, servicios, kernel, arranques…

  • nmap

    Descripción: El comando nmap (Network Mapper) es una herramienta avanzada para descubrimiento de hosts y escaneo de puertos. Permite identificar equipos activos en una red,…

  • ip

    Descripción: El comando ip (del paquete iproute2) es la herramienta moderna de Linux para administrar y diagnosticar la red: interfaces, direcciones IP, rutas, tabla ARP/vecinos…

  • tcpdump

    Descripción: El comando tcpdump es una herramienta de captura y análisis de tráfico de red en tiempo real. Permite inspeccionar paquetes que pasan por una…

  • top

    Herramienta de monitorización del sistema en tiempo real que muestra información sobre los procesos que se están ejecutando en un sistema Unix o Linux.