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.
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:
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.
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
Levantar los contenedores con Docker Compose: Ahora que tienes
docker-compose
instalado, vuelve a ejecutar el siguiente comando en el directorioreverse_proxy
:
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 adocker-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:
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:
bashdocker 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:
bashdocker 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:
Ingresa al contenedor del proxy reverso:
bashdocker exec -it reverse-proxy /bin/bash
Haz una prueba de conectividad a los otros servicios:
bashcurl 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 redproxy_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
Navega al directorio del proyecto:
Primero, asegúrate de estar en el directorio correcto donde creaste el archivo:
cd ~/reverse_proxy
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
.
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.
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
.
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
Descargar Docker-Compose:
Utiliza
curl
owget
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):
bashsudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Dar permisos de ejecución:
Una vez que se haya descargado, dale permisos de ejecución:
bashsudo chmod +x /usr/local/bin/docker-compose
Verificar la instalación:
Comprueba que Docker-Compose se haya instalado correctamente ejecutando:
bashdocker-compose --version
Continuar con la Configuración
Después de instalar Docker-Compose, puedes volver a ejecutar el comando:
bashdocker-compose up -d
. Instalar lsof
Ejecuta el siguiente comando para instalar lsof
:
bashsudo 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:
bashdocker-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.
bashsudo 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:
nginxevents {} 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:
bashdocker 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:
bashsudo 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:
bashdocker 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