GitLab with Let's Encrypt integration

GitLab이 10.5부터 Let's Encrypt를 자체적으로 지원하기 시작했네.
참고로 2018년 4월 현재 이미 GitLab 버전은 10.6.x임.. 올라간지 좀 됐나본데 ㅋ
아마도 ACMEv2는 안 될지도 모르겠고..
사실상 GitLab 단독으로 쓰는 경우도 크게 많지 않을걸로 보여서..

간단하게 방법만 정리.

ref: https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-gitlab-on-ubuntu-16-04

  1. 방화벽 정리
    일단 방화벽에 http, https를 풀어주자. 외부에서 접속되어야 한다.

  2. gitlab 설정
    /etc/gitlab/gitlab.rb을 열어서 다음과 같이 수정한다.

external_url 'http**s**://yourdomain'
letsencrypt['enable'] = true
letsencrypt['contact_emails'] = ['[email protected]']

즉, external_url에 https로 바꾸고 도메인을 기록하고, 아래 두 줄을 추가한다.

  1. gitlab 재시작
    sudo gitlab-ctl reconfigure
    reconfigure 실행 도중 Let's Encrypt 인증서 발급을 수행한다.
    인증서 발급에 실패하면 중단된다.

4. 인증서 갱신
ref: https://docs.gitlab.com/omnibus/settings/ssl.html
crontab -e
0 0 * * * /opt/gitlab/bin/gitlab-ctl renew-le-certs > /dev/null를 추가하는 형식을 추천하고 있다.

  1. 인증서 갱신
    출처가 된 문서들이 갱신되었다.
    gitlab이 11.0 버전 이후부터는 자동 갱신을 지원하기도 하며, DigitalOcean 역시 다른 방법을 추천하고 있다.
  • gitlab
    ref: https://docs.gitlab.com/omnibus/settings/ssl.html
    gitlab 측에서는 특별히 설정하지 않고, gitlab으로 인증서를 발급받았다면 기본적으로 자동 갱신이 이뤄진다고 한다.
    물론 설정을 직접 지정할 수도 있다.
letsencrypt['auto_renew'] = false
letsencrypt['auto_renew_hour'] = "12"
letsencrypt['auto_renew_minute'] = "30"
letsencrypt['auto_renew_day_of_month'] = "*/7"

등과 같이. 자동 갱신을 끄거나, 매달 7일 12시 30분에 하도록 하거나.
또한 수동 갱신도 간단하게 할 수 있다.

gitlab-ctl reconfigure
gitlab-ctl renew-le-certs

위 두 명령 중 하나를 수행하면 된다. (root 권한 요구)

  • DigitalOcean
    DigitalOcean에서는 crontab에 daily 스크립트를 추가 등록하는 방법을 추천하고 있다.

다음과 같은 내용의 /etc/cron.daily/gitlab-le 파일을 생성한다.

#!/bin/bash
set -e
/usr/bin/gitlab-ctl renew-le-certs > /dev/null

그리고 실행 권한을 추가한다.
sudo chmod +x /etc/cron.daily/gitlab-le