시대의 흐름은 웹 서비스에서 HTTPS가 기본 적용으로 바뀌고 있다. HTTPS 서비스를 제공하기 위해서는 SSL 인증서가 필요한데, 이거 대부분 유료이다. Let’s Encrypt는 무료로 이용할 수 있는 SSL 인증서를 제공하고 있는데, 2가지 제약점이 있다.
첫 번째로, 와일드 카드가 적용이 되지 않는다. 하나의 도메인에 하나씩 발급이 되며, 외부로 공개된 도메인이어야 한다.
두 번째로, CertBot을 이용한 설치 과정에 있어 snap 을 이용한다. 그런데 snap이 Docker 내부에서는 동작하지 않는다.
다음 순서대로 일을 진행하도록 하자.
첫 번째. Docker 설치하기. Docker 홈페이지의 Debian 설치 부분을 참고하면 다음의 명령어들을 입력하면 된다.
sudo apt-get -y remove docker docker-engine docker.io containerd runc
sudo apt-get -y update
sudo apt-get -y install ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get -y update
sudo apt-get -y install docker-ce docker-ce-cli containerd.io
두 번째. NGINX 설치하기. 특별히 컴파일 부터 시작해야 하는 경우가 아니면 apt나 apt-get을 이용하여 설치하면 된다.
sudo apt install nginx
다음으로 nginx.conf 파일을 수정한다. 대부분의 클라우드 환경은 SSH, HTTP, HTTPS 용 포트 3가지만을 기본적으로 외부에 개방하도록 되어 있다. 따로 추가 설정을 해주기 보다 되도록 기본에 묻어 가도록 해본다. NGINX 에서 리버스 프록시로 Docker 의 서비스에 연결을 할 수 있도록 한다.
이를 위하여 설정 파일을 수정한다. 위와 같이 설치하면 /etc/nginx 폴더에 관련 설정 파일이 저장된다. nginx.conf 파일에 보면 다음과 같은 부분이 있고, 이것은 하위 conf.d 폴더와 sites-enabled 폴더의 환경 설정 파일을 이용한다는 뜻이다.
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
설치한 직후에는 두 폴더 중 sites-enabled 폴더에 default 파일이 하나만 있다. 그리고 이 파일은 sites-available 폴더의 default 파일의 심볼릭 링크이다. 그래서 sites-available 폴더의 default 파일의 내용을 다 삭제하고 다음과 같이 수정한다. Shiny는 기본적을로 3838 포트를 이용한다. 마지막에 슬래쉬 넣는 것 잊어먹지 말자.
server {
location / {
proxy_pass http://localhost:3838/;
}
}
세 번째. 사전에 업로드한 도커 이미지 파일을 불러와서 실행시킨다.
sudo docker load < cloud.tar
sudo docker run -itd -p 3838:3838 --name demo cloud-demo
이렇게 해서 웹으로 접근을 하면 내부 도커로 HTTP를 이용하여 접근할 수 있는 것을 알 수 있다.
마지막 네 번째. 이제 Let’s Encrypt 홈페이지로 가서 snapd 를 설치하고 CertBot을 실행시켜서 인증서를 발급받는다. 그리고 다시 웹으로 접속하면 HTTPS로 접속할 수 있게 된다. 오늘 기준으로 다음의 명령어를 통하여 실행할 수 있다.
sudo apt-get -y install snapd
sudo snap install core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot --nginx