¿cuanta gente a visto el blog?

¿Como hacer un proxy reverso en Alma Linux instalada con Contenedor de Docker ?

ara configurar un proxy reverso en AlmaLinux desde cero con Docker, donde se redirige el tráfico entre dos contenedores que sirven páginas web simples, puedes seguir estos pasos. Aquí te dejo un esquema general:

1. Instalar Docker y Docker-Compose

Primero, instala Docker y Docker-Compose en tu servidor AlmaLinux.

sudo dnf install -y dnf-plugins-core sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install -y docker-ce docker-ce-cli containerd.io sudo systemctl start docker sudo systemctl enable docker

2. Configurar el archivo Docker-Compose

Crea un archivo docker-compose.yml que defina dos contenedores de Nginx, uno para la página "Hola" y otro para la página "Adiós". Luego, añade el contenedor del proxy reverso.

Crea un directorio para tu proyecto:

mkdir reverse_proxy && cd reverse_proxy

Crea un archivo docker-compose.yml:

nano docker-compose.yml

Y pega lo siguiente en el archivo:


version: '3' services: hola-service: image: nginx container_name: hola-service volumes: - ./html/hola:/usr/share/nginx/html networks: - proxy_network ports: - "8081:80" adios-service: image: nginx container_name: adios-service volumes: - ./html/adios:/usr/share/nginx/html networks: - proxy_network ports: - "8082:80" reverse-proxy: image: nginx container_name: reverse-proxy volumes: - ./nginx.conf:/etc/nginx/nginx.conf ports: - "80:80" networks: - proxy_network networks: proxy_network: driver: bridge


3. Crear las páginas "Hola" y "Adiós"

Crea las carpetas y archivos HTML para las dos páginas web.

mkdir -p html/hola echo "<h1>Hola</h1>" > html/hola/index.html mkdir -p html/adios echo "<h1>Adiós</h1>" > html/adios/index.html


4. Configurar el Proxy Reverso (Nginx)

Crea el archivo de configuración de Nginx para el proxy reverso.

nano nginx.conf

Agrega el siguiente contenido:

