Linux'ta docker kullanarak letsencrypt sertifikalarının otomatik olarak alınmasını ayarlama

Yakın zamanda sanal sunucuyu değiştirdim ve her şeyi yeniden yapılandırmak zorunda kaldım. Sitenin https üzerinden erişilebilir olmasını ve kripto sertifikalarının otomatik olarak alınıp yenilenmesini tercih ediyorum. Bu, nginx-proxy ve nginx-proxy-companion olmak üzere iki liman işçisi görüntüsü kullanılarak gerçekleştirilebilir.

Bu, Docker'da otomatik olarak SSL sertifikaları alan bir proxy ile bir web sitesinin nasıl kurulacağına ilişkin bir kılavuzdur. CentOS 7 sanal sunucusu kullanılmaktadır.

Sunucunun zaten satın alındığını, yapılandırıldığını, bir anahtar kullanılarak oturum açıldığını, fail2ban'ın kurulduğunu vb. varsayıyorum.

İlk önce docker'ı kurmanız gerekiyor.

  1. İlk önce bağımlılıkları yüklemeniz gerekir
    $ sudo yum install -y yum-utils  device-mapper-persistent-data lvm2
  2. Depoyu bağlayın
    $ sudo yum-config-manager  --add-repo  https://download.docker.com/linux/centos/docker-ce.repo
  3. Ardından docker topluluk sürümünü yükleyin
    $ sudo yum install docker-ce docker-ce-cli containerd.io
  4. Başlatmaya docker ekleyin ve çalıştırın
    $ sudo systemctl enable docker
    $ sudo systemctl start docker
  5. Docker'ı sudo olmadan çalıştırabilmek için docker grubuna bir kullanıcı ekleyin
    $ usermod -aG docker user

Bir sonraki adım docker-compose'u kurmaktır. Yardımcı program çeşitli şekillerde kurulabilir, ancak sistemi gereksiz paketlerle doldurmamak için pip yöneticisi ve virtualenv aracılığıyla kurulumu tercih ediyorum.

  1. Pip'i yükle
    $ sudo yum install python-pip
  2. virtualenv'i yükle
    $ pip install virtualenv
  3. Daha sonra projeyle birlikte bir klasör oluşturmanız ve onu başlatmanız gerekir. Paketleri yönetmek için ihtiyacınız olan her şeyin bulunduğu klasöre ve adı verilecek.
    $ mkdir docker
    $ cd docker
    $ virtualenv ve
  4. Sanal ortamı kullanmaya başlamak için proje klasöründe aşağıdaki komutu çalıştırmanız gerekmektedir.
    $ source ve/bin/activate
  5. Docker-compose'u kurabilirsiniz.
    pip install docker-compose

    Container'ların birbirini görebilmesi için bir ağ oluşturacağız. Varsayılan olarak köprü sürücüsü kullanılır.

    $ docker network create network

    Daha sonra docker-compose'u yapılandırmanız gerekir, proxy proxy klasöründe olacak, test sitesi test klasöründe olacaktır. Örneğin, example.com alan adını kullanıyorum

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

    içindekiler 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:

    Çevre değişkeni NGINX_PROXY_CONTAINER letsencrypt konteynerinin proxy konteynerini görmesi gerekir. /etc/nginx/certs /etc/nginx/vhost.d ve /usr/share/nginx/html klasörleri her iki kapsayıcı tarafından paylaşılmalıdır. Letsencrypt konteynerinin düzgün çalışması için uygulamanın hem 80 hem de 443 numaralı bağlantı noktasından erişilebilir olması gerekir.

    içindekiler 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]

    Burada proxy'nin sunucuya gelen isteği doğru şekilde işlemesi ve doğru alan adı için sertifika istemesi için ortam değişkenlerine ihtiyaç vardır.

    Geriye kalan tek şey docker-compose'u çalıştırmak

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

Kaynak: habr.com

Yorum ekle