Administro servidores donde los usuarios tienen sus propios sitios web a los que se puede acceder por FTP (como una empresa de alojamiento) y, en lugar de trabajar en aislar los procesos de pila de LAMP, me preguntaba si era posible implementar Docker y usar imágenes por sitio web.
Por lo que entiendo, puede exponer la instancia de Docker a través de sus puertos, por lo que si ejecuta dos instancias de docker en el mismo servidor, tendrá que exponer dos puertos diferentes.
Pero es posible exportar no puertos, sino nombre del servidor, como:
- www.somewebsite.com: Docker instancia 1
- www.otherwebsite.com: Docker instancia 2
- www.etc.com: instancia de Docker ...
Y eso, en el mismo servidor.
Pensé en instalar solo Apache en el servidor, que redirigiría la solicitud a la instancia dedicada de Docker en función del nombre del servidor, pero luego tendría que instalar Apache (¡otra vez!) Y MySQL en cualquier instancia de Docker.
¿Es esto posible y, además, es interesante en términos de rendimiento (o no en absoluto)?
Gracias por tu ayuda.
Respuestas:
Sí, es posible. Lo que debe hacer es proporcionar varios 80 puertos. uno para cada URL. Puede hacerlo utilizando, por ejemplo, el host virtual de Apache que se ejecuta en el servidor host Docker.
El archivo de configuración de Apache se verá así:
fuente
ProxyPreserveHost On
, así que no terminas con muchos enlaces a local.hostname.ofDockerHost: 12345 en tu sitio web. Aquí hay más información que me fue útil: digitalocean.com/community/tutorials/…Es posible. Puede usar apache (o mejor aún, haproxy, nginx o barniz, que puede ser más eficiente que apache solo para esa tarea de redireccionamiento) en el servidor principal, para redirigir a los puertos apache de cada contenedor.
Pero, dependiendo de los sitios que ejecute allí (y sus configuraciones de apache), puede requerir mucha más memoria que usar un solo apache central con hosts virtuales, especialmente si tiene módulos (es decir, php) que requieren mucha RAM.
fuente
Sé que esto ya ha sido respondido, sin embargo, quería ir un paso más allá y mostrarle un ejemplo de cómo se podría hacer esto, para proporcionar una respuesta más completa.
Consulte la imagen de mi ventana acoplable aquí con instrucciones sobre cómo usarla, esto le mostrará cómo configurar dos sitios https://hub.docker.com/r/vect0r/httpd-proxy/
Como dijo jihun, deberá asegurarse de tener configurada la configuración de vhost. Mi ejemplo utiliza el puerto 80 para mostrar un sitio de prueba example.com y 81 para mostrar el sitio de prueba example2.com. También es importante tener en cuenta que deberá especificar su contenido y exponer los puertos necesarios en su Dockerfile, como tal;
Espero que esto ayude a explicar un poco más el proceso. Por favor, siéntase libre de hacerme más preguntas sobre esto, feliz de ayudar.
Saludos,
V
fuente
En mi caso, necesitaba agregar SSLProxyEngine On , ProxyPreserveHost On y RequestHeader establecieron Front-End-Https "On" en mi archivo vhost apache 2.4, porque quería habilitar SSL en el contenedor de la ventana acoplable. Sobre el local.hostname.ofDockerHost , en mi caso, el nombre del servidor host que ejecuta el contenedor Docker era lucas , y el puerto asignado al puerto 443 del contenedor Docker era 1443 (porque el puerto 443 ya estaba en uso por Apache en el host servidor), por lo que esa línea terminó de esta manera https: // lucas: 1443 /
Esta es la configuración final, ¡y está funcionando bien!
Finalmente, en el contenedor docker tuve que configurar encabezados SSL proxy. En mi caso, el contenedor ejecutaba nginx y algo llamado ómnibus para configurar aplicaciones de ruby. Creo que esto también se puede configurar en un archivo de configuración nginx. Lo escribirá tal como está en caso de que alguien encuentre útil
Guía completa para apache, ISP Config, servidor Ubuntu 16.04 aquí https://www.howtoforge.com/community/threads/subdomain-or-subfolder-route-requests-to-running-docker-image.73845/#post-347744
fuente