Διαμόρφωση αυτόματης λήψης πιστοποιητικών letsencrypt με docker στο linux

Πρόσφατα άλλαξα έναν εικονικό διακομιστή και έπρεπε να ρυθμίσω τα πάντα ξανά. Προτιμώ ο ιστότοπος να είναι προσβάσιμος μέσω https και τα πιστοποιητικά letsencrypt να λαμβάνονται και να ανανεώνονται αυτόματα. Αυτό μπορεί να επιτευχθεί χρησιμοποιώντας δύο εικόνες docker nginx-proxy και nginx-proxy-companion.

Αυτός είναι ένας οδηγός για το πώς να ρυθμίσετε έναν ιστότοπο στο docker, με έναν διακομιστή μεσολάβησης που λαμβάνει αυτόματα πιστοποιητικά SSL. Χρησιμοποιείται ο εικονικός διακομιστής CentOS 7.

Υποθέτω ότι ο διακομιστής έχει ήδη αγοραστεί, έχει ρυθμιστεί, η πρόσβαση σε αυτόν πραγματοποιείται με κλειδί, έχει εγκατασταθεί το fail2ban κ.λπ.

Πρώτα πρέπει να εγκαταστήσετε το docker.

  1. Πρώτα πρέπει να εγκαταστήσετε τις εξαρτήσεις
    $ sudo yum install -y yum-utils  device-mapper-persistent-data lvm2
  2. Σύνδεση αποθετηρίου
    $ sudo yum-config-manager  --add-repo  https://download.docker.com/linux/centos/docker-ce.repo
  3. Στη συνέχεια, εγκαταστήστε την έκδοση κοινότητας docker
    $ sudo yum install docker-ce docker-ce-cli containerd.io
  4. Προσθήκη docker στην εκκίνηση και εκτέλεση
    $ sudo systemctl enable docker
    $ sudo systemctl start docker
  5. Προσθέστε έναν χρήστη στην ομάδα docker για να μπορείτε να εκτελέσετε το docker χωρίς sudo
    $ usermod -aG docker user

Το επόμενο βήμα είναι να εγκαταστήσετε το docker-compose. Το βοηθητικό πρόγραμμα μπορεί να εγκατασταθεί με διάφορους τρόπους, αλλά προτιμώ να το εγκαταστήσω μέσω του pip manager και του virtualenv, για να μην φράξω το σύστημα με περιττά πακέτα.

  1. Εγκαταστήστε το pip
    $ sudo yum install python-pip
  2. Εγκαταστήστε το virtualenv
    $ pip install virtualenv
  3. Στη συνέχεια, πρέπει να δημιουργήσετε έναν φάκελο με το έργο και να το αρχικοποιήσετε. Ο φάκελος με όλα τα απαραίτητα για τη διαχείριση πακέτων θα ονομάζεται ve.
    $ mkdir docker
    $ cd docker
    $ virtualenv ve
  4. Για να ξεκινήσετε να χρησιμοποιείτε το εικονικό περιβάλλον, πρέπει να εκτελέσετε την ακόλουθη εντολή στο φάκελο του έργου.
    $ source ve/bin/activate
  5. Μπορείτε να εγκαταστήσετε το docker-compose.
    pip install docker-compose

    Για να βλέπονται τα κοντέινερ, ας δημιουργήσουμε ένα δίκτυο. Το πρόγραμμα οδήγησης γέφυρας χρησιμοποιείται από προεπιλογή.

    $ docker network create network

    Στη συνέχεια, πρέπει να διαμορφώσετε το docker-compose, ο διακομιστής μεσολάβησης θα βρίσκεται στο φάκελο του διακομιστή μεσολάβησης, ο ιστότοπος δοκιμής στον φάκελο δοκιμής. Για παράδειγμα, χρησιμοποιώ το όνομα τομέα example.com

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

    Περιεχόμενο 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:

    μεταβλητή περιβάλλοντος NGINX_PROXY_CONTAINER απαιτείται για το κοντέινερ letsencrypt για να δει το κοντέινερ του διακομιστή μεσολάβησης. Οι φάκελοι /etc/nginx/certs /etc/nginx/vhost.d και /usr/share/nginx/html πρέπει να είναι κοινόχρηστοι και από τα δύο κοντέινερ. Για να λειτουργήσει σωστά το κοντέινερ letsencrypt, η εφαρμογή πρέπει να είναι διαθέσιμη και στις δύο θύρες 80 και 443.

    Περιεχόμενο 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
          - [email protected]

    Εδώ, χρειάζονται μεταβλητές περιβάλλοντος, έτσι ώστε ο διακομιστής μεσολάβησης να επεξεργάζεται σωστά το αίτημα στον διακομιστή και να ζητά ένα πιστοποιητικό για το σωστό όνομα τομέα.

    Απομένει μόνο να τρέξει το docker-compose

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

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο