ΠΠ΅Π½ΡΠ» Π½Π΅Π΄Π°Π²Π½ΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ, ΠΈ ΠΏΡΠΈΡΠ»ΠΎΡΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ Π²ΡΠ΅ Π·Π°Π½ΠΎΠ²ΠΎ. Π― ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Ρ, ΡΡΠΎΠ±Ρ ΡΠ°ΠΉΡ Π±ΡΠ» Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΏΠΎ https ΠΈ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ letsencrypt ΠΏΠΎΠ»ΡΡΠ°Π»ΠΈΡΡ ΠΈ ΠΏΡΠΎΠ΄Π»Π΅Π²Π°Π»ΠΈΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ. ΠΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡΡΡΡ, Π΅ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π²Π° ΠΎΠ±ΡΠ°Π·Π° docker nginx-proxy ΠΈ nginx-proxy-companion.
ΠΡΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΊΠ°ΠΊ Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΠ°ΠΉΡ Π½Π° docker, Ρ ΠΏΡΠΎΠΊΡΠΈ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ SSL ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ CentOS 7.
Π― ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ, ΡΡΠΎ ΡΠ΅ΡΠ²Π΅Ρ ΡΠΆΠ΅ ΠΊΡΠΏΠ»Π΅Π½, Π½Π°ΡΡΡΠΎΠ΅Π½, Π²Ρ ΠΎΠ΄ Π½Π° Π½Π΅Π³ΠΎ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎ ΠΊΠ»ΡΡΡ, ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ fail2ban ΠΈ Ρ.Π΄.
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Π½ΡΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ docker.
- Π‘Π½Π°ΡΠ°Π»Π° Π½ΡΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
- ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- ΠΠΎΡΠΎΠΌ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π΄ΠΎΠΊΠ΅Ρ community edition
$ sudo yum install docker-ce docker-ce-cli containerd.io
- ΠΠΎΠ±Π°Π²ΠΈΡΡ docker Π² Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΡ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ
$ sudo systemctl enable docker $ sudo systemctl start docker
- ΠΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π² Π³ΡΡΠΏΠΏΡ docker, Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ docker Π±Π΅Π· sudo
$ usermod -aG docker user
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π³ β ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ docker-compose. Π£ΡΠΈΠ»ΠΈΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΏΡΡΡΠΌΠΈ, Π½ΠΎ Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΡΠ΅ΡΠ΅Π· pip ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΠΈ virtualenv, ΡΡΠΎΠ±Ρ Π½Π΅ Π·Π°ΡΠΎΡΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Π»ΠΈΡΠ½ΠΈΠΌΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ°ΠΌΠΈ.
- Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ pip
$ sudo yum install python-pip
- Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ virtualenv
$ pip install virtualenv
- ΠΠ°Π»ΡΡΠ΅ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠ°ΠΏΠΊΡ Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π΅Π΅. ΠΠ°ΠΏΠΊΠ° ΡΠΎ Π²ΡΠ΅ΠΌ Π½ΡΠΆΠ½ΡΠΌ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠ°ΠΌΠΈ Π±ΡΠ΄Π΅Ρ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ ve.
$ mkdir docker $ cd docker $ virtualenv ve
- Π§ΡΠΎΠ±Ρ Π½Π°ΡΠ°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½ΡΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π² ΠΏΠ°ΠΏΠΊΠ΅ Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ.
$ source ve/bin/activate
- ΠΠΎΠΆΠ½ΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ docker-compose.
pip install docker-compose
ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ Π²ΠΈΠ΄Π΅Π»ΠΈ Π΄ΡΡΠ³ Π΄ΡΡΠ³Π°, ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ΅ΡΡ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄ΡΠ°ΠΉΠ²Π΅Ρ bridge.
$ docker network create network
ΠΠ°Π»ΡΡΠ΅ Π½ΡΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ docker-compose, proxy Π±ΡΠ΄Π΅Ρ Π»Π΅ΠΆΠ°ΡΡ Π² ΠΏΠ°ΠΏΠΊΠ΅ proxy, ΡΠ΅ΡΡΠΎΠ²ΡΠΉ ΡΠ°ΠΉΡ Π² ΠΏΠ°ΠΏΠΊΠ΅ test. ΠΠ»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠ΅ ΠΈΠΌΡ example.com
$ mkdir proxy $ mkdir test $ touch proxy/docker-compose.yml $ touch test/docker-compose.yml
Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ 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:
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ NGINX_PROXY_CONTAINER Π½ΡΠΆΠ½Π°, ΡΡΠΎΠ±Ρ letsencrypt ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΡΠ²ΠΈΠ΄Π΅Π» proxy ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ. ΠΠ°ΠΏΠΊΠΈ /etc/nginx/certs /etc/nginx/vhost.d ΠΈ /usr/share/nginx/html Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΈ ΡΠ΅ΠΌ ΠΈ Π΄ΡΡΠ³ΠΈΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠΌ. ΠΠ»Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ letsencrypt ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ ΠΈ ΠΏΠΎ 80 ΠΈ ΠΏΠΎ 443 ΠΏΠΎΡΡΡ.
Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ 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]
ΠΠ΄Π΅ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Π½ΡΠΆΠ½Ρ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠΊΡΠΈ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π» Π·Π°ΠΏΡΠΎΡ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ, ΠΈ Π·Π°ΠΏΡΠΎΡΠΈΠ» ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠ΅ ΠΈΠΌΡ.
ΠΡΡΠ°Π»ΠΎΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ docker-compose
$ cd proxy $ docker-compose up -d $ cd ../test $ docker-compose up -d
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com