En este caso práctico vamos a configurar un servidor para que proporcione servicios de hosting de sitios web basados en WordPress de forma remota.
La finalidad es contar con un servidor independiente dentro de la organización (empresa, hogar, etc) con S.O. GNU/Linux que facilite servicios de hosting así como algún servicio extra, como almacenamiento remoto o NAS y acceso a través de FTP a los sitios webs.
Contexto
Contaremos con un equipo con recursos limitados en el que instalaremos un sistema operativo GNU/Linux con interfaz de usuario en línea de comandos (CLI, Command Line Interface) que administraremos de forma remota y segura a través de SSH por lo que lo podremos tener headless (sin GUI, teclado ni ratón, gestionada remotamente a través de la red).
Una vez configurada la administración remota del servidora través de ssh, instalaremos los paquetes de software necesarios para proporcionar servicios de hosting web y facilitar el acceso al contenido de los sitios web a través FTP.
El siguiente paso será configurar los servicios mínimos necesarios para alojar sitios webs basados en el CMS WordPress.
De aquí en adelante realizaremos todas las acciones que nos de tiempo en el taller entre las que se pueden realizar las siguientes:
- Sitios webs personales para usuarios del sistema
- Automatización de instalación de WordPress en un nuevo sitio web alojado en el servidor.
- Discriminación de accesos por FQDN utilizando VirtualHost en apache2
- Automatización de creación de usuario y BBDD propias en MySQL para gestionar hosting para un nuevo usuario.
Al final, veremos como teniendo configurado el software necesario y conociendo sus funciones, podemos automatizar parte del trabajo necesario para proporcionar servicio de hosting a un nuevo usuario así como eliminar el servicio de hosting para usuario lo que nos ahorrará mucho tiempo en tareas repetitivas.
Instantaneas
Si queremos trabajar con la máquina virtual en la que tenemos instalado Debian 12 CLI y no queremos perder la configuración que tenemos actualmente, podemos crear una instantánea antes de realizar cualquier configuración.

Creamos una instantánea

Instalando y configurando servidor SSH
Ya hemos realizado este proceso en casos prácticos anteriores en nuestro servidor srv01 de forma remota. Vamos a aprovechar esta máquina para acelerar todo el proceso a realizar.
Instalando paquetes de software necesario
Para poder proporcionar servicios de hosting WordPress necesitamos instalar una serie de paquetes de software entre los que están un servidor HTTP (apache2), sistema gestor de bases de datos (mysql), interprete de php (php) así como los paquetes necesarios para que php pueda conectarse a BBDD en mysql y el servidor web apache2 pueda interpretar código php incrustado.
Además instalaremos un servidor FTP que utilizaremos más adelante para tratar de agilizar el acceso a los sitios webs a los webmaster.
Instalando MySQL
Para instalar MySQL vamos a seguir la entrada Instalación remota de MySQL en www.educatica.es.
El primer paso será acceder al sitio web de MySQL Community Edition y descargar para Debian 12.

Accedemos al sitio web de Community Edition


Descargamos los repositorios para apt que es el sistema de gestión de paquetes de software que utiliza Debian.

No es necesario iniciar sesión, simplemente lo descargamos

Ya se ha descargado el paquete deb con los repositorios de mysql-server community edition.

Ahora lo que vamos a hacer es copiar este fichero al servidor srv01 dónde instalaremos el SGBBDD.
Podríamos descargar el paquete directamente utilizando wget si conocemos la ruta del fichero.

Vamos a hacerlo por curiosidad. Nos conectamos a la máquina srv01 a través de ssh.

Ahora vamos a utilizar el comando wget para descargarnos el fichero https://dev.m ysql.com/get/mysql-apt-config_0.8.36-1_all.deb
El comando sería: wget https://dev.m ysql.com/get/mysql-apt-config_0.8.36-1_all.deb

Se ha descargado. El problema de esta alternativa es que tengo que conocer la URL del fichero a descargar y escribirla en la consola. Ahora, si yo conozco de antemano esta URL podría tenerla guardad en un fichero o incluso automatizar la instalación de este paquete con un script.
Si tenemos el fichero el el S.O. con interfaz gráfica podemos copiarlo en remoto con la aplicación scp.

Ahora instalamos los repositorios utilizando el comando apt install

Seguimos el asistente y configuramos el repositorio.

Pulsamos Enter una vez seleccionada la opción de Servers

Ahora seleccionamos la versión LTS (Long Term Support)

Con el tabulador seleccionamos Aceptar y pulsamos Enter.

Con esto se instalan los repositorios

Ahora solo tenemos que ejecutar el comando de instalación de mysql-server, pero antes actualizamos la lista de paquetes con apt update.

Ahora si, realizamos la instalación

Establecemos contraseña de root: ClaveRoot#20

Volvemos a insertar la misma contraseña 🙂

Ya hemos instalado mysql! Ahora vamos a acceder a la gestión de mysql para crear una base de datos y un usuario que la pueda gestionar.

Ya que estamos, vamos a crear una nueva base de datos para WordPress. Vamos a crear una base de datos pensando en que en un futuro vamos a tener más bases de datos para distintos usuarios del sistema. Así pues vamos a utilizar una nomenclatura ya conocida: NombreBase –> jpedrerom01. Además como esto va a ser WordPress le vamos a añadir un prefijo wp_. Así pues la base de datos que vamos a crear será «wp_jpedrerom01»

Creamos primero la base de datos para el usuario jpedrerom, creamos un usuario que se encargará de gestionar esta base de datos, le damos todos los privilegios a este usuario sobre la base de datos, actualizamos los privilegios y salimos.

Vamos a mostrar los usuarios

Ahora salimos

Instalando el resto de aplicaciones: LAMP
LAMP = Linux, Apache, MySQL y PHP. Este acrónimo representa una plataforma formada por un SO de tipo GNU/Linux, con un servidor HTTP apache un SGBD MySQL y PHP como lenguaje de programación en el lado del servidor que nos permite instalar y ejecutar aplicaciones web dinámicas que utilicen PHP.
En nuestro caso tenemos GNU/Linux instalado y MySQL nos falta el resto de software que vamos a instalar a continuación.
Los paquetes de software que vamos a instalar son:
- apache2
- php
- libapache2-mod-php
- php-mysql

Instalamos los servidores. Con esto tendriamos un entorno preparado para ejecutar o servir aplicaciones web que utilicen PHP+MySQL.
Vamos a comprobar que esto funciona o por lo menos que funciona el servidor HTTP.

Instalando WordPress
Lo primero que tenemos que tener para instalar WordPress en nuestro servidor es WordPress. WP es una aplicación web de código abierto, así que podemos descargárnosla desde su sitio web de forma gratuita.

Descargamos el paquete zip con el contenido de WordPress. Ojo estamos descargando el fichero en el S.O. con interfaz gráfica de usuario que utilizamos para trabajar, no obstante necesitamos este fichero en el servidor srv01. Cuando termina la descarga, lo vamos a copiar al servidor utilizando el comando scp.

Ahora el fichero zip estará en el sistema srv01 en el directorio personal del usuario root.

Vamos a descomprimir el fichero. Vamos a instalar el comando unzip.

Vamos a ver la ayuda de unzip para ver si podemos mostrar el contenido del fichero comprimido.

Si usamos la opción -l podemos ver que los ficheros comprimidos están dentro de un directorio llamado wordpress. Así que podemos descomprimir sin miedo el fichero en este directorio.

A descomprimir!

Vamos a ver qué ha pasado

Vamos a crear un sitio web dentro de nuestro servidor web que llamaremos sistemas. Para ello vamos a mover el directorio que contiene la aplicación wordress al DocumentRoot de apache2.
El DocumentRoot de apache es el directorio dónde apache2 va a buscar las páginas webs que se solicitan a través de HTTP. Es decir, es el directorio raíz del sitio web.
Cuando accedemos a través de http://192.168.25.253 o http://srv01 apache va a buscar un fichero index.html, index.php, etc en el DocumentRoot que por defecto es /var/www/html.
Vamos a echar un vistazo a ver qué hay en este directorio /var/www/html.

Ahora vamos a crear de forma muy sencilla un nuevo sitio web completo dentro del raíz de apache2. Para ello tan solo tenemos que crear un directorio con el nombre de nuestro sitio web dentro del DocumentRoot:/var/www/html. Como queremos que se llame sistemas y que contenga un wordpress, lo que vamos a hacer es mover el directorio wordpress al directorio DocumentRoot con el nombre sistemas.

