GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Aloja varios sitios web en contenedores Docker

Docker es una plataforma extremadamente útil que permite a los desarrolladores desarrollar e implementar aplicaciones fácilmente. En este artículo, veremos cómo usar contenedores Docker para alojar múltiples sitios web en un solo servidor. Uno de los beneficios más significativos de usar contenedores Docker es que son livianos, más rápidos y más fáciles de administrar.

Este mes, trasladé dos de mis aplicaciones personalizadas de dos servidores separados a un solo servidor, cada uno en su propio contenedor Docker. Es más fácil administrar ambas aplicaciones y también redujo mis costos de producción.

Cada aplicación se configura dentro de su propio entorno seguro y se puede acceder a ella a través de un nombre de dominio. Antes de pasar a las instrucciones, analicemos brevemente cómo funcionará y qué herramientas necesitaremos para configurar todo. Así que comencemos.

¿Qué queremos configurar?

Queremos usar contenedores Docker para configurar un solo servidor que pueda servir a múltiples aplicaciones o sitios web. Cuando un usuario solicita una URL para uno de los sitios web alojados, el servidor principal debe transmitir la solicitud al contenedor, que luego debe servir el contenido.

Necesitaremos configurar un servidor para lograr esto. He configurado un servidor con una dirección IP estática para este artículo. Consulte MassiveGRID, DigitalOcean o Vultr si está buscando un buen servicio de alojamiento en la nube.

En segundo lugar, crearemos un proxy para enrutar las solicitudes de los usuarios a sus contenedores apropiados. Hay muchas herramientas disponibles para este propósito, pero usaré nginx-proxy porque es extremadamente simple de configurar y tiene casi todas las funciones que necesitamos. Finalmente, usaremos Cloudflare como administrador de DNS para apuntar el nombre de dominio al servidor host (dirección IP).

También recomiendo usar Portainer, una interfaz gráfica fácil de usar para administrar contenedores docker. Para configurar Portainer, siga esta guía.

Una vez que su servidor esté en funcionamiento, ingrese al servidor y actualícelo.

ssh [email protected]

Si ha configurado la clave ssh para iniciar sesión, utilice la opción -i option in the ssh command to log in con la clave ssh privada.

ssh -i path-to-ssh-key [email protected]

Preparar el servidor

En la máquina host, estoy ejecutando Ubuntu 20.04. Las instrucciones serán las mismas ya sea que esté usando Debian u otra distribución basada en Debian. Para cualquier otra distribución, las únicas instrucciones para configurar la ventana acoplable serán diferentes y todo lo demás permanecerá igual. Siga esta guía para instalar Docker en Ubuntu.

Uso del certificado SSL con nginx-proxy

El segundo paso es crear un directorio que almacenará los certificados y claves SSL para cada dominio. En el servidor host, cree un directorio en el directorio /etc/. Puedes nombrar este directorio como quieras. Para este artículo, lo llamo cloudflare.

mkdir /etc/cloudflare

Más adelante, vincularemos este directorio con nginx-proxy para acceder a los certificados y claves SSL para cada nombre de dominio.

Crear red docker

También crearemos una red virtual a la que se conectarán todos los contenedores docker, incluido nginx-proxy.

docker network create nginx-proxy

Configurar nginx-proxy

Si queremos, podemos crear un proxy para hacer frente a este tipo de situaciones. Afortunadamente, los desarrolladores de nginx han creado una imagen completa de Docker que realizará un seguimiento de todos los contenedores y se actualizará tan pronto como se cree un nuevo contenedor. Para crear la ventana acoplable nginx-proxy (con ssl en mente), ejecute el siguiente comando:

docker run -d –name nginx-proxy -p 80:80 -p 443:443 –net nginx-proxy -v /etc/cloudflare:/etc/nginx/certs -v /var/run/docker.sock:/tmp/docker.sock:ro nginxproxy/nginx-proxy

Analicemos el comando anterior paso a paso.

  • correr – Esta opción creará el contenedor.
  • -d – Habilita el modo de depuración. En caso de que algo salga mal, generará información útil para localizar el problema.
  • –nombre – El nombre del contenedor.
  • -p 80:80 – Es extremadamente importante. El parámetro -p vincula el puerto del host con el puerto del contenedor. En el lado izquierdo de 80:80 está el puerto host y viceversa.
  • –red – Conecta el contenedor recién creado con la red nginx-proxy.
  • -v /etc/cloudflare:/etc/nginx/certs – Necesario si vas a utilizar SSL en tus webs. Vincular el directorio del host con el directorio del contenedor nginx-proxy donde almacena las claves y los certificados SSL.
  • -v /var/run/docker.sock:/tmp/docker.sock:ro – Adjuntar el socket de la ventana acoplable con el contenedor para comunicarse con el demonio de la ventana acoplable.
  • nginxproxy/nginx-proxy – La dirección de la imagen acoplable nginx-proxy alojada en hub.docker.com.

