Pred kratkim sem zamenjal virtualni strežnik in moral sem vse znova konfigurirati. Raje imam, da je stran dostopna prek https in naj se potrdila za šifriranje samodejno pridobijo in obnovijo. To je mogoče doseči z uporabo dveh slik dockerja nginx-proxy in nginx-proxy-companion.
To je vodnik o tem, kako nastaviti spletno mesto na Dockerju s proxyjem, ki samodejno prejme potrdila SSL. Uporabljen je virtualni strežnik CentOS 7.
Predvidevam, da je strežnik že kupljen, konfiguriran, prijavljen s ključem, nameščen fail2ban itd.
Najprej morate namestiti docker.
- Najprej morate namestiti odvisnosti
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
- Poveži repozitorij
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- Nato namestite izdajo skupnosti docker
$ sudo yum install docker-ce docker-ce-cli containerd.io
- Dodaj docker v zagon in zagon
$ sudo systemctl enable docker $ sudo systemctl start docker
- Dodajte uporabnika v skupino dockerjev, da boste lahko zagnali docker brez sudo
$ usermod -aG docker user
Naslednji korak je namestitev docker-compose. Pripomoček je možno namestiti na več načinov, a jaz raje nameščam preko upravitelja pip in virtualenv, da ne zamašim sistema z nepotrebnimi paketi.
- Namestite pip
$ sudo yum install python-pip
- Namestite virtualenv
$ pip install virtualenv
- Nato morate ustvariti mapo s projektom in jo inicializirati. Mapa z vsem, kar potrebujete za upravljanje paketov, se bo imenovala ve.
$ mkdir docker $ cd docker $ virtualenv ve
- Če želite začeti uporabljati virtualno okolje, morate zagnati naslednji ukaz v mapi projekta.
$ source ve/bin/activate
- Lahko namestite docker-compose.
pip install docker-compose
Da se kontejnerji vidijo, bomo ustvarili mrežo. Privzeto je uporabljen mostni gonilnik.
$ docker network create network
Nato morate konfigurirati docker-compose, proxy bo v mapi proxy, testno mesto bo v testni mapi. Na primer, uporabljam ime domene example.com
$ mkdir proxy $ mkdir test $ touch proxy/docker-compose.yml $ touch test/docker-compose.yml
Vsebina 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:
Spremenljivka okolja NGINX_PROXY_CONTAINER vsebnik letsencrypt mora videti vsebnik proxy. Oba vsebnika morata deliti mapi /etc/nginx/certs /etc/nginx/vhost.d in /usr/share/nginx/html. Da vsebnik letsencrypt deluje pravilno, mora biti aplikacija dostopna na vratih 80 in 443.
Vsebina 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]
Tukaj so spremenljivke okolja potrebne, da proxy pravilno obdela zahtevo do strežnika in zahteva potrdilo za pravilno ime domene.
Vse kar ostane je zagnati docker-compose
$ cd proxy $ docker-compose up -d $ cd ../test $ docker-compose up -d
Vir: www.habr.com