Recientemente cambié un servidor virtual y tuve que configurar todo de nuevo. Prefiero que se pueda acceder al sitio a través de https y los certificados de letsencrypt se obtienen y renuevan automáticamente. Esto se puede lograr mediante el uso de dos imágenes acoplables, nginx-proxy y nginx-proxy-companion.
Esta es una guía para 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 se ha comprado, configurado, conectado por clave, fail2ban instalado, etc.
Primero necesitas instalar docker.
- Primero necesitas instalar las dependencias
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
- Conectar repositorio
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- Luego instale el acoplador de edición comunitaria
$ sudo yum install docker-ce docker-ce-cli containerd.io
- Agregue docker para cargar automáticamente y ejecutar
$ sudo systemctl enable docker $ sudo systemctl start docker
- Agregue un usuario al grupo 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.
- Instalar pip
$ sudo yum install python-pip
- Instalar virtualenv
$ pip install virtualenv
- A continuación, debe crear una carpeta con el proyecto e inicializarlo. La carpeta con todo lo que necesita para la administración de paquetes se llamará ve.
$ mkdir docker $ cd docker $ virtualenv ve
- Para comenzar a usar el entorno virtual, debe ejecutar el siguiente comando en la carpeta del proyecto.
$ source ve/bin/activate
- Puede instalar docker-compose.
pip install docker-compose
Para que los contenedores se vean, cree una red. Por defecto, se utiliza el controlador de puente.
$ docker network create network
A continuación, debe configurar docker-compose, el proxy estará en la carpeta proxy, el sitio de prueba en la carpeta de prueba. Por ejemplo, uso el nombre de dominio example.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:
La variable de entorno NGINX_PROXY_CONTAINER es necesaria para que el contenedor letsencrypt vea el contenedor proxy. Los dos 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 de test / 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 - LETSENCRYPT_EMAIL=admin@example.com
Aquí, se necesitan variables de entorno para que el proxy procese correctamente la solicitud al servidor y solicite un certificado para el nombre de dominio correcto.
Solo queda ejecutar docker-compose
$ cd proxy $ docker-compose up -d $ cd ../test $ docker-compose up -d