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.
- İlk önce bağımlılıkları yüklemeniz gerekir
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
- Depoyu bağlayın
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- Ardından docker topluluk sürümünü yükleyin
$ sudo yum install docker-ce docker-ce-cli containerd.io
- Başlatmaya docker ekleyin ve çalıştırın
$ sudo systemctl enable docker $ sudo systemctl start docker
- 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.
- Pip'i yükle
$ sudo yum install python-pip
- virtualenv'i yükle
$ pip install virtualenv
- 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
- Sanal ortamı kullanmaya başlamak için proje klasöründe aşağıdaki komutu çalıştırmanız gerekmektedir.
$ source ve/bin/activate
- 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