HTTPS para contenedores de Docker
Estoy desarrollando un servicio de flujo de trabajo como proyecto de entrenamiento. Abstrayéndonos de los detalles, todo lo que necesitas saber para esta pregunta está en la imagen aquí. Para implementarlo, alquilé un servidor y ejecuté docker-compose en él. Todo funciona bien, pero lo que me preocupa es que los puertos 8000 y 5432 están abiertos.
La primera pregunta es, ¿merece la pena preocuparse? Y si es así, ¿cómo puedo solucionarlo?
A continuación se muestra el contenido del archivo docker-compose:
version: "3"
services:
db:
container_name: 'emkk-db'
image: postgres
volumes:
- ./backend/data:/var/lib/postgresql/data
env_file:
- ./backend/db.env
ports:
- "5432:5432"
backend:
container_name: 'emkk-backend'
image: emkk_backend
build: ./backend
volumes:
- ./backend:/emkk/backend
env_file:
- ./backend/.env
ports:
- "8000:8000"
depends_on:
- db
frontend:
container_name: 'emkk-frontend'
image: emkk_frontend
build: ./frontend
command: npm run start
env_file:
- ./frontend/.env
volumes:
- /emkk/frontend/node_modules
- ./frontend:/emkk/frontend
ports:
- "80:80"
depends_on:
- backend
También quiero configurar el protocolo HTTPS. Intenté instalar nginx y ponerle un certificado usando Certbot, y luego redirigir las solicitudes a los contenedores. Me senté con esto durante varias horas y aún no logré conseguir algo mejor que una página de inicio de HTTPS para nginx.
Tal vez estoy haciendo cosas completamente equivocadas, pero soy nuevo en esto, nunca antes había tenido que lidiar con implementaciones. Agradecería sus respuestas, que contengan una idea o un ejemplo de cómo se puede hacer esto.
davy.ai
Puertos Abiertos
Generalmente, es recomendable cerrar todos los puertos abiertos innecesarios. Los puertos abiertos pueden ser un problema de seguridad importante, ya que exponen posibles vulnerabilidades a los atacantes. En este caso, tener abiertos los puertos 8000 y 5432 podría dejar su servidor vulnerable a ataques. Por lo tanto, vale la pena preocuparse al respecto.
Para cerrar los puertos, simplemente puede eliminar la sección
ports
del archivodocker-compose.yml
para cada servicio. Esto evitará que los puertos estén expuestos al mundo exterior a través de la red de contenedores.Configuración de HTTPS
Configurar HTTPS con Nginx y un certificado de certbot es un buen enfoque. Sin embargo, hay algunos pasos que debes seguir para asegurarte de que todo funcione como se espera.
Primero, debes asegurarte de que tu configuración de Nginx sea correcta. Debes tener un bloque de servidor que escuche en el puerto 443 y tenga un certificado SSL válido. Puedes usar el comando
certbot
para obtener un certificado SSL gratuito de Let’s Encrypt:Reemplaza
tu_domino.com
con el nombre de tu dominio real. Sigue las instrucciones para obtener el certificado y configurar Nginx.A continuación, tendrás que configurar Nginx para que canalice las solicitudes a los contenedores de Docker. Puedes hacer esto usando la directiva
proxy_pass
en la configuración de Nginx. Aquí tienes un ejemplo de bloque de configuración:En este ejemplo, tenemos dos contenedores de Docker:
backend
yfrontend
. La directivaproxy_pass
le indica a Nginx que envíe las solicitudes al contenedor correspondiente. También configuramos el encabezadoHost
para asegurarnos de que los contenedores reciban el nombre de dominio correcto.Por último, tendrás que actualizar tu archivo
docker-compose.yml
para incluir un bloque de red. Esto garantizará que el contenedor de Nginx pueda comunicarse con los demás contenedores en la misma red. Agrega el siguiente bloque de red al archivodocker-compose.yml
:Reemplaza
nombre_de_tu_red
con el nombre de tu red de Docker.Con estos cambios, deberías poder acceder a tu sitio web a través de HTTPS.