เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹เบเบฒเบ™โ€‹เบฎเบฑเบšโ€‹เบญเบฑเบ”โ€‹เบ•เบฐโ€‹เป‚เบ™โ€‹เบกเบฑเบ”โ€‹เบ‚เบญเบ‡โ€‹เปƒเบšโ€‹เบขเบฑเป‰เบ‡โ€‹เบขเบทเบ™ letsencrypt เป‚เบ”เบโ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰ docker เปƒเบ™ linuxโ€‹

เบ‚เป‰เบญเบเบšเปเปˆเบ”เบปเบ™เบกเบฒเบ™เบตเป‰เป„เบ”เป‰เบ›เปˆเบฝเบ™เป€เบŠเบตเบšเป€เบงเบต virtual, เปเบฅเบฐเบ•เป‰เบญเบ‡เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบธเบเบขเปˆเบฒเบ‡เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡. เบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบซเป‰เป€เบงเบฑเบšเป„เบŠเบ—เปŒเบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป„เบ”เป‰เบœเปˆเบฒเบ™ https เปเบฅเบฐเปƒเบซเป‰เปƒเบšเบขเบฑเป‰เบ‡เบขเบทเบ™เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบฅเบฑเบšเป„เบ”เป‰เบ–เบทเบเบฎเบฑเบšเปเบฅเบฐเบ•เปเปˆเปƒเบซเบกเปˆเป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”. เบญเบฑเบ™เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เป‚เบ”เบเปƒเบŠเป‰เบชเบญเบ‡เบฎเบนเบš 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 community edition
    $ 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 เปเบฅเบฐ virtualenv, เป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰ clutter เบฅเบฐเบšเบปเบšเบ”เป‰เบงเบเบเบฒเบ™เบซเบธเป‰เบกเบซเปเปˆเบ—เบตเปˆเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™.

  1. เบ•เบดเบ”เบ•เบฑเป‰เบ‡ pip
    $ sudo yum install python-pip
  2. เบ•เบดเบ”เบ•เบฑเป‰เบ‡ virtualenv
    $ pip install virtualenv
  3. เบ•เปเปˆเป„เบ›, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเป‰เบฒเบ‡เป‚เบŸเบ™เป€เบ”เบตเบ—เบตเปˆเบกเบตเป‚เบ„เบ‡เบเบฒเบ™เปเบฅเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบกเบฑเบ™. เป‚เบŸเบ™เป€เบ”เบตเบ—เบตเปˆเบกเบตเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบ™เบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบเบฒเบ™เบซเบธเป‰เบกเบซเปเปˆเบˆเบฐเบ–เบทเบเป€เบญเบตเป‰เบ™เบงเปˆเบฒ ve.
    $ mkdir docker
    $ cd docker
    $ virtualenv ve
  4. เป€เบžเบทเปˆเบญเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก virtual, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เปƒเบ™เป‚เบŸเบ™เป€เบ”เบตเป‚เบ„เบ‡เบเบฒเบ™.
    $ source ve/bin/activate
  5. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ•เบดเบ”เบ•เบฑเป‰เบ‡ docker-compose.
    pip install docker-compose

    เป€เบžเบทเปˆเบญเปƒเบซเป‰เบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบตเป€เบซเบฑเบ™เบเบฑเบ™เปเบฅเบฐเบเบฑเบ™, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเป‰เบฒเบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบ. เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เป„เบ”เป€เบงเบตเบ‚เบปเบงเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰.

    $ docker network create network

    เบ•เปเปˆเป„เบ›, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡ configure docker-compose, proxy เบˆเบฐเบขเบนเปˆเปƒเบ™เป‚เบŸเบ™เป€เบ”เบตเบ•เบปเบงเปเบ—เบ™, เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ—เบปเบ”เบชเบญเบšเบˆเบฐเบขเบนเปˆเปƒเบ™เป‚เบŸเบ™เป€เบ”เบตเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ‚เป‰เบญเบเบเปเบฒเบฅเบฑเบ‡เปƒเบŠเป‰เบŠเบทเปˆเป‚เบ”เป€เบกเบ™ 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

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™