Configuración de la recepción automática de certificados letsencrypt con Docker en Linux

Recientemente cambié un servidor virtual y tuve que configurar todo nuevamente. Prefiero que se pueda acceder al sitio a través de https y que los certificados letsencrypt se obtengan y renueven automáticamente. Esto se puede lograr utilizando dos imágenes de Docker, nginx-proxy y nginx-proxy-companion.

Esta es una guía sobre cómo configurar un sitio en Docker, con un proxy que recibe automáticamente certificados SSL. Se utiliza el servidor virtual CentOS 7.

Supongo que el servidor ya ha sido comprado, configurado, el acceso al mismo se realiza mediante clave, fail2ban está instalado, etc.

Primero necesitas instalar Docker.

  1. Primero necesitas instalar las dependencias.
    $ sudo yum install -y yum-utils  device-mapper-persistent-data lvm2
  2. Conectar repositorio
    $ sudo yum-config-manager  --add-repo  https://download.docker.com/linux/centos/docker-ce.repo
  3. Luego instale la edición comunitaria de Docker
    $ sudo yum install docker-ce docker-ce-cli containerd.io
  4. Agregue Docker al inicio y ejecútelo
    $ sudo systemctl enable docker
    $ sudo systemctl start docker
  5. Agregue un usuario al grupo de Docker para poder ejecutar Docker sin sudo
    $ usermod -aG docker user

El siguiente paso es instalar Docker-Compose. La utilidad se puede instalar de varias maneras, pero prefiero instalarla a través de pip manager y virtualenv, para no obstruir el sistema con paquetes innecesarios.

  1. instalar pipa
    $ sudo yum install python-pip
  2. Instalar virtualenv
    $ pip install virtualenv
  3. A continuación, debe crear una carpeta con el proyecto e inicializarlo. La carpeta con todo lo necesario para la gestión de paquetes se llamará ve.
    $ mkdir docker
    $ cd docker
    $ virtualenv ve
  4. Para comenzar a utilizar el entorno virtual, debe ejecutar el siguiente comando en la carpeta del proyecto.
    $ source ve/bin/activate
  5. Puedes instalar Docker-compose.
    pip install docker-compose

    Para que los contenedores se vean, creemos una red. El controlador de puente se utiliza de forma predeterminada.

    $ docker network create network

    A continuación, debe configurar Docker-Compose, el proxy estará en la carpeta del proxy y el sitio de prueba en la carpeta de prueba. Por ejemplo, uso el nombre de dominio ejemplo.com

    $ mkdir proxy
    $ mkdir test
    $ touch proxy/docker-compose.yml
    $ touch test/docker-compose.yml

    contenido proxy/docker-compose.yml

    version: '3'
    
    networks:
      default:
        external:
          name: network
    
    services:
      nginx-proxy:
        container_name: nginx-proxy
        image: jwilder/nginx-proxy
        ports:
          - 80:80
          - 443:443
        volumes:
          - certs:/etc/nginx/certs
          - vhost.d:/etc/nginx/vhost.d
          - html:/usr/share/nginx/html
          - /var/run/docker.sock:/tmp/docker.sock:ro
    
      nginx-proxy-letsencrypt:
        container_name: nginx-proxy-letsencrypt
        image: jrcs/letsencrypt-nginx-proxy-companion
        volumes: 
          - certs:/etc/nginx/certs
          - vhost.d:/etc/nginx/vhost.d
          - html:/usr/share/nginx/html
          - /var/run/docker.sock:/var/run/docker.sock:ro
        environment:
          - NGINX_PROXY_CONTAINER=nginx-proxy
    
    volumes:
      certs:
      vhost.d:
      html:

    Variable ambiental NGINX_PROXY_CONTAINER necesario para que el contenedor letsencrypt vea el contenedor proxy. Ambos contenedores deben compartir las carpetas /etc/nginx/certs /etc/nginx/vhost.d y /usr/share/nginx/html. Para que el contenedor letsencrypt funcione correctamente, la aplicación debe estar disponible en los puertos 80 y 443.

    contenido prueba/docker-compose.yml

    version: '3'
    
    networks:
      default:
        external:
          name: network
    
    services:
    
      nginx:
        container_name: nginx
        image: nginx:latest
        environment:
          - VIRTUAL_HOST=example.com
          - LETSENCRYPT_HOST=example.com
          - [email protected]

    Aquí, las variables de entorno son necesarias para que el proxy procese correctamente la solicitud al servidor y solicite un certificado para el nombre de dominio correcto.

    Sólo queda ejecutar docker-compose

    $ cd proxy
    $ docker-compose up -d
    $ cd ../test
    $ docker-compose up -d

Fuente: habr.com

Añadir un comentario