events {} http { upstream backend { server hola-service:80; server adios-service:80; } server { listen 80; server_name diaz_solis.com; location / { proxy_pass http://backend; } } }

Esto configura un "upstream" que redirige el tráfico entre los dos contenedores de Nginx (el de "Hola" y el de "Adiós").

5. Levantar los contenedores

Ejecuta Docker-Compose para levantar los contenedores.

  1. Instalar Docker Compose: Como no tienes docker-compose instalado, puedes instalarlo en AlmaLinux siguiendo estos pasos: 

    sudo curl -L "https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose

    Verifica la instalación ejecutando: 

    docker-compose --version
  2. Levantar los contenedores con Docker Compose: Ahora que tienes docker-compose instalado, vuelve a ejecutar el siguiente comando en el directorio reverse_proxy:  

docker-compose up -d

6. Prueba el Proxy Reverso

  • Si accedes a http://10.10.10.143, deberías ver cómo se redirige el tráfico entre los contenedores que sirven las páginas "Hola" y "Adiós".






fe de erratas 

El archivo nginx.conf que configura el proxy reverso se ubicará en la misma carpeta donde tienes tu archivo docker-compose.yml. Así que la ruta relativa sería:

bash
./nginx.conf

Cuando ejecutas nano nginx.conf, estarás creando y editando ese archivo de configuración dentro de tu directorio de trabajo actual, donde has creado el archivo docker-compose.yml. Esto asegura que el contenedor del proxy reverso pueda montar el archivo correctamente.

En resumen:

  • Tu archivo nginx.conf estará en el directorio actual, junto a docker-compose.yml.
  • La configuración que se utiliza en docker-compose.yml está buscando este archivo en la ruta ./nginx.conf.

Si trabajas desde la misma carpeta donde tienes el archivo de configuración de Docker Compose, simplemente usa: 

nano nginx.conf

Y estarás en la ubicación correcta.


Soluciones:

  1. Eliminar el contenedor anterior: Para evitar el conflicto de nombres, elimina el contenedor anterior. 

    docker rm nginx_proxy

    Esto eliminará el contenedor con el nombre conflictivo.



1. Verificar el estado de los contenedores

Ejecuta el siguiente comando para verificar si los contenedores están corriendo correctamente:

bash
docker ps

Deberías ver los contenedores de Nginx para las páginas "Hola" y "Adiós", así como el proxy reverso. Si alguno no está en ejecución, es posible que haya fallado al iniciar.

2. Revisar los logs del proxy

Verifica los logs del contenedor del proxy reverso para identificar posibles errores en la configuración de Nginx:

bash
docker logs reverse-proxy

Esto debería mostrarte cualquier error de Nginx relacionado con la configuración o la comunicación con los otros contenedores.

3. Verificar la conectividad entre los contenedores

Es posible que los contenedores "Hola" y "Adiós" no estén accesibles desde el contenedor del proxy. Ejecuta estos comandos para verificar:

  1. Ingresa al contenedor del proxy reverso:

    bash
    docker exec -it reverse-proxy /bin/bash
  2. Haz una prueba de conectividad a los otros servicios:

    bash
    curl http://hola-service curl http://adios-service

    Si alguno de estos comandos no responde, es posible que los nombres de servicio no se estén resolviendo correctamente. Verifica que los servicios estén definidos correctamente en docker-compose.yml y que todos los contenedores estén conectados a la misma red proxy_network.

4. Verificar el archivo de configuración de Nginx

Es posible que haya algún error en la configuración de Nginx. Asegúrate de que tu archivo nginx.conf tiene la sintaxis correcta y que Nginx está configurado para comunicarse con los otros servicios. Aquí un extracto básico para revisar:

http { upstream backend { server hola-service:80; server adios-service:80; } server { listen 80; server_name diaz_solis.com; location / { proxy_pass http://backend; } } }

Si el archivo está mal configurado o no apunta a los servicios correctos, Nginx no podrá redirigir el tráfico.

5. Verificar los puertos expuestos

Asegúrate de que los puertos de los contenedores están correctamente expuestos y no hay conflicto. Revisa el archivo docker-compose.yml para verificar que los puertos están bien configurados, y que 80:80 está expuesto correctamente en el contenedor del proxy.


  • Verifica si el contenedor del proxy reverso fue creado e intenta iniciarlo:

    Si el contenedor del proxy no está corriendo, primero asegúrate de que fue creado. Usa el siguiente comando para listar todos los contenedores, incluidos los que están detenidos:

    docker ps -a

    Si ves el contenedor de proxy reverso en estado "exited", intenta iniciarlo:

    docker start reverse-proxy
  • Si el contenedor no aparece, vuelve a levantar el servicio:

    Si el contenedor no aparece en la lista, ejecuta el comando docker-compose para crear e iniciar todos los servicios de nuevo:

    docker-compose up -d
  • Verifica el archivo de configuración nginx.conf:

    Asegúrate de que el archivo nginx.conf tenga la configuración correcta para balancear entre los servicios hola-service y adios-service. Aquí un ejemplo básico de lo que debe contener:

    http { upstream backend { server hola-service:80; server adios-service:80; } server { listen 80; server_name diaz_solis.com; location / { proxy_pass http://backend; } } }
  • Revisa los logs del proxy reverso:

    Si el proxy está creado pero no funciona, revisa los logs para detectar posibles errores:

    docker logs reverse-proxy

  • Localizar y editar nginx.conf

    1. Navega al directorio del proyecto: Primero, asegúrate de estar en el directorio correcto donde creaste el archivo:

      cd ~/reverse_proxy
    2. Verifica la existencia del archivo: Asegúrate de que nginx.conf esté en el directorio:

      ls

      Deberías ver una lista de archivos que incluye nginx.conf.

    3. Editar nginx.conf: Para editar el archivo, puedes usar un editor de texto como nano o vi. Aquí te muestro cómo hacerlo con nano:

      nano nginx.conf

      Esto abrirá el archivo en el editor nano. Puedes realizar los cambios necesarios en el archivo.

    4. Guardar y salir: Después de realizar las modificaciones, guarda el archivo en nano presionando Ctrl + O, luego presiona Enter para confirmar. Finalmente, sal del editor con Ctrl + X.

    5. Reiniciar los contenedores: Después de editar el archivo de configuración, asegúrate de reiniciar el contenedor del proxy reverso para que los cambios surtan efecto. Puedes hacerlo con: 

      docker-compose down docker-compose up -d


  • Instalación de Docker-Compose

    1. Descargar Docker-Compose:

      Utiliza curl o wget para descargar la versión más reciente de Docker-Compose. Puedes comprobar la versión más reciente en la página de lanzamientos de Docker-Compose.

      Aquí hay un comando que descarga la versión 1.29.2 (puedes cambiar el número de versión si hay una más reciente):

      bash
      sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    2. Dar permisos de ejecución:

      Una vez que se haya descargado, dale permisos de ejecución:

      bash
      sudo chmod +x /usr/local/bin/docker-compose
    3. Verificar la instalación:

      Comprueba que Docker-Compose se haya instalado correctamente ejecutando:

      bash
      docker-compose --version

    Continuar con la Configuración

    Después de instalar Docker-Compose, puedes volver a ejecutar el comando:

    bash
    docker-compose up -d

    . Instalar lsof

    Ejecuta el siguiente comando para instalar lsof:

    bash
    sudo dnf install lsof

    2. Verificar qué servicio está utilizando el puerto 80

    Después de instalar lsof, verifica nuevamente qué servicio está utilizando el puerto 80 con:

    sudo lsof -i :80

  • Detener el servicio de Nginx:

    Usa el siguiente comando para detener Nginx:

    sudo systemctl stop nginx

    Esto debería liberar el puerto 80 que estaba usando Nginx.

  • Deshabilitar Nginx al inicio (opcional):

    Si no necesitas Nginx en el sistema principal y prefieres que no se inicie automáticamente en el futuro, puedes deshabilitarlo:

    sudo systemctl disable nginx
  • Verificar que Nginx ya no está en ejecución:

    Vuelve a ejecutar el comando para verificar si el puerto 80 está libre:

    sudo lsof -i :80

    Deberías ver que no hay procesos en el puerto 80.

  • Iniciar tu configuración de Docker:

    Ahora que el puerto 80 está libre, intenta nuevamente levantar tus servicios de Docker:

    bash
    docker-compose up -d
  • Verificar el funcionamiento del proxy reverso:

    Una vez que los contenedores se estén ejecutando correctamente, verifica si puedes acceder a http://10.10.10.144 o http://diaz_solis.com.


  • 1. Deshabilitar Apache

    Primero, necesitas detener y deshabilitar el servicio Apache en AlmaLinux, ya que está escuchando en el puerto 80 y causando la interferencia.

    bash
    sudo systemctl stop httpd sudo systemctl disable httpd

    2. Revisar la configuración del proxy reverso

    Asegúrate de que la configuración de tu archivo nginx.conf para el proxy reverso esté correcta y que el contenedor del proxy esté levantado.

    Tu nginx.conf debe ser similar a este:

    nginx
    events {} http { upstream backend { server hola-service:80; server adios-service:80; } server { listen 80; server_name diaz_solis.com; # Asegúrate de que esto esté correctamente configurado location / { proxy_pass http://backend; } } }

    3. Verifica que Nginx esté corriendo

    Asegúrate de que el contenedor reverse-proxy esté funcionando:

    bash
    docker ps

    Deberías ver una lista de contenedores en ejecución. Busca reverse-proxy en esa lista.

    4. Verifica el archivo hosts (opcional)

    Si estás utilizando diaz_solis.com y no has configurado un DNS, asegúrate de que tu archivo /etc/hosts incluya la dirección IP de tu servidor:

    bash
    sudo nano /etc/hosts

    Agrega la línea:

    10.10.10.144 diaz_solis.com

    5. Probar el proxy reverso

    Ahora, prueba acceder a http://10.10.10.144 o http://diaz_solis.com. Deberías ser redirigido entre las páginas "Hola" y "Adiós".

    6. Verificar logs de Nginx

    Si todavía enfrentas problemas, puedes verificar los logs de Nginx dentro del contenedor para ver si hay algún error:

    bash
    docker logs reverse-proxy

    history

    [root@localhost reverse_proxy]# history 1 useradd pruno 2 passwd pruno 3 systemctl status sshd 4 sudo dnf update 5 sudo dnf upgrade 6 dnf install net-tools -y 7 vi /etc/ssh/sshd_config 8 systemctl restart sshd 9 useradd prdos 10 passwd prdos 11 ip add 12 init 0 13 sudo adduser prmas 14 sudo passwd prmas 15 sudo usermod 'aG wheel prmas 16 sudo usermod -aG wheel prmas 17 getent group wheel 18 dnf install net-tools -y 19 vi /etc/ssh/sshd_config 20 systemctl restart sshd 21 ip a 22 init 0 23 dnf --enablerepo=epel -y install snapd 24 ln -s /var/lib/snapd/snap /snap 25 echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' > /etc/profile.d/snap.sh 26 systemctl enable --now snapd.service snapd.socket 27 snap list 28 snap find kubernetes 29 snap install hello-world 30 snap list 31 snap info hello-world 32 hello-world 33 which hello-world 34 sudo hello-world 35 sudo nano /etc/profile.d/snap.sh 36 sudo dnf install nano 37 sudo nano /etc/profile.d/snap.sh 38 echo $PATH 39 hello-world 40 snap disable hello-world 41 snap list 42 hello-world 43 snap enable hello-world 44 hello-world 45 snap remove hello-world 46 dnf install -y tar 47 snap remove hello-world 48 snap list 49 snap install certbot --classic 50 51 ln -s /snap/bin/certbot /usr/bin/certbot 52 certbot certonly --webroot -w /var/www/html -d dns.srv.world 53 sudo dnf install httpd 54 sudo systemctl start httpd 55 sudo systemctl enable httpd 56 sudo firewall-cmd --permanent --add-service=http 57 sudo firewall-cmd --permanent --add-service=https 58 sudo firewall-cmd --reload 59 certbot certonly --webroot -w /var/www/html -d dns.srv.world 60 dig dns.srv.world 61 sudo vi /etc/httpd/conf.d/dns.srv.world.conf 62 sudo systemctl restart httpd 63 certbot certonly --webroot -w /var/www/html -d dns.srv.world 64 certbot certonly --standalone -d rx-9.srv.world 65 systemctl status snap.certbot.renew.timer 66 systemctl cat snap.certbot.renew.timer 67 certbot renew 68 openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out dlp_for_iis.pfx 69 vi /etc/nginx/nginx.conf 70 sudo dnf install nginx -y

    71 sudo systemctl start nginx 72 systemctl status nginx.service 73 journalctl -xeu nginx.service

    74 sudo netstat -tuln | grep ':80' 75 sudo ss -tuln | grep ':80' 76 sudo nginx -t 77 sudo systemctl start nginx

    78 sudo lsof -i :80 79 sudo ss -ltnp | grep ':80' 80 sudo systemctl stop httpd 81 sudo systemctl disable httpd 82 sudo systemctl start nginx 83 sudo systemctl status nginx 84 sudo systemctl enable nginx 85 sudo systemctl status nginx 86 sudo nano /etc/nginx/conf.d/your_domain.conf 87 sudo nginx -t

    88 nano /etc/nginx/conf.d/your_domain.conf 89 sudo nginx -t 90 nano /etc/nginx/conf.d/your_domain.conf 91 sudo nginx -t 92 vi /etc/nginx/nginx.conf 93 vi /etc/nginx/conf.d/proxy-ssl.conf 94 systemctl reload nginx 95 sudo nginx -t 96 sudo dnf install -y dnf-plugins-core 97 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 98 sudo dnf install -y docker-ce docker-ce-cli containerd.io 99 sudo systemctl start docker 100 sudo systemctl enable docker 101 mkdir reverse_proxy && cd reverse_proxy 102 nano docker-compose.yml 103 mkdir -p html/hola 104 echo "<h1>Hola</h1>" > html/hola/index.html 105 mkdir -p html/adios 106 echo "<h1>Adiós</h1>" > html/adios/index.html 107 nano nginx.conf 108 docker-compose up -d 109 sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 110 sudo chmod +x /usr/local/bin/docker-compose 111 docker-compose --version 112 docker-compose up -d 113 ip a 114 nano docker-compose.yml 115 sudo systemctl stop httpd 116 sudo systemctl disable httpd 117 cd /ruta/a/tu/proyecto/reverse_proxy 118 nano nginx.conf 119 docker-compose down 120 docker-compose up -d 121 docker ps

    122 docker logs reverse-proxy 123 sudo lsof -i :80 124 sudo dnf install lsof 125 sudo lsof -i :80 126 sudo systemctl stop nginx 127 sudo systemctl disable nginx 128 sudo lsof -i :80 129 docker-compose up -d 130 history


    No hay comentarios.:

    Publicar un comentario