ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ Π½Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° letsencrypt сСртификати с Π΄ΠΎΠΊΠ΅Ρ€ Π½Π° linux

Наскоро смСних Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€ ΠΈ Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° настроя всичко ΠΎΡ‚Π½ΠΎΠ²ΠΎ. ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΠΌ ΡΠ°ΠΉΡ‚ΡŠΡ‚ Π΄Π° Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½ ΠΏΡ€Π΅Π· https ΠΈ сСртификатитС Π·Π° letsencrypt Π΄Π° сС ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚ ΠΈ подновяват Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС постигнС Ρ‡Ρ€Π΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π΄Π²Π΅ Π΄ΠΎΠΊΠ΅Ρ€ изобраТСния 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. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° инсталирайтС ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° общността Π½Π° Π΄ΠΎΠΊΠ΅Ρ€ΠΈΡ‚Π΅
    $ sudo yum install docker-ce docker-ce-cli containerd.io
  4. ДобавянС Π½Π° Π΄ΠΎΠΊΠ΅Ρ€ към стартиранС ΠΈ стартиранС
    $ sudo systemctl enable docker
    $ sudo systemctl start docker
  5. Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» към Π΄ΠΎΠΊΠ΅Ρ€ Π³Ρ€ΡƒΠΏΠ°Ρ‚Π°, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° стартиратС Π΄ΠΎΠΊΠ΅Ρ€ Π±Π΅Π· 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

    ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅ прокси/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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€