duckdns 와일드 카드
docker/certbot/config/duckdns.ini 생성
dns_duckdns_token = [duckdns 토큰]
chmod 600 /volume1/docker/certbot/config/duckdns.ini
보안을 위해 적절한 권한 수정
nano Dockerfile
FROM certbot/certbot
RUN apk add --no-cache py3-pip \
&& pip install certbot-dns-duckdns
Ctrl X로 저장 y로 저장
docker build -t certbot-dns-duckdns .
SSH
docker run --rm -it \
-v "/volume1/docker/certbot/config:/etc/letsencrypt" \
-v "/volume1/docker/certbot/log:/var/log/letsencrypt" \
certbot-dns-duckdns certonly --manual --preferred-challenges=dns -d '*.[DDNS]' -d '[DDNS]'
(위 이미지는 certbot/certbot으로 돼 있지만, certbot-dns-duckdns가 올바른 문구입니다. 필자의 실수입니다)
이메일 입력
동의
밸류 메모
duckdns spec에 따라 아래 명령어
토큰은 메인에 있음
https://www.duckdns.org/update?domains=[도메인]&token=[토큰]&txt=[밸류]
도메인은 noriarchive
토큰은 위에서 복붙
밸류는 SSH에서 나온 걸 "마우스 드래그" 절대 Ctrl C 금지. 종료됨.
그리고 밸류 값은 실행할 때마다 다른 게 나오니까, 실수로 종료했다면 처음부터 다시.
만약 실수로 밸류 값을 잘못 넣거나 했다면
https://www.duckdns.org/update?domains=[도메인]&token=[토큰]&txt=&clear=true
이렇게 지울 수 있고
https://toolbox.googleapps.com/apps/dig/#TXT/ 해당 사이트에서
밸류 값 위에 있는 _acme로 시작하는 값을 넣는 것으로 조회가 가능.
밸류 값이 업데이트가 됐다면, 엔터를 클릭
이제 개인 키와 인증서를 뽑아와야 함.
다만 도커 컨테이너 내부에 저장된 거고, certbot은 그냥 꺼져버리기 때문에, 편법이 필요함.
docker run --rm -it --entrypoint /bin/sh \
-v "/volume1/docker/certbot/config:/etc/letsencrypt" \
certbot-dns-duckdns
이상태가 됐다면 ssh를 새로 열고
sudo -i 권한을 얻은 뒤 docker ps
certbot의 컨테이너 아이디 드래그. (드래그가 복사임)
새로 연 곳에서 마찬가지로 다음 명령어 입력
docker exec -it [컨테이너 ID] /bin/sh
다음 명령어 입력해서 키, 인증서를 임시 폴더로 복사
cp /etc/letsencrypt/live/noriarchive.duckdns.org/fullchain.pem /tmp/fullchain.pem
cp /etc/letsencrypt/live/noriarchive.duckdns.org/privkey.pem /tmp/privkey.pem
exit 입력해서 빠져나오기
docker cp [컨테이너 ID]:/tmp/fullchain.pem /volume1/docker/certbot/config/fullchain.pem
docker cp [컨테이너 ID]:/tmp/privkey.pem /volume1/docker/certbot/config/privkey.pem
컨테이너 ID 입력하고 복붙
복사됨
ssh 새 창은 닫고 원래 창에서 exit
그럼 자동으로 도커 종료됨
새 인증서를 추가하든, 기존 인증서 (duckdns 쓰던 게 있다면)를 교체하든
인증서 가져오기
이러고 확인
그라믄 이렇게 되는데 이제 역방향 프록시든 뭐든 그냥 제한 없이 다 쓸 수 있고
적용까지 5분~10분 정도 걸리니께 좀 기다려보이소
갱신
docker run --rm \
-v "/volume1/docker/certbot/config:/etc/letsencrypt" \
-v "/volume1/docker/certbot/log:/var/log/letsencrypt" \
certbot-dns-duckdns \
certonly \
--authenticator dns-duckdns \
--dns-duckdns-credentials /etc/letsencrypt/duckdns.ini \
--dns-duckdns-propagation-seconds 300 \
-d '*.noriarchive.duckdns.org' -d 'noriarchive.duckdns.org' \
--non-interactive --agree-tos -m hinamizawafighters@gmail.com
이거 딸깍하고 docker\certbot\config\live\noriarchive.duckdns.org
여기서 프라이빗하고 풀체인 들고와서 인증서 추가 (교체) 하면 됨
혹은
# 1. 인증서 갱신 시도
docker run --rm \
-v "/volume1/docker/certbot/config:/etc/letsencrypt" \
-v "/volume1/docker/certbot/log:/var/log/letsencrypt" \
certbot-dns-duckdns renew
# 2. pem 파일 자동 복사
cp /volume1/docker/certbot/config/live/noriarchive.duckdns.org/fullchain.pem /usr/syno/etc/certificate/_archive/DsKI8Y/fullchain.pem
cp /volume1/docker/certbot/config/live/noriarchive.duckdns.org/privkey.pem /usr/syno/etc/certificate/_archive/DsKI8Y/privkey.pem
# 3. nginx 및 DSM 관련 서비스 재시작
sudo synosystemctl restart nginx
이거를 작업 스케줄러에 등록하면 됨
트리거된 작업 > 사용자 정의 스크립트 (사용자 root)
sudo cat /usr/syno/etc/certificate/_archive/INFO
이 명령어를 통해, 키 값을 알아내야 함.
DsKI8Y 현재는 이 키 값임. 7월 22일에도 이거인지 확인하기.