ΠΠ°ΡΠΊΠΎΡΠΎ ΡΠΌΠ΅Π½ΠΈΡ Π²ΠΈΡΡΡΠ°Π»Π΅Π½ ΡΡΡΠ²ΡΡ ΠΈ ΡΡΡΠ±Π²Π°ΡΠ΅ Π΄Π° Π½Π°ΡΡΡΠΎΡ Π²ΡΠΈΡΠΊΠΎ ΠΎΡΠ½ΠΎΠ²ΠΎ. ΠΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°ΠΌ ΡΠ°ΠΉΡΡΡ Π΄Π° Π΅ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΏΡΠ΅Π· https ΠΈ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ΅ Π·Π° letsencrypt Π΄Π° ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π²Π°Ρ ΠΈ ΠΏΠΎΠ΄Π½ΠΎΠ²ΡΠ²Π°Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΡΡΠΈΠ³Π½Π΅ ΡΡΠ΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π΄Π²Π΅ Π΄ΠΎΠΊΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ 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
- Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΉΡΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΎΠ±ΡΠ½ΠΎΡΡΡΠ° Π½Π° Π΄ΠΎΠΊΠ΅ΡΠΈΡΠ΅
$ sudo yum install docker-ce docker-ce-cli containerd.io
- ΠΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° Π΄ΠΎΠΊΠ΅Ρ ΠΊΡΠΌ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ ΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅
$ sudo systemctl enable docker $ sudo systemctl start docker
- ΠΠΎΠ±Π°Π²Π΅ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π» ΠΊΡΠΌ Π΄ΠΎΠΊΠ΅Ρ Π³ΡΡΠΏΠ°ΡΠ°, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ Π΄ΠΎΠΊΠ΅Ρ Π±Π΅Π· sudo
$ usermod -aG docker user
Π‘Π»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΡΡΡΠΏΠΊΠ° Π΅ Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ docker-compose. ΠΠΎΠΌΠΎΡΠ½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ° ΠΏΠΎ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π½Π°ΡΠΈΠ½Π°, Π½ΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°ΠΌ Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌ ΡΡΠ΅Π· pip manager ΠΈ 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
ΠΠ° Π΄Π° ΠΌΠΎΠ³Π°Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ Π΄Π° ΡΠ΅ Π²ΠΈΠΆΠ΄Π°Ρ, Π½Π΅ΠΊΠ° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΠΌΡΠ΅ΠΆΠ°. ΠΡΠ°ΠΉΠ²Π΅ΡΡΡ Π·Π° ΠΌΠΎΡΡ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅.
$ docker network create network
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΡΡΠ±Π²Π° Π΄Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠ΅ docker-compose, ΠΏΡΠΎΠΊΡΠΈΡΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ Π² ΠΏΡΠΎΠΊΡΠΈ ΠΏΠ°ΠΏΠΊΠ°ΡΠ°, ΡΠ΅ΡΡΠΎΠ²ΠΈΡΡ ΡΠ°ΠΉΡ Π² ΡΠ΅ΡΡΠΎΠ²Π°ΡΠ° ΠΏΠ°ΠΏΠΊΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ ΠΈΠΌΠ΅ΡΠΎ Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½Π° example.com
$ mkdir proxy $ mkdir test $ touch proxy/docker-compose.yml $ touch test/docker-compose.yml
ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ ΠΏΡΠΎΠΊΡΠΈ/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, Π·Π° Π΄Π° Π²ΠΈΠ΄ΠΈ ΠΏΡΠΎΠΊΡΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°. ΠΠ°ΠΏΠΊΠΈΡΠ΅ /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
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com