Kohët e fundit kam ndryshuar serverin virtual dhe më është dashur të konfiguroj gjithçka përsëri. Unë preferoj që faqja të jetë e aksesueshme përmes https dhe certifikatat letsencrypt të merren dhe rinovohen automatikisht. Kjo mund të arrihet duke përdorur dy imazhe docker nginx-proxy dhe nginx-proxy-companion.
Ky është një udhëzues se si të konfiguroni një faqe interneti në Docker, me një përfaqësues që merr automatikisht certifikatat SSL. Përdoret serveri virtual CentOS 7.
Unë supozoj se serveri tashmë është blerë, konfiguruar, hyrë duke përdorur një çelës, është instaluar fail2ban, etj.
Së pari ju duhet të instaloni docker.
- Së pari ju duhet të instaloni varësitë
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
- Lidhni depon
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- Pastaj instaloni botimin e komunitetit docker
$ sudo yum install docker-ce docker-ce-cli containerd.io
- Shto docker në nisje dhe ekzekuto
$ sudo systemctl enable docker $ sudo systemctl start docker
- Shtoni një përdorues në grupin docker për të qenë në gjendje të ekzekutoni docker pa sudo
$ usermod -aG docker user
Hapi tjetër është instalimi i docker-compose. Programi mund të instalohet në disa mënyra, por unë preferoj ta instaloj përmes menaxherit të pip dhe virtualenv, në mënyrë që të mos rrëmbej sistemin me paketa të panevojshme.
- Instaloni pip
$ sudo yum install python-pip
- Instaloni virtualenv
$ pip install virtualenv
- Më pas ju duhet të krijoni një dosje me projektin dhe ta inicializoni atë. Dosja me gjithçka që ju nevojitet për të menaxhuar paketat do të quhet ve.
$ mkdir docker $ cd docker $ virtualenv ve
- Për të filluar përdorimin e mjedisit virtual, duhet të ekzekutoni komandën e mëposhtme në dosjen e projektit.
$ source ve/bin/activate
- Mund të instaloni docker-compose.
pip install docker-compose
Në mënyrë që kontejnerët të shohin njëri-tjetrin, ne do të krijojmë një rrjet. Si parazgjedhje, përdoret drejtuesi i urës.
$ docker network create network
Më pas ju duhet të konfiguroni docker-compose, përfaqësuesi do të jetë në dosjen e përfaqësuesit, faqja e testimit do të jetë në dosjen e provës. Për shembull, unë jam duke përdorur emrin e domenit example.com
$ mkdir proxy $ mkdir test $ touch proxy/docker-compose.yml $ touch test/docker-compose.yml
përmbajtje 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:
Variabli i mjedisit NGINX_PROXY_CONTAINER është e nevojshme që kontejneri letsencrypt të shohë kontejnerin e përfaqësuesit. Dosjet /etc/nginx/certs /etc/nginx/vhost.d dhe /usr/share/nginx/html duhet të ndahen nga të dy kontejnerët. Që kontejneri letsencrypt të funksionojë siç duhet, aplikacioni duhet të jetë i aksesueshëm në portin 80 dhe 443.
përmbajtje test/docker-kompozoj.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]
Këtu nevojiten variablat e mjedisit në mënyrë që përfaqësuesi të përpunojë saktë kërkesën në server dhe të kërkojë një certifikatë për emrin e saktë të domenit.
Gjithçka që mbetet është të ekzekutoni docker-compose
$ cd proxy $ docker-compose up -d $ cd ../test $ docker-compose up -d
Burimi: www.habr.com