Let's Encrypt로 항구 설정하기

이 자습서는 Harbor을 사용하여 Let’s Encrypt 인증서로 Certbot을 설정하는 단계별 가이드를 제공합니다.

요구 사항


  • Linux 머신(Ubuntu 20.04로 테스트)
  • Linux 시스템을 가리키는 공개 도메인
  • 포트 80/443은 외부에서 연결할 수 있습니다.
  • 도커
  • 도커 작성

  • Certbot / Let's Encrypt



    먼저 Certbot을 설치하여 컴퓨터에 Let's Encrypt 인증서를 생성해야 합니다. Ubuntu에서는 다음과 같이 snap을 사용하여 쉽게 수행할 수 있습니다.

    $ snap install certbot --classic
    


    그런 다음 Certbot의 독립 실행형 모드를 사용하여 Harbour 도메인에 대한 새 인증서를 만들고 원하는 도메인을 매개변수로 추가할 수 있습니다. Certbot을 처음 실행할 때 인증서를 생성하기 전에 유효한 이메일 주소를 요청하고 서비스 약관에 동의합니다.

    $ certbot certonly --standalone -d registry.example.com
    


    명령이 완료되면 다음 출력을 제공해야 합니다.

    IMPORTANT NOTES:
    - Congratulations! Your certificate and chain have been saved at:
      /etc/letsencrypt/live/registry.example.com/fullchain.pem
      Your key file has been saved at:
      /etc/letsencrypt/live/registry.example.com/privkey.pem
      Your certificate will expire on 2021-04-21. To obtain a new or
      tweaked version of this certificate in the future, simply run
      certbot again. To non-interactively renew *all* of your
      certificates, run "certbot renew"
    - If you like Certbot, please consider supporting our work by:
    Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
    Donating to EFF:                    https://eff.org/donate-le
    


    마지막으로/etc/letsencrypt/live의 관련 도메인 폴더에서 인증서 파일을 찾을 수 있습니다.

    $ ls /etc/letsencrypt/live/registry.example.com
    README  cert.pem  chain.pem  fullchain.pem  privkey.pem
    


    항구



    이제 시스템에 Harbour 설치를 계속할 수 있습니다. Harbor GitHub Releases page 으로 이동하여 최신 설치 프로그램을 다운로드하고 아카이브를 추출합니다.

    $ wget https://github.com/goharbor/harbor/releases/download/v2.1.3/harbor-online-installer-v2.1.3.tgz
    $ tar xvf harbor-online-installer-v2.1.3.tgz
    


    Harbour 인스턴스를 구성하기 위해 추출된 Harbour 구성 템플릿의 복사본을 만들고 편집기로 열 수 있습니다.

    $ cd harbor
    $ cp harbor.yml.tmpl harbor.yml
    $ vim harbor.yml
    


    구성 파일은 Harbour 인스턴스를 구성하고 사용자 지정하기 위한 많은 속성을 제공합니다. 최소한의 설치의 경우 다음 값을 변경하는 것으로 충분합니다.

    # Change the hostname to your domain configured earlier
    hostname: reg.mydomain.com
    # Keep the http and https port configuration, but change the path of
    # the certificate files to the Let's Encrypt certificate
    http:
      port: 80
    https:
      port: 443
      certificate: /your/certificate/path
      private_key: /your/private/key/path
    # Change the admin password to something more secure
    harbor_admin_password: Harbor12345
    # Change the database password to something more secure
    database:
      password: root123
    


    구성이 적용되면 Harbor는 설치 스크립트를 사용하여 배포할 준비가 됩니다.

    $ ./install.sh
    ...
    ✔ ----Harbor has been installed and started successfully.----
    


    마지막으로 Harbour 인스턴스의 도메인을 브라우저에서 열어 결과를 확인해보자. 유효한 인증서로 보호되는 Harbor 로그인 페이지가 표시되어야 합니다.

    인증서 갱신



    Certbot은 만료되기 전에 요청된 인증서를 자동으로 갱신하기 위해 Cronjob/Timer를 생성합니다.

    $ systemctl list-timers
    Fri 2021-01-22 07:10:00 CET 5h 57min left Thu 2021-01-21 22:20:02 CET 2h 52min ago snap.certbot.renew.timer     snap.certbot.renew.service
    


    현재 Harbour의 Nginx 컨테이너가 시스템에서 이미 포트 80을 사용하고 있기 때문에 이 갱신은 실패합니다. 이 포트는 Certbot이 기존 인증서를 갱신하는 데 필요합니다.

    다행히 Certbot은 인증서를 갱신하기 전/후에 서비스 실행을 중지/시작하기 위해 생성할 수 있는 사전/사후 후크를 제공합니다.

    이러한 후크는/etc/letsencrypt/renewal-hooks/{pre|post}에서 생성할 수 있습니다. 갱신 작업을 실행하기 전에 Harbor의 Nginx 컨테이너를 중지하는 스크립트를 만들어 보겠습니다.

    $ vim /etc/letsencrypt/renewal-hooks/pre/harbor.sh
    
    Insert the following content:
    
    #!/bin/bash
    /usr/bin/docker stop nginx
    
    Make the script executable:
    
    $ chmod 755 /etc/letsencrypt/renewal-hooks/pre/harbor.sh
    


    이제 새로 갱신된 인증서를 Harbour의 데이터 디렉토리에 복사하고 Nginx 컨테이너를 다시 시작하기 위한 post-hook 스크립트도 생성해야 합니다. 후크 후 스크립트를 만들고 다음 콘텐츠를 추가합니다.

    $ vim /etc/letsencrypt/renewal-hooks/post/harbor.sh
    
    Insert the following content:
    
    #!/bin/bash
    cp -f /etc/letsencrypt/live/registry.example.com/fullchain.pem /data/secret/cert/server.crt
    cp -f /etc/letsencrypt/live/registry.example.com/privkey.pem /data/secret/cert/server.key
    /usr/bin/docker start nginx
    
    Make the script executable:
    
    $ chmod 755 /etc/letsencrypt/renewal-hooks/post/harbor.sh
    


    설정에 따라 경로를 변경하는 것을 염두에 두십시오. Harbor에 대해 구성된 데이터 디렉토리는 Harbor.yml 파일에서 찾을 수 있습니다.

    스크립트가 올바르게 구성되었는지 확인하기 위해 테스트 실행 모드에서 Certbot의 갱신 명령을 사용하여 인증서 갱신을 테스트할 수 있습니다. 다음 출력이 표시되어야 합니다.

    $ certbot renew --dry-run
    ...
    Running pre-hook command: /etc/letsencrypt/renewal-hooks/pre/harbor.sh
    Output from pre-hook command harbor.sh:
    nginx
    ...
    Running post-hook command: /etc/letsencrypt/renewal-hooks/post/harbor.sh
    Output from post-hook command harbor.sh:
    nginx
    


    이제 설정이 완료되었습니다. Harbour 인스턴스가 실행 중이어야 하며 Let's Encrypt 인증서가 자동으로 갱신되어야 합니다.

    좋은 웹페이지 즐겨찾기