Entornos-Web-Modernos

Alojamiento

Prologo: Este artículos proporciona una guía exhaustiva para la implementación de entornos web modernos. Se detallan desde la instalación fundamental de Docker y Docker-Compose en un VPS hasta configuraciones avanzadas como el uso de un Proxy-Inverso con Let’s Encrypt para múltiples instancias de WordPress. Las fuentes se complementan, ofreciendo tanto los requisitos básicos y la creación de redes externas como la alternativa de sustituir bases de datos como MySQL por MariaDB. Esta conjunción de información permite construir y gestionar sitios web de manera autónoma, eficiente y segura.

Resumen de Audio:

Entornos-Web-Modernos

1. Acceso y Preparación del VPS:

Primero, necesitará los datos de su VPS, al que se hace referencia como «my-VPS», incluyendo la dirección IP, la contraseña inicial y el usuario root para acceder vía SSH desde su terminal. Una vez dentro, verificará el sistema operativo (Ubuntu en este caso) y estará listo para la instalación de

Los datos: Cuando tengamos contratado el VPS? Pasaremos a llamarlo my-VPS, el proveedor del servicio nos proporciona las características del my-VPS de estos necesitamos la IP ***.***.***.*** , la contraseña inicial ******* y usuario:root para el acceso por ssh con el terminal de nuestro my-portatil en este caso linux.

Acceso:(my-VPS)

  • root@juan-SATELLITE-C55-C-1JM:/# ssh root@***.**.***.***
  • root@93.93.116.18’s password: ********
  • Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-153-generic x86_64)

Interrogar a Ubuntu:

  • root@ubuntu:~# lsb_release -a

2. Instalación de Docker y Docker-Compose:

  • Docker: Se detallan los requisitos y los comandos para actualizar la lista de paquetes, permitir el uso de repositorios HTTPS, agregar la clave GPG oficial de Docker, y añadir el repositorio de Docker a las fuentes de apt. Finalmente, se instala docker-ce y se verifica su versión y estado de funcionamiento.
  • Docker-Compose: Implica descargar el binario, aplicarle permisos ejecutables, crear un enlace simbólico y verificar la instalación con docker-compose –version. Este paso es crucial, ya que Docker-Compose es la herramienta para definir y ejecutar aplicaciones con múltiples contenedores mediante un archivo docker-compose.yml.

Instalación de Docker:

  • root@ubuntu:~# apt update
  • root@ubuntu:~# apt install apt-transport-https ca-certificates curl software-properties-common
  • root@ubuntu:~# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –
  • root@ubuntu:~# add-apt-repository «deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable»
  • root@ubuntu:~# apt update
  • root@ubuntu:~# apt-cache policy docker-ce
  • root@ubuntu:~# apt install docker-ce

Verificación de Docker:

  • root@ubuntu:~# docker version
  • root@ubuntu:~# systemctl status docker

Instalación Docker-Compose:

  • root@ubuntu:~# sudo curl -SL https://github.com/docker/compose/releases/download/v2.24.5/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
  • root@ubuntu:~# chmod +x /usr/local/bin/docker-compose
  • root@ubuntu:~# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

Verificación de Docker-Compose:

  • root@ubuntu:~# docker-compose –version

3. Conceptos Fundamentales:

  • Proxy-Inversor (Reverse Proxy): Es un servidor que se sitúa entre el cliente y el Servidor-Web-VPS. Todas las solicitudes del cliente van primero al Proxy-Inversor, que luego las envía al sitio web correspondiente. Se ubica dentro del VPS junto a los sitios web, actuando como intermediario para todas las solicitudes web.
  • Let’s Encrypt: Proporciona certificados SSL gratuitos para el cifrado de Seguridad de Capa de Transporte (HTTPS), a través de un proceso automatizado que simplifica la creación, validación, firma, instalación y renovación de certificados para sitios web seguros, eliminando costos y tareas manuales.
  • WordPress: Es un Sistema de Gestión de Contenidos (CMS) de código abierto, ampliamente utilizado para crear y mantener cualquier tipo de sitio web, especialmente sitios comerciales.