Hemos resuelto el rompecabezas más grande del juego una vez que haya creado el contenedor nginx-proxy. fue muy simple ¿Derecha? Todo es gracias a la imagen nginx-proxy; de lo contrario, tendríamos que hacer todo manualmente.

Crear contenedor con variable de entorno VIRTUAL_HOST

Nginx-proxy utiliza la variable de entorno VIRTUAL HOST para determinar qué dominio debe apuntar a qué servidor. Cada vez que cree un nuevo contenedor, establezca el valor de la variable VIRTUAL HOST en el nombre de dominio que desea que apunte a este contenedor.

docker run -it -d --name gaminggroup.online -h gaminggroup.online --expose 80 --net nginx-proxy -e VIRTUAL_HOST=gaminggroup.online -e VIRTUAL_HOST=www.gaminggroup.online httpd

Analicemos el comando anterior paso a paso.

  • -h – establece el nombre de dominio completo (establecer el nombre de dominio)
  • –exponer – Expone el puerto 80 para permitir el tráfico HTTP
  • –net – Conecte el contenedor recién creado a la red nginx-proxy
  • VIRTUAL_HOST=dominio.xyz – Nginx-proxy utiliza la variable VIRTUAL_HOST para redirigir las solicitudes de los usuarios a sus respectivos contenedores
  • httpd – Extraiga la imagen del servidor Apache del concentrador acoplable

El comando anterior iniciará el contenedor con el popular servidor web Apache. Cualquier solicitud que llega al servidor host se redirige al nginx-proxy, que luego la reenvía al puerto 80 de este contenedor. .

Apuntar dominio al servidor

Finalmente, configure el nombre de dominio para que apunte al servidor host. Cree un registro A con el nombre '@' e IPv4 como la dirección IP del servidor host. Espera un momento después de que hayas terminado. La propagación de DNS puede tardar desde unos minutos hasta varias horas.

Una vez que se complete la propagación de DNS, su nombre de dominio apuntará al contenedor recién creado que aloja el servidor web Apache. Ahora todo está configurado. Todo lo que necesita hacer es seguir creando contenedores con la variable VIRTUAL_HOST y nginx-proxy redirigirá correctamente el tráfico al contenedor.

Uso de SSL/HTTPS dentro de Docker

Debido a que la mayoría de nosotros preferimos servir contenido a través de HTTPS en lugar de HTTP inseguro, nginx-proxy puede manejarlo fácilmente. Ya pasamos el parámetro -v con el directorio /etc/cloudflare cuando configuramos el nginx-proxy envase. Este directorio está asociado con el nginx-proxy directorio /etc/nginx/certs .

Cada certificado SSL y clave deben almacenarse en /etc/cloudflare con el nombre propio. Los certificados SSL y las claves deben cambiarse de nombre de acuerdo con el nombre de dominio para el que son. Por ejemplo, para el nombre de dominio, example.com , el certificado SSL se debe renombrar como example.com.crt y la clave debe ser example.com.key .

Conclusión

El uso de nginx-proxy ha simplificado enormemente el proceso. Simplemente implemente un contenedor que maneje todo lo demás. Una vez hecho esto, puede implementar tantos contenedores como desee sin tener que preocuparse por demasiados archivos de configuración. Los contenedores son livianos, pero a medida que aumenta el tráfico o la carga de trabajo, se requerirán más recursos.

Si ha tenido alguna dificultad para seguir los pasos anteriores, hágamelo saber en la sección de comandos a continuación o únase a nuestro servidor de Discord para obtener ayuda rápida.


Docker
  1. Cómo configurar varios sitios web con el servidor web Apache

  2. Cómo instalar y alojar un servidor OpenVPN con Docker

  3. Cómo usar Docker Compose

  4. Cómo conectar contenedores Docker

  5. Cómo listar contenedores Docker

Cómo usar Docker Cp para copiar archivos entre el host y los contenedores

Cómo ejecutar contenedores Docker

Cómo eliminar contenedores Docker

Cómo detener los contenedores de Docker

Cómo instalar varios contenedores de discursos en el mismo servidor

Aloje múltiples sitios web en un solo servidor con Apache en Ubuntu 18.04