Nedavno sam mijenjao virtualni poslužitelj, pa sam sve morao ponovno postaviti. Preferiram da web stranica bude dostupna putem https, a da se certifikati letsencrypt automatski dobivaju i produžuju. To se može postići korištenjem dvije slike docker nginx-proxy i nginx-proxy-companion.
Ovo je vodič za postavljanje web stranice na docker s proxyem koji automatski dobiva SSL certifikati. Koristi se virtualni poslužitelj CentOS 7.
Pretpostavljam da je poslužitelj već kupljen, konfiguriran, da se na njega ulazi putem ključa, te da je instaliran fail2ban itd.
Za početak je potrebno instalirati docker.
- Prvo je potrebno instalirati ovisnosti
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2 - Priključite repozitorij
$ 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 u automatsko pokretanje i pokrenite ga
$ sudo systemctl enable docker $ sudo systemctl start docker - Dodajte korisnika u docker grupu kako biste mogli pokretati docker bez sudo
$ usermod -aG docker user
Sljedeći korak je instalirati docker-compose. Alat se može instalirati na nekoliko načina, ali preferiram instalirati ga putem pip menadžera i virtualenv-a kako ne bih zagušio sustav suvišnim paketima.
- Instalirajte pip
$ sudo yum install python-pip - Instalirajte virtualenv
$ pip install virtualenv - Zatim je potrebno stvoriti mapu s projektom i inicijalizirati je. Mapa sa svim potrebnim za upravljanje paketima zvat će se ve.
$ mkdir docker $ cd docker $ virtualenv ve - Da biste počeli koristiti virtualno okruženje, trebate izvršiti sljedeću naredbu u mapi s projektom.
$ source ve/bin/activate - Možete instalirati docker-compose.
pip install docker-composeDa bi kontejneri vidjeli jedni druge, stvorit ćemo mrežu. Po defaultu se koristi bridge drajver.
$ docker network create networkZatim je potrebno konfigurirati docker-compose, proxy će biti u mapi proxy, testna web stranica u mapi test. Kao primjer koristim domensko ime example.com
$ mkdir proxy $ mkdir test $ touch proxy/docker-compose.yml $ touch test/docker-compose.ymlSadržaj proxy/docker-compose.yml
verzija: '3' mreže: zadano: vanjski: ime: mreža usluge: nginx-proxy: naziv_kontejnera: nginx-proxy slika: jwilder/nginx-proxy portovi: - 80:80 - 443:443 volumeni: - 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: naziv_kontejnera: nginx-proxy-letsencrypt slika: jrcs/letsencrypt-nginx-proxy-companion volumeni: - certs:/etc/nginx/certs - vhost.d:/etc/nginx/vhost.d - html:/usr/share/nginx/html - /var/run/docker.sock:/var/run/docker.sock:ro okruženje: - NGINX_PROXY_CONTAINER=nginx-proxy volumeni: certs: vhost.d: html:Varijabla okruženja NGINX_PROXY_CONTAINER je potrebna kako bi letsencrypt kontejner mogao vidjeti proxy kontejner. Mape /etc/nginx/certs, /etc/nginx/vhost.d i /usr/share/nginx/html trebaju se zajednički koristiti između oba kontejnera. Za ispravan rad letsencrypt kontejnera, aplikacija mora biti dostupna na portovima 80 i 443.
Sadržaj test/docker-compose.yml
verzija: '3' mreže: zadano: vanjski: ime: mreža usluge: nginx: naziv_kontejnera: nginx slika: nginx:latest okruženje: - VIRTUAL_HOST=example.com - LETSENCRYPT_HOST=example.com - LETSENCRYPT_EMAIL=admin@example.comOvdje su varijable okruženja potrebne kako bi proxy ispravno obradio zahtjev prema serveru i zatražio certifikat za ispravno naziv domene.
Preostalo je samo pokrenuti docker-compose
$ cd proxy $ docker-compose up -d $ cd ../test $ docker-compose up -d
Izvor: habr.com
