Menyediakan penerimaan automatik sijil letsencrypt menggunakan docker pada linux

Saya baru-baru ini menukar pelayan maya, dan terpaksa mengkonfigurasi semuanya sekali lagi. Saya lebih suka tapak itu boleh diakses melalui https dan sijil letsencrypt diperoleh dan diperbaharui secara automatik. Ini boleh dicapai dengan menggunakan dua imej docker nginx-proxy dan nginx-proxy-companion.

Ini ialah panduan tentang cara menyediakan tapak web di Docker, dengan proksi yang menerima sijil SSL secara automatik. Pelayan maya CentOS 7 digunakan.

Saya menganggap bahawa pelayan telah dibeli, dikonfigurasikan, log masuk menggunakan kunci, fail2ban dipasang, dsb.

Mula-mula anda perlu memasang docker.

  1. Mula-mula anda perlu memasang kebergantungan
    $ sudo yum install -y yum-utils  device-mapper-persistent-data lvm2
  2. Sambungkan repositori
    $ sudo yum-config-manager  --add-repo  https://download.docker.com/linux/centos/docker-ce.repo
  3. Kemudian pasang edisi komuniti buruh pelabuhan
    $ sudo yum install docker-ce docker-ce-cli containerd.io
  4. Tambahkan docker untuk memulakan dan jalankan
    $ sudo systemctl enable docker
    $ sudo systemctl start docker
  5. Tambahkan pengguna pada kumpulan docker untuk dapat menjalankan docker tanpa sudo
    $ usermod -aG docker user

Langkah seterusnya ialah memasang docker-compose. Utiliti boleh dipasang dalam beberapa cara, tetapi saya lebih suka memasang melalui pengurus pip dan virtualenv, supaya tidak mengacaukan sistem dengan pakej yang tidak perlu.

  1. Pasang pip
    $ sudo yum install python-pip
  2. Pasang virtualenv
    $ pip install virtualenv
  3. Seterusnya anda perlu membuat folder dengan projek dan memulakannya. Folder dengan semua yang anda perlukan untuk menguruskan pakej akan dipanggil ve.
    $ mkdir docker
    $ cd docker
    $ virtualenv ve
  4. Untuk mula menggunakan persekitaran maya, anda perlu menjalankan arahan berikut dalam folder projek.
    $ source ve/bin/activate
  5. Anda boleh memasang docker-compose.
    pip install docker-compose

    Agar bekas dapat melihat satu sama lain, kami akan membuat rangkaian. Secara lalai, pemandu jambatan digunakan.

    $ docker network create network

    Seterusnya anda perlu mengkonfigurasi docker-compose, proksi akan berada dalam folder proksi, tapak ujian akan berada dalam folder ujian. Sebagai contoh, saya menggunakan nama domain example.com

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

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

    Pembolehubah persekitaran NGINX_PROXY_CONTAINER adalah perlu bagi bekas letsencrypt untuk melihat bekas proksi. Folder /etc/nginx/certs /etc/nginx/vhost.d dan /usr/share/nginx/html mesti dikongsi oleh kedua-dua bekas. Untuk bekas letsencrypt berfungsi dengan betul, aplikasi mesti boleh diakses pada kedua-dua port 80 dan 443.

    Kandungan 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]

    Di sini, pembolehubah persekitaran diperlukan supaya proksi memproses permintaan ke pelayan dengan betul dan meminta sijil untuk nama domain yang betul.

    Yang tinggal hanyalah menjalankan docker-compose

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

Sumber: www.habr.com

Tambah komen