4. Creación de la Red Externa:

  • Es necesario crear una Red-Externa (ej. nginx-proxy o red-externa) fuera de Docker-Compose. Esta red permitirá que el contenedor Nginx-Proxy se conecte a ella y, a su vez, Docker-Compose asignará los contenedores creados (como las instancias de WordPress) a esta misma red externa. Se crea con el comando docker network create [nombre-red] y se puede inspeccionar con docker network inspect [nombre-red].

Red Externa:

  • root@ubuntu:~# docker network create red-externa
  • root@ubuntu:~# docker network ls
  • root@ubuntu:~# docker network inspect red-externa

5. Arquitectura de Carpetas y Ficheros:

  • Se recomienda crear una estructura de directorios, como Proxy-WordPress, con subcarpetas Proxy-Inverso y Sitios-Web. En cada una de estas subcarpetas se alojarán los archivos docker-compose.yml específicos para cada instancia.

Creamos la arquitectura de carpetas:

  • root@ubuntu:~# mkdir Proxy-WordPress && cd Proxy-WordPress
  • root@ubuntu:/Proxy-WordPress# mkdir Proxy-Inverso && mkdir Sitios-Web
  • root@ubuntu:/Proxy-WordPress# ls (Proxy-Inverso Sitios-Web)
  • root@ubuntu:/Proxy-WordPress/Sitios-Web# mkdir Sitio-demo && mkdir Sitio-ejemplo

6. Configuración del Proxy Inverso con Let’s Encrypt:

  • Dentro de la carpeta Proxy-Inverso, se crea un archivo docker-compose.yml.
  • Este archivo define dos servicios: nginx-proxy (basado en la imagen jwilder/nginx-proxy) y letsencrypt-proxy (basado en jrcs/letsencrypt-nginx-proxy-companion).

El nginx-proxy expone los puertos 80 y 443 al exterior y utiliza un volumen /var/run/docker.sock para ser sensible a los eventos de Docker en el host, permitiendo modificar automáticamente la configuración del proxy al añadir nuevos sitios web.

  • El letsencrypt-proxy complementa al nginx-proxy, creando automáticamente solicitudes SSL para cada nuevo sitio web conectado, también escuchando los eventos de Docker a través del mismo volumen.
  • Ambos servicios se conectan a la Red-Externa previamente creada.
  • Se lanza esta instancia con docker-compose up -d desde la carpeta del proyecto.

root@awesome-hopper:/Proxy-WordPress/Proxy-Inverso# nano docker-compose.yml

services:

  nginx-proxy:

    image: jwilder/nginx-proxy

    container_name: nginx-proxy

    ports:

      – «80:80»

      – «443:443»

    volumes:

      – /var/run/docker.sock:/tmp/docker.sock:ro

      – letsencrypt-certs:/etc/nginx/certs

      – letsencrypt-vhost-d:/etc/nginx/vhost.d

      – letsencrypt-html:/usr/share/nginx/html

  letsencrypt:

    image: jrcs/letsencrypt-nginx-proxy-companion

    container_name: letsencrypt

    volumes:

      – /var/run/docker.sock:/var/run/docker.sock:ro

      – letsencrypt-certs:/etc/nginx/certs

      – letsencrypt-vhost-d:/etc/nginx/vhost.d

      – letsencrypt-html:/usr/share/nginx/html

    environment:

      – NGINX_PROXY_CONTAINER=nginx-proxy

networks:

  default:

    name: red-externa

    external: true

volumes:

  letsencrypt-certs:

  letsencrypt-vhost-d:

  letsencrypt-html:

Nota: Para lanzar docker-compose nos situamos en la carpeta del proyecto /Proxy-WordPress/Proxy-Inverso ejecutamos “docker-compose up -d.”

  • root@awesome-hopper:/Proxy-WordPress/Proxy-Inverso# docker-compose up -d