Es importante que entendamos que todo lo que dejemos en el DocumentRoot está disponible a través de apache2.

Vamos a acceder a sistemas desde nuestro sistema operativo con GUI.

Ahora hemos accedemos al proceso de instalación de WordPress.

Rellenamos la información del asistente con los datos de la base de datos y usuario que creamos anteriormente.

Esto va a fallar…

Apache2 no tiene permiso de escritura en el directorio sistemas. Vamos a revisar los permisos:

Vamos a cambiar el grupo del directorio para que el grupo de apache2 sea el grupo asignado a este directorio. Además, le vamos a dar permiso de escritura en este directorio.

Si más adelante queremos que este sitio web lo gestione un usuario del sistema, por ejemplo jpedrerom, tan solo tenemos que cambiar el propietario del directorio y todo su contenido.

Vamos a ver…

Rellenamos la información de nuestro sitio web

Instalamos WordPress y a ver que nos sale…

Con esto, ya tenemos un sistema WordPress instalado

Si queremos acceder a la parte de administración tan solo tenemos que escribir wp-admin después de la URL.

Accedemos con nuestras credenciales 😉

Ya tenemos WordPress Instalado! y Ahora que? Podemos configurarlo y personalizarlo como queramos.
Código fuente de WordPress
WordPress es una aplicación web de código abierto, tenemos el código de wordpress disponible dentro del fichero zip que hemos descomprimido. También lo tenemos dentro del directorio sistemas que está en /var/www/html. Vamos a echar un vistazo al contenido del fichero de índice de sistemas.

Podemos ver las «tripas» de la aplicación y aprender de cómo está hecha 😉
Usuario webmaster
Hemos instalado wordpress, lo hemos configurado, pero lo hemos hecho como root. Lo ideal es que este sitio web esté gestionado por un usuario que se encargue de configurar el sitio web y que no sea root.
Para ello vamos a crear una cuenta de usuario en el sistema con el nombre del usuario que hará de webmaster: jpedrerom.
Creamos una cuenta de usuario para jpedrerom con su contraseña

Ahora para que este usuario pueda gestionar el sitio web sistemas vamos a cambiar el propietario del directorio sistemas que está en el DocumentRoot para que lo gestione jpedrerom.

Vamos a crear un enlace simbólico a /var/www/html/sistemas en el directorio personal del usuario jpedrerom con el nombre sistemas para facilitarle el acceso a dicho directorio.

Creamos el enlace simbólico

Claro esto permite al usuario jpedrerom acceder a ese directorio, pero tendrá que iniciar sesión, no? Es decir, este usuario tendría que conectarse a este sistema para poder subir ficheros o modificarlos, y eso no nos gusta mucho.
Para permitir a un webmaster gestionar su sitio web vamos a instalar un servidor ftp.
Instalando y configurando servidor ftp para acceso a hosting
Vamos a instalar vsftpd.

Ahora lo configuramos para permitir acceso a usuarios locales con permisos de escritura.


Esta es la configuración básica, pero además vamos a configurar la máscara de creación de ficheros para usuarios del sistema, más concretamente su máscara inversa o umask. Queremos que cuando un usuario del sistema suba un fichero los permisos sea rw-rw-r– y si es un directorio rwxrwxr-x. Esto en octal sería: 775, pero…. resulta que vsftpd utiliza la máscara inversa, es decir tenemos que indicar el número inverso, cambiando 0s por 1s y viceversa. El código sería 002.

Guardamos, reiniciamos el servicio y nos conectamos

Vamos a conectarnos utilizando un cliente ftp desde un sistema operativo con GUI. Vamos a instalar filezilla 🙂

Lanzamos filezilla

Vamos a conectarnos

Nos conectamos, por ahora, sin ssh

Ahora vamos a sitemas a ver si funciona

Podemos administrar nuestro sitio web de forma remota siendo un usuario del sistema sin permisos.
Para poder acceder con ssh deberíamos cambiar la configuración del servidor SSH para permitir acceder a cualquier usuario comentando la directiva AllowUsers.

Lo vamos a cambiar rápidamente 🙂

Reiniciamos el servidor ssh

Intentamos acceder
Dejar una respuesta