Վերջերս ես փոխեցի վիրտուալ սերվերը և ստիպված եղա նորից կարգավորել ամեն ինչ: Ես նախընտրում եմ, որ կայքը հասանելի լինի 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
- Այնուհետև տեղադրեք docker համայնքի հրատարակությունը
$ 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 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
Բովանդակություն 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 կոնտեյները տեսնի վստահված անձի կոնտեյները: /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
Source: www.habr.com