7. Creación de las Instancias de WordPress:

  • Para cada sitio web de WordPress, se crea un archivo docker-compose.yml en su respectiva carpeta (ej., /Proxy-WordPress/Sitios-Web/Sitio-ejemplo.com) y /Proxy-WordPress/Sitios-Web/Sitio-entornomoreluz).
  • Cada instancia de WordPress consta de dos servicios: un servidor de base de datos (por ejemplo, MySQL 5.7) y la aplicación WordPress.
  • Se configuran variables de entorno para la base de datos (nombre, usuario, contraseña) y para WordPress, incluyendo VIRTUAL_HOST y LETSENCRYPT_HOST (que deben coincidir con el dominio del sitio web) y los detalles de conexión a la base de datos.
  • Es importante destacar que, aunque el archivo docker-compose.yml de WordPress no expone puertos directamente al host, el nginx-proxy se encarga de dirigir el tráfico al puerto 80 del contenedor de WordPress internamente.
  • También se especifica que estos servicios se conectan a la misma Red-Externa (nginx-proxy).
  • Una alternativa a MySQL es MariaDB, la cual es de código completamente abierto. La diferencia en el archivo docker-compose.yml es cambiar la imagen mysql:5.7 por mariadb:10.6.4-focal.
  • Se lanza cada instancia de WordPress con docker-compose up -d.

services:

  db-ejemplo:

    image: mysql:5.7

    container_name: db-ejemplo

    volumes:

      – db_data_ejemplo:/var/lib/mysql

    restart: always

    environment:

      MYSQL_ROOT_PASSWORD: somewordpress_ejemplo

      MYSQL_DATABASE: wordpress_ejemplo

      MYSQL_USER: wordpress_ejemplo

      MYSQL_PASSWORD: wordpress_ejemplo

    networks:

      – red-externa

  wordpress-ejemplo:

    depends_on:

      – db-ejemplo

    image: wordpress:latest

      container_name: wordpress-ejemplo

    volumes:

      – wordpress_data_ejemplo:/var/www/html

    restart: always

    environment:

      VIRTUAL_HOST: ejemplo.com

      LETSENCRYPT_HOST: ejemplo.com

      LETSENCRYPT_EMAIL: tu-email@ejemplo.com

      WORDPRESS_DB_HOST: db-ejemplo:3306

      WORDPRESS_DB_USER: wordpress_ejemplo

      WORDPRESS_DB_PASSWORD: wordpress_ejemplo

      WORDPRESS_DB_NAME: wordpress_ejemplo

  networks:

    – red-externa

  volumes:

    db_data_ejemplo:

    wordpress_data_ejemplo:

  networks:

    red-externa:

      external: true

Cambios realizados:

  1. Separación completa de servicios: Cada sitio tiene su propio docker-compose.yml con contenedores, bases de datos y volúmenes únicos.
  2. Nomenclatura diferenciada: Todos los contenedores, volúmenes y servicios tienen nombres únicos para evitar conflictos.
  3. Seguridad mejorada: Cada sitio tiene credenciales de base de datos separadas.
  4. Configuración SSL automática: Cada dominio tendrá su certificado Let’s Encrypt independiente.

version: ‘3.8’

services:
  db-demo:
    image: mysql:5.7
    container_name: db-demo
    volumes:
      – db_data_demo:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress_demo
      MYSQL_DATABASE: wordpress_demo
      MYSQL_USER: wordpress_demo
      MYSQL_PASSWORD: wordpress_demo
    networks:
      – red-externa

  wordpress-demo:
    depends_on:
      – db-demo
    image: wordpress:latest
    container_name: wordpress-demo
    volumes:
      – wordpress_data_demo:/var/www/html
    restart: always
    environment:
      VIRTUAL_HOST: demo.com
      LETSENCRYPT_HOST: demo.com
      LETSENCRYPT_EMAIL: tu-email@ejemplo.com
      WORDPRESS_DB_HOST: db-demo:3306
      WORDPRESS_DB_USER: wordpress_demo
      WORDPRESS_DB_PASSWORD: wordpress_demo
      WORDPRESS_DB_NAME: wordpress_demo
    networks:
      – red-externa

  volumes:
    db_data_demo:
   wordpress_data_demo:

  networks:
    red-externa:
      external: true

8. Verificación y Acceso:

  • Después de lanzar las instancias, se puede inspeccionar la Red-Externa para ver cómo los contenedores (nginx-proxy, letsencrypt-proxy, wordpress_db, wordpress) se han unido correctamente y se les han asignado IPs dentro de esta red.
  • Para acceder y configurar WordPress, el Proxy-Inversor expone los puertos 80 y 443 al exterior. Se puede usar un túnel SSH para acceder temporalmente al sitio web de configuración, por ejemplo, ssh -L 9090:localhost:80 root@your_IP y luego acceder desde el navegador local a http://localhost:9090.
  • Finalmente, se configurará WordPress de forma tradicional, accediendo a través del dominio configurado (ej., https://moreluz-ia.com).

Resumiendo: este enfoque le permitirá implementar un entorno web robusto y auto-gestionado en su VPS, utilizando Docker-Compose para orquestar el Proxy Inverso con certificados SSL automáticos y múltiples instancias de WordPress.

Recopilando:

-. Veamos los puntos mas importantes de este post:

  1. Esta guía detalla la implementación de entornos web modernos, desde la instalación de Docker en un VPS hasta la configuración de un Proxy Inverso con Let’s Encrypt para múltiples sitios WordPress.
  2. El primer paso es acceder a tu Servidor Privado Virtual (VPS) mediante SSH utilizando la IP, usuario y contraseña proporcionados por tu proveedor de servicios.
  3. Una vez dentro del VPS, es fundamental instalar Docker, para lo cual se deben actualizar los repositorios, añadir la clave GPG oficial y finalmente instalar el paquete docker-ce.
  4. A continuación, se instala Docker-Compose, una herramienta crucial para definir y ejecutar aplicaciones con múltiples contenedores a través de archivos docker-compose.yml.
  5. Se utiliza un Proxy Inverso, que actúa como intermediario entre el cliente y el servidor web, dirigiendo las solicitudes al sitio correspondiente dentro del VPS.
  6. Para asegurar las conexiones con HTTPS, se emplea Let’s Encrypt, que proporciona certificados SSL gratuitos de forma automatizada.
  7. WordPress, un popular sistema de gestión de contenidos (CMS), se utiliza para crear y administrar los sitios web dentro de este entorno.
  8. Se debe crear una red externa en Docker (ej., red-externa) para permitir la comunicación entre el contenedor del Proxy Inverso y los contenedores de los diferentes sitios WordPress.
  9. Para una correcta organización, se recomienda establecer una arquitectura de carpetas que separe la configuración del Proxy Inverso de los archivos de cada sitio web.
  10. El Proxy Inverso se configura con un docker-compose.yml que define dos servicios: nginx-proxy para redirigir el tráfico y letsencrypt-proxy-companion para gestionar los certificados SSL automáticamente.
  11. Cada sitio WordPress se implementa con su propio archivo docker-compose.yml, el cual define dos servicios principales: la aplicación de WordPress y una base de datos, que puede ser MySQL o MariaDB.
  12. En la configuración de cada WordPress, es vital definir las variables de entorno VIRTUAL_HOST y LETSENCRYPT_HOST con el dominio del sitio para que el proxy funcione correctamente.
  13. Aunque los contenedores de WordPress no exponen puertos directamente al exterior, el nginx-proxy se encarga de redirigir el tráfico del puerto 80 y 443 a cada instancia correspondiente.
  14. Este modelo de configuración, con archivos docker-compose.yml separados, mejora la seguridad y evita conflictos al usar credenciales y volúmenes únicos para cada sitio.
  15. Finalmente, tras lanzar los contenedores, puedes verificar que todos están conectados a la red externa y acceder a tus sitios WordPress a través de sus dominios ya configurados con HTTPS.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *