Nedavno sam promijenio virtuelni server i morao sam sve ponovo podesiti. Više volim da stranica bude dostupna preko https i da se letsencrypt certifikati automatski pribavljaju i obnavljaju. Ovo se može postići korištenjem dvije docker slike nginx-proxy i nginx-proxy-companion.
Ovo je vodič o tome kako postaviti web lokaciju na docker-u, s proxyjem koji automatski prima SSL certifikate. Koristi se virtuelni server CentOS 7.
Pretpostavljam da je server već kupljen, konfigurisan, pristup mu se vrši pomoću ključa, instaliran fail2ban itd.
Prvo morate instalirati docker.
- Prvo morate instalirati ovisnosti
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
- Povežite spremište
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- Zatim instalirajte docker community edition
$ sudo yum install docker-ce docker-ce-cli containerd.io
- Dodajte docker za pokretanje i pokretanje
$ sudo systemctl enable docker $ sudo systemctl start docker
- Dodajte korisnika u docker grupu kako biste mogli pokrenuti docker bez sudoa
$ usermod -aG docker user
Sljedeći korak je instaliranje docker-compose. Uslužni program se može instalirati na više načina, ali ja radije instaliram preko pip managera i virtualenv-a, kako ne bi zakrčio sistem nepotrebnim paketima.
- Instaliraj pip
$ sudo yum install python-pip
- Instalirajte virtualenv
$ pip install virtualenv
- Zatim morate kreirati folder s projektom i inicijalizirati ga. Fascikla sa svime što je potrebno za upravljanje paketima će se zvati ve.
$ mkdir docker $ cd docker $ virtualenv ve
- Da biste počeli da koristite virtuelno okruženje, potrebno je da pokrenete sledeću naredbu u fascikli projekta.
$ source ve/bin/activate
- Možete instalirati docker-compose.
pip install docker-compose
Da bi kontejneri vidjeli jedni druge, napravimo mrežu. Upravljački program za most se koristi po defaultu.
$ docker network create network
Zatim morate konfigurirati docker-compose, proxy će biti u proxy folderu, a testno mjesto u test folderu. Na primjer, koristim ime domene example.com
$ mkdir proxy $ mkdir test $ touch proxy/docker-compose.yml $ touch test/docker-compose.yml
Sadržaj 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:
varijabla okruženja NGINX_PROXY_CONTAINER potrebno da letsencrypt kontejner vidi proxy kontejner. Fascikle /etc/nginx/certs /etc/nginx/vhost.d i /usr/share/nginx/html moraju dijeliti oba kontejnera. Da bi letsencrypt kontejner radio ispravno, aplikacija mora biti dostupna na 80 i 443 portu.
Sadržaj 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]
Ovdje su potrebne varijable okruženja kako bi proxy ispravno obradio zahtjev do servera i zatražio certifikat za ispravno ime domene.
Ostaje samo pokrenuti docker-compose
$ cd proxy $ docker-compose up -d $ cd ../test $ docker-compose up -d
izvor: www.habr.com