Nedávno som menil virtuálny server a musel som všetko nastaviť znova. Preferujem, aby bol web dostupný cez https a certifikáty letsencrypt sa získavali a predlžovali automaticky. Toho môžeme dosiahnuť použitím dvoch obrazov docker nginx-proxy a nginx-proxy-companion.
Toto je návod, ako nastaviť web na docker s proxy, ktorá automaticky získava SSL certifikáty. Používa sa virtuálny server CentOS 7.
Predpokladám, že server je už zakúpený, nastavený, prístup naň sa realizuje pomocou kľúča, nainštalovaný je fail2ban a podobne.
Na začiatok je potrebné nainštalovať docker.
- Najprv je potrebné nainštalovať závislosti
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2 - Pripojiť repozitár
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo - Potom nainštalovať docker community edition
$ sudo yum install docker-ce docker-ce-cli containerd.io - Pridať docker do automatického spúšťania a spustiť
$ sudo systemctl enable docker $ sudo systemctl start docker - Pridať používateľa do skupiny docker, aby bolo možné spúšťať docker bez sudo
$ usermod -aG docker user
Ďalší krok — nainštalovať docker-compose. Nástroj je možné nainštalovať viacerými spôsobmi, ale ja uprednostňujem inštaláciu cez pip manažér a virtualenv, aby som nezaplnil systém zbytočnými balíkmi.
- Nainštalovať pip
$ sudo yum install python-pip - Nainštalovať virtualenv
$ pip install virtualenv - Potom treba vytvoriť priečinok s projektom a inicializovať ho. Priečinok so všetkým potrebným na správu balíkov sa bude nazývať ve.
$ mkdir docker $ cd docker $ virtualenv ve - Aby ste mohli začať používať virtuálne prostredie, musíte spustiť nasledujúci príkaz v priečinku s projektom.
$ source ve/bin/activate - Môžete nainštalovať docker-compose.
pip install docker-composeAby kontejnery videli navzájom, vytvoríme sieť. Predvolene sa používa ovládač bridge.
$ docker network create networkNásledne je potrebné nastaviť docker-compose, proxy bude ležať v priečinku proxy, testovací web v priečinku test. Pre príklad používam doménové meno example.com.
$ mkdir proxy $ mkdir test $ touch proxy/docker-compose.yml $ touch test/docker-compose.ymlObsah proxy/docker-compose.yml
verzia: '3' sieť: predvolená: externé: meno: sieť služby: nginx-proxy: názov_kontajnera: nginx-proxy obrázok: jwilder/nginx-proxy porty: - 80:80 - 443:443 objemy: - 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: názov_kontajnera: nginx-proxy-letsencrypt obrázok: jrcs/letsencrypt-nginx-proxy-companion objemy: - certs:/etc/nginx/certs - vhost.d:/etc/nginx/vhost.d - html:/usr/share/nginx/html - /var/run/docker.sock:/var/run/docker.sock:ro prostredie: - NGINX_PROXY_CONTAINER=nginx-proxy objemy: certs: vhost.d: html:Premenná prostredia NGINX_PROXY_CONTAINER je potrebná, aby kontejner letsencrypt videl proxy kontejner. Zložky /etc/nginx/certs, /etc/nginx/vhost.d a /usr/share/nginx/html musia byť zdieľané obidvoma kontajnermi. Pre správne fungovanie kontajnera letsencrypt musí byť aplikácia dostupná na porte 80 aj 443.
Obsah test/docker-compose.yml
verzia: '3' sieť: predvolená: externé: meno: sieť služby: nginx: názov_kontajnera: nginx obrázok: nginx:latest prostredie: - VIRTUAL_HOST=example.com - LETSENCRYPT_HOST=example.com - LETSENCRYPT_EMAIL=admin@example.comTu sú premenné prostredia potrebné na to, aby proxy správne spracoval požiadavku na server a požiadal o certifikát na správne doménové meno.
Stačí len spustiť docker-compose
$ cd proxy $ docker-compose up -d $ cd ../test $ docker-compose up -d
Zdroj: habr.com
