모든 도커 컨테이너에 letsencrypt 인증서 설치
How do I give each of the containers its own domain/subdomain? and how do I do it securely?
우선, 이 문제는 여러 가지 방법으로 해결할 수 있으며 어느 쪽도 다른 것보다 더 정확하지 않습니다. 다음을 사용하여 빠르고 쉬운 방법을 보여 드리겠습니다.
자동으로 수행됩니다.
설정
두 개의 서비스를 설정하고 싶다고 가정해 보겠습니다.
서비스
도메인
포트
그라파나
grafana.mydomain.com
80, 443
인플럭스DB
influx.mydomain.com
8086
⚠ This setup is just for testing purposes: any docker container will work with this method (wordpress, mariaDB, mongoDB, ELK stack, Minecraft server, custom images...)
각 컨테이너에 고유한 도메인/하위 도메인을 지정하려면 어떻게 해야 합니까?
실행 중인 설정에 따라 다릅니다.
a) VPS와 같은 공개 고정 IP를 사용하는 서버에서 모두 실행합니다.
쉬운! DNS 설정으로 이동하여 각 도메인/하위 도메인에 대해
A record
를 만드십시오. 이 경우 둘 다 동일한 IP 주소를 가리킵니다.약간 덜 반복적인 접근 방식은
A record
를 통해 도메인 중 하나를 IP 주소로 가리키고 다른 모든 도메인은 CNAME records
를 통해 해당 도메인을 가리킵니다. 이렇게 하면 IP 주소가 변경되면 한 번만 변경하면 됩니다!b) 공개 IP에서 실행하지만 때때로 변경됩니다.
이 시나리오는 예를 들어 집에서 호스트하고 ISP에서 할당한 공용 IP 주소가 주기적으로 변경되는 경우에 적용됩니다. 이 문제를 피하기 위해 자세히 설명하지 않을 몇 가지 가능성이 있지만 쉽게 따라할 수 있습니다. IT는 집에 있는 서버가 DNS 공급자와 통신하도록 하여 변경될 때마다 공용 IP를 알려주므로 그에 따라 DNS 항목이 변경될 수 있습니다.
이 작업을 직접 수행할 필요가 없으므로 걱정하지 마십시오. 빠른 시작을 위해 온라인에서 검색하십시오.
모든 DNS 항목이 동일한 IP 주소로 확인되는 경우 내 서버는 어떤 컨테이너를 가리킬지 어떻게 알 수 있습니까?
그것이
traefik
가 들어오는 곳입니다!1단계) traefik용 docker-compose.yml 파일 생성
여기에 작은 템플릿, 그에 따라 매개변수를 변경하십시오!
version: "3"
services:
traefik:
image: traefik
container_name: traefik
ports:
- "80:80" # HTTP port for grafana
- "443:443" # HTTPS port for grafana
- "8086:8086" # Exposed port for influxDB
# expose port below only if you need access to the Traefik API
#- "8080:8080"
command:
#- "--log.level=DEBUG"
#- "--api=true"
- "--providers.docker=true"
- "--entryPoints.port443.address=:443"
- "--entryPoints.port80.address=:80"
- "--entryPoints.port8086.address=:8086"
- "--certificatesResolvers.le-ssl.acme.tlsChallenge=true"
- "[email protected]"
- "--certificatesResolvers.le-ssl.acme.storage=/letsencrypt/acme.json"
volumes:
- traefik-data:/letsencrypt/
- /var/run/docker.sock:/var/run/docker.sock
restart: always
volumes:
traefik-data:
간단하지 않습니까? 당신이 그것을 실행하면
docker-compose up
많이 변경되지 않았음을 알 수 있습니다. 이는 컨테이너 정의에서 하위 도메인 자체를 설정해야 하기 때문입니다.
2단계) 각 컨테이너의 특정 구성 추가
예를 들어 grafana 및 influxDB는 다음과 같이 보일 수 있습니다.
version: "3"
services:
influx:
image: influxdb:1.7 # or any other recent version
labels:
# SSL endpoint
- "traefik.http.routers.influx-ssl.entryPoints=port8086"
- "traefik.http.routers.influx-ssl.rule=host(`influx.mydomain.com`)"
- "traefik.http.routers.influx-ssl.tls=true"
- "traefik.http.routers.influx-ssl.tls.certResolver=le-ssl"
- "traefik.http.routers.influx-ssl.service=influx-ssl"
- "traefik.http.services.influx-ssl.loadBalancer.server.port=8086"
restart: always
container_name: influxdb
volumes:
- influx-data:/var/lib/influxdb
environment:
# - INFLUXDB_DB=
- INFLUXDB_HTTP_ENABLED=true
- INFLUXDB_HTTP_AUTH_ENABLED=true
# - INFLUXDB_ADMIN_USER=
# - INFLUXDB_ADMIN_PASSWORD=
grafana:
labels:
# SSL redirect requires a separate router (https://github.com/containous/traefik/issues/4688#issuecomment-477800500)
- "traefik.http.routers.grafana.entryPoints=port80"
- "traefik.http.routers.grafana.rule=host(`grafana.mydomain.com`)"
- "traefik.http.middlewares.grafana-redirect.redirectScheme.scheme=https"
- "traefik.http.middlewares.grafana-redirect.redirectScheme.permanent=true"
- "traefik.http.routers.grafana.middlewares=grafana-redirect"
# SSL endpoint
- "traefik.http.routers.grafana-ssl.entryPoints=port443"
- "traefik.http.routers.grafana-ssl.rule=host(`grafana.mydomain.com`)"
- "traefik.http.routers.grafana-ssl.tls=true"
- "traefik.http.routers.grafana-ssl.tls.certResolver=le-ssl"
- "traefik.http.routers.grafana-ssl.service=grafana-ssl"
- "traefik.http.services.grafana-ssl.loadBalancer.server.port=3000"
image: grafana/grafana
container_name: grafana
restart: always
volumes:
- grafana-data:/var/lib/grafana
environment:
- GF_SERVER_ROOT_URL=https://grafana.mydomain.com
- GF_SERVER_DOMAIN=grafana.mydomain.com
- GF_USERS_ALLOW_SIGN_UP=false
volumes:
traefik-data:
influx-data:
grafana-data:
다음 사항에 유의하십시오.
traefik-data
볼륨도 포함되었습니다 letsencrypt가 마지막으로 한 가지를 요구하기 때문에 이것을 실행하면 여전히 작동하지 않습니다.
인증서 생성
letsencrypt가 필요한 인증서를 생성하려면 여기에서 주장하는 도메인이 우리 도메인인지 확인해야 합니다. 그렇게 하려면 각 하위 도메인에 대해 하나 이상의 DNS 항목을 추가해야 합니다.
각 항목은 다음과 같아야 합니다.
grafana
및 influx
만) letsencrypt.org
완료!
그게 다야! 통해 모든 컨테이너 실행
docker-compose up
(분리 모드의 경우
-d
추가)https://grafana.mydomain.com
로 이동하여 사용자 정의 도메인 및 TLS로 작업 중인 grafana를 확인하십시오!읽어 주셔서 감사합니다!
사랑스러운 하루!
Reference
이 문제에 관하여(모든 도커 컨테이너에 letsencrypt 인증서 설치), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/juanlu_sanz/install-letsecrypt-certificates-on-all-your-docker-containers-3ogb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)