Nedávno som zmenil virtuálny server a musel som všetko znova nakonfigurovať. Uprednostňujem, aby bola stránka prístupná cez https a aby sa automaticky získavali a obnovovali certifikáty. Dá sa to dosiahnuť použitím dvoch obrázkov ukotvenia nginx-proxy a nginx-proxy-companion.
Toto je návod, ako nastaviť webovú stránku na Docker s proxy, ktorá automaticky prijíma certifikáty SSL. Používa sa virtuálny server CentOS 7.
Predpokladám, že server už bol zakúpený, nakonfigurovaný, prihlásený pomocou kľúča, nainštalovaný fail2ban atď.
Najprv musíte nainštalovať docker.
- Najprv musíte nainštalovať závislosti
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
- Pripojte úložisko
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- Potom nainštalujte vydanie komunity docker
$ sudo yum install docker-ce docker-ce-cli containerd.io
- Pridajte dokovaciu stanicu do spustenia a spustite
$ sudo systemctl enable docker $ sudo systemctl start docker
- Pridajte používateľa do skupiny docker, aby ste mohli spustiť docker bez sudo
$ usermod -aG docker user
Ďalším krokom je inštalácia docker-compose. Pomôcku je možné nainštalovať viacerými spôsobmi, ale ja preferujem inštaláciu cez pip manager a virtualenv, aby som nezahltil systém zbytočnými balíkmi.
- Nainštalujte pip
$ sudo yum install python-pip
- Nainštalujte virtualenv
$ pip install virtualenv
- Ďalej musíte vytvoriť priečinok s projektom a inicializovať ho. Priečinok so všetkým, čo potrebujete na správu balíkov, sa bude volať ve.
$ mkdir docker $ cd docker $ virtualenv ve
- Ak chcete začať používať virtuálne prostredie, musíte v priečinku projektu spustiť nasledujúci príkaz.
$ source ve/bin/activate
- Môžete si nainštalovať docker-compose.
pip install docker-compose
Aby kontajnery na seba videli, vytvoríme sieť. Štandardne sa používa ovládač mosta.
$ docker network create network
Ďalej musíte nakonfigurovať docker-compose, proxy bude v priečinku proxy, testovacia lokalita bude v priečinku test. Napríklad používam názov domény example.com
$ mkdir proxy $ mkdir test $ touch proxy/docker-compose.yml $ touch test/docker-compose.yml
obsah 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:
Premenná prostredia NGINX_PROXY_CONTAINER je potrebné, aby kontajner letsencrypt videl kontajner proxy. Priečinky /etc/nginx/certs /etc/nginx/vhost.d a /usr/share/nginx/html musia byť zdieľané oboma kontajnermi. Aby kontajner letsencrypt fungoval správne, aplikácia musí byť prístupná na porte 80 aj 443.
obsah 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]
Tu sú potrebné premenné prostredia, aby proxy server správne spracoval požiadavku na server a vyžiadal si certifikát pre správny názov domény.
Zostáva len spustiť docker-compose
$ cd proxy $ docker-compose up -d $ cd ../test $ docker-compose up -d
Zdroj: hab.com