Am schimbat recent serverul virtual și a trebuit să configurez totul din nou. Prefer ca site-ul să fie accesibil prin https, iar certificatele letsencrypt să fie obținute și reînewlate automat. Acest lucru se poate realiza folosind două imagini docker: nginx-proxy și nginx-proxy-companion.
Acest ghid este despre cum să configurezi un site pe docker, cu un proxy care obține automat Certificate SSL. Se folosește un server virtual CentOS 7.
Presupun că serverul a fost deja cumpărat, configurat, accesul se face prin cheie, este instalat fail2ban, etc.
Pentru început, trebuie să instalezi docker.
- Mai întâi trebuie să instalezi dependențele
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2 - Conectează depozitul
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo - Apoi instalează docker community edition
$ sudo yum install docker-ce docker-ce-cli containerd.io - Adaugă docker la pornirea automată și pornește-l
$ sudo systemctl enable docker $ sudo systemctl start docker - Adaugă utilizatorul în grupul docker, pentru a putea rula docker fără sudo
$ usermod -aG docker user
Următorul pas este să instalezi docker-compose. Utilitarul poate fi instalat în mai multe moduri, dar prefer să-l instalez prin managerul pip și virtualenv, pentru a nu aglomera sistemul cu pachete inutile.
- Instalează pip
$ sudo yum install python-pip - Instalează virtualenv
$ pip install virtualenv - Mai departe, trebuie să creezi un folder pentru proiect și să-l inițializezi. Folderul cu tot ce este necesar pentru gestionarea pachetelor se va numi ve.
$ mkdir docker $ cd docker $ virtualenv ve - Pentru a începe să folosești mediul virtual, trebuie să execuți următoarea comandă în folderul proiectului.
$ source ve/bin/activate - Poți instala docker-compose.
pip install docker-composePentru ca containerele să se vadă între ele, vom crea o rețea. Implicit se folosește driverul bridge.
$ docker network create networkApoi trebuie să configurezi docker-compose, proxy-ul va fi în folderul proxy, iar site-ul de test în folderul test. Ca exemplu, folosesc numele de domeniu example.com.
$ mkdir proxy $ mkdir test $ touch proxy/docker-compose.yml $ touch test/docker-compose.ymlConținut proxy/docker-compose.yml
versiune: '3' rețele: default: extern: nume: rețea servicii: nginx-proxy: nume_container: nginx-proxy imagine: jwilder/nginx-proxy porturi: - 80:80 - 443:443 volume: - 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: nume_container: nginx-proxy-letsencrypt imagine: jrcs/letsencrypt-nginx-proxy-companion volume: - certs:/etc/nginx/certs - vhost.d:/etc/nginx/vhost.d - html:/usr/share/nginx/html - /var/run/docker.sock:/var/run/docker.sock:ro mediu: - NGINX_PROXY_CONTAINER=nginx-proxy volume: certs: vhost.d: html:Variabilă de mediu NGINX_PROXY_CONTAINER este necesară pentru ca containerul letsencrypt să vadă containerul proxy. Folderele /etc/nginx/certs, /etc/nginx/vhost.d și /usr/share/nginx/html trebuie să fie utilizate de ambele containere. Pentru ca containerul letsencrypt să funcționeze corect, aplicația trebuie să fie accesibilă atât pe portul 80, cât și pe portul 443.
Conținut test/docker-compose.yml
versiune: '3' rețele: default: extern: nume: rețea servicii: nginx: nume_container: nginx imagine: nginx:latest mediu: - VIRTUAL_HOST=example.com - LETSENCRYPT_HOST=example.com - LETSENCRYPT_EMAIL=admin@example.comAici variabilele de mediu sunt necesare pentru ca proxy să proceseze corect cererea către server și să solicite certificat pentru numele de domeniu corect.
Rămâne doar să lansăm docker-compose
$ cd proxy $ docker-compose up -d $ cd ../test $ docker-compose up -d
Sursa: habr.com
