Impostazione dell'ottenimento automatico di certificati letsencrypt con docker in linux

Recentemente ho cambiato il server virtuale e ho dovuto configurare tutto da capo. Preferisco che il sito sia accessibile tramite https e che i certificati letsencrypt siano ottenuti e rinnovati automaticamente. Questo può essere realizzato utilizzando due immagini docker: nginx-proxy e nginx-proxy-companion.

Questa guida spiega come configurare un sito su docker, con un proxy che ottiene automaticamente Certificati SSL. Si utilizza un server virtuale CentOS 7.

Presumo che il server sia già stato acquistato, configurato, l'accesso avvenga tramite chiave, e che sia stato installato fail2ban, ecc.

Per iniziare, è necessario installare docker.

  1. Per prima cosa è necessario installare le dipendenze
    $ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  2. Collegare il repository
    $ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  3. Poi installare la community edition di docker
    $ sudo yum install docker-ce docker-ce-cli containerd.io
  4. Aggiungere docker all'avvio automatico e avviarlo
    $ sudo systemctl enable docker
    $ sudo systemctl start docker
  5. Aggiungere l'utente al gruppo docker per poter eseguire docker senza sudo
    $ usermod -aG docker user

Il passo successivo consiste nell'installare docker-compose. L'utilità può essere installata in diversi modi, ma io preferisco utilizzare il gestore pip e virtualenv per non appesantire il sistema con pacchetti superflui.

  1. Installa pip
    $ sudo yum install python-pip
  2. Installa virtualenv
    $ pip install virtualenv
  3. Successivamente, è necessario creare una cartella per il progetto e inizializzarla. La cartella per la gestione dei pacchetti sarà chiamata ve.
    $ mkdir docker
    $ cd docker
    $ virtualenv ve
  4. Per utilizzare l'ambiente virtuale, è necessario eseguire il seguente comando nella cartella del progetto.
    $ source ve/bin/activate
  5. È possibile installare docker-compose.
    pip install docker-compose

    Affinché i contenitori possano vedere l'uno l'altro, creiamo una rete. In default viene utilizzato il driver bridge.

    $ docker network create network

    Dopo, è necessario configurare docker-compose; il proxy si troverà nella cartella proxy e il sito di prova nella cartella test. Per esempio, utilizzo il nome di dominio example.com.

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

    Contenuto 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:

    Variabile d'ambiente NGINX_PROXY_CONTAINER è necessaria affinché il contenitore letsencrypt veda il contenitore proxy. Le cartelle /etc/nginx/certs, /etc/nginx/vhost.d e /usr/share/nginx/html devono essere condivise da entrambi i contenitori. Per il corretto funzionamento del contenitore letsencrypt, l'applicazione deve essere accessibile sulla porta 80 e sulla porta 443.

    Contenuto 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

    Qui le variabili d'ambiente sono necessarie affinché il proxy gestisca correttamente le richieste al server e richieda un certificato per il nome di dominio corretto.

    Rimane solo da avviare docker-compose

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

Fonte: habr.com

Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster