Docker image를 생성하고 실행한다.
컨테이너의 443, 80, 22 포트는 각각 Mac의 8443, 8080, 8022로 매핑해준다. 동일한 포트로 사용하기 원하면 443:443과 같이 써주면 된다.
sudo docker run --detach \ --hostname gitlab.example.com \ --publish 8443:443 --publish 8080:80 --publish 8022:22 \ --name gitlab \ --restart always \ --volume /Users/[username]/apps/gitlab/config:/etc/gitlab \ --volume /Users/[username]/apps/gitlab/logs:/var/log/gitlab \ --volume /Users/[username]/apps/gitlab/data:/var/opt/gitlab \ gitlab/gitlab-ce:latest
Letsencrypt 인증서 생성을 위해 certbot을 설치한다.
brew install certbot
certbot을 사용하여 인증서를 만들려고 시도하였다.
sudo certbot certonly --manual -d mydomain.org
하지만 augeas 와 관련된 오류를 만났다. 퍼미션 관련 설정을 해 주었다.
sudo chown [username] /usr/local/lib/pkgconfig
다시 certbot을 실행하여 인증서 생성을 시도하였다.
sudo certbot certonly --manual -d mydomain.org
접속할 수 있는 IP인지 물어본다. y로 대답한다.
Are you OK with your IP being logged? ---------------- (Y)es/(N)o:
생성할 파일의 내용과 경로를 알려준다. 준비가 되면 엔터를 치라고 한다.
Create a file containing just this data: 293487987fd9s87s98fa798s7df7sadf987saf79dsa97afsd897dsaf987 And make it available on your web server at this URL: http://mydomain.org/.well-known/acme-challenge/fas89adfs87dasf9asdf78 ----------------------------- Press Enter to Continue
해당 경로에 파일을 만들어주어야 하기 때문에 gitlab.rb를 편집한다.
vi /Users/[username]/apps/gitlab/config/gitlab.rb
다음 줄을 추가해 준다.
nginx['custom_gitlab_server_config'] = "location ^~ /.well-known { alias /etc/gitlab/www; }"
해당 내용을 적용해 준다.
docker exec -it gitlab /bin/bash gitlab-ctl reconfigure
그리고 아래의 경로에 해당 파일을 위에서 알려준 내용으로 만들어 주었다.
vi /Users/[username]/apps/gitlab/config/www/acme-challenge/[instructed filename] 파일내용: 293487987fd9s87s98fa798s7df7sadf987saf79dsa97afsd897dsaf987
다시 certbot을 실행한 shell로 돌아가서 Enter를 누른다.
이제 /etc/letsencrypt/live/[mydomain.org]에 인증서 파일들이 생겼다. ssl 디렉토리를 생성하고 인증서를 복사한다.
cd /Users/[username]/apps/gitlab/config mkdir ssl cd ssl sudo cp /etc/letsencrypt/live/[mydomain.org]/fullchain.pem ./ sudo cp /etc/letsencrypt/live/[mydomain.org]/privkey.pem ./
다시 gitrab.rb를 편집하러 간다.
vi /Users/[username]/apps/gitlab/config/gitlab.rb
다음 3개의 줄을 편집해 준다.
external_url 'https://[mydomain.org]' nginx['ssl_certificate'] = "/etc/gitlab/ssl/fullchain.pem" nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/privkey.pem"
첫째 줄은 외부 접속 경로를 설정해 주는 것이다. 필자는 외부에서도 접속할 수 있게 하려고 하였기 때문에 개인적으로 사용하는 도메인 이름을 적어 주었다.
둘째, 셋째 줄은 인증서 파일에 대한 경로를 설정해 주는 것이다.
이제 준비가 되었다. 적용해 준다.
docker exec -it gitlab /bin/bash gitlab-ctl reconfigure
웹 브라우저를 띄우고 접속해 본다.
필자는 공유기 – MacOS – docker container(Ubuntu 16.04) 의 구조였고, 포트는 8443:8443:443이었으므로
https://[mydomain.org]:8443
으로 접속하였다. 자물쇠가 나오는 것을 확인하면 SSL이 제대로 설정된 것이다.
두서 없이 썼지만, 기억은 잘 잊혀지므로 기록하였다.
다음엔 letsencrypt 인증서 만료 기간이 3개월이니, 자동으로 갱신되도록 만들어 보아야겠다.