Ik heb onlangs mijn virtuele server veranderd en moest alles opnieuw instellen. Ik geef er de voorkeur aan dat de website toegankelijk is via https en dat de letsencrypt-certificaten automatisch worden verkregen en verlengd. Dit kan worden bereikt door twee Docker-images te gebruiken: nginx-proxy en nginx-proxy-companion.
Deze handleiding beschrijft hoe je een website op Docker instelt met een proxy die automatisch ontvangt SSL-certificaten. Er wordt een virtuele server met CentOS 7 gebruikt.
Ik veronderstel dat de server al is aangeschaft, ingesteld, dat de toegang verloopt via een sleutel, fail2ban is geïnstalleerd, enzovoort.
Om te beginnen moet je Docker installeren.
- Eerst moeten de afhankelijkheden worden geïnstalleerd.
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2 - Voeg de repository toe.
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo - Installeren van Docker Community Edition.
$ sudo yum install docker-ce docker-ce-cli containerd.io - Voeg Docker toe aan de autostart en start het.
$ sudo systemctl enable docker $ sudo systemctl start docker - Voeg de gebruiker toe aan de Docker-groep, zodat je Docker zonder sudo kunt uitvoeren.
$ usermod -aG docker user
De volgende stap is om docker-compose te installeren. De tool kan op verschillende manieren worden geïnstalleerd, maar ik geef de voorkeur aan installatie via de pip-manager en virtualenv om de systeemomgeving niet met ongewenste pakketten te vervuilen.
- Installeer pip.
$ sudo yum install python-pip - Installeer virtualenv.
$ pip install virtualenv - Vervolgens moet je een map voor het project maken en deze initialiseren. De map met alles wat nodig is om de pakketten te beheren, zal ve worden genoemd.
$ mkdir docker $ cd docker $ virtualenv ve - Om te beginnen met het gebruik van de virtuele omgeving, moet je de volgende opdracht in de projectmap uitvoeren.
$ source ve/bin/activate - Je kunt nu docker-compose installeren.
pip install docker-composeOm ervoor te zorgen dat de containers elkaar kunnen zien, creëren we een netwerk. Standaard wordt de bridge-driver gebruikt.
$ docker network create networkDaarna moet je docker-compose configureren; de proxy zal zich in de map proxy bevinden, de testwebsite in de map test. Voor dit voorbeeld gebruik ik de domeinnaam example.com.
$ mkdir proxy $ mkdir test $ touch proxy/docker-compose.yml $ touch test/docker-compose.ymlInhoud proxy/docker-compose.yml
versie: '3' netwerken: standaard: extern: naam: netwerk diensten: nginx-proxy: container_naam: nginx-proxy afbeelding: jwilder/nginx-proxy poorten: - 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_naam: nginx-proxy-letsencrypt afbeelding: 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 omgeving: - NGINX_PROXY_CONTAINER=nginx-proxy volumes: certs: vhost.d: html:Omgevingsvariabele NGINX_PROXY_CONTAINER is nodig zodat de letsencrypt-container de proxy-container kan zien. De mappen /etc/nginx/certs, /etc/nginx/vhost.d en /usr/share/nginx/html moeten zowel door de één als de andere container gedeeld worden. Voor een correcte werking van de letsencrypt-container moet de applicatie toegankelijk zijn via zowel poort 80 als poort 443.
Inhoud test/docker-compose.yml
versie: '3' netwerken: standaard: extern: naam: netwerk diensten: nginx: container_naam: nginx afbeelding: nginx:latest omgeving: - VIRTUAL_HOST=example.com - LETSENCRYPT_HOST=example.com - LETSENCRYPT_EMAIL=admin@example.comHier zijn omgevingsvariabelen nodig, zodat de proxy de verzoeken naar de server correct verwerkt en een certificaat aanvraagt voor de juiste domeinnaam.
Het enige wat nog rest is om docker-compose uit te voeren.
$ cd proxy $ docker-compose up -d $ cd ../test $ docker-compose up -d
Bron: habr.com
