[Deploy] Github Action과 Docker Swarm으로 배포하기

배현호·2021년 5월 3일
4

deploy

목록 보기
1/1


이번 포스트에서는 Github Action과 Docker swarm을 통한 서버 배포를 정리할 것이다.
Github Action에 대해서 궁금한 점은 이 글을 참고하면 될 것이다.

사용 버전

  • OS: Window 10
  • WSL: Xshell6
  • AMI: Ubuntu Server 18.04 LTS (HVM), SSD Volume Type

Docker 설정

EC2 접속하기

Docker Swarm을 통하여 배포를 하기 위해서는 먼저 EC2에 접속해야 한다.
(EC2 접속하는 방법이 궁금하다면 이 글을 참고해보기 바란다.
위 방법 말고도 EC2에 접속하는 방법은 존재하니 꼭 위의 방법으로 할 필요는 없다.)

Docker 다운받기

Docker swarm을 사용하기 위해서는 EC2 인스턴스에 Docker를 먼저 다운 받아야 한다.
도커 독스 사이트에 접속하면 Ubuntu용 Docker 다운 받는 코드가 존재한다.
사진이 나와있는 부분을 복사하여 붙여넣고 Docker를 다운받을 수 있다.

Docker Swarm 적용하기

EC2에 Docker를 다운받았다면 swarm을 적용시켜야 한다.
다음 명령어를 통해 docker swarm을 적용시킬 수 있다.

docker swarm init

Swarmpit 다운받기

Docker swarm을 관리하기 쉽게 GUI형태로 확인할 수 있는 도구이다.
swarmpit.io에 접속하여 swarmpit을 적용시킬 수 있다.

swarmpit을 설치를 하면 다음과 같은 화면이 뜨면서 설치가 시작된다.

설치를 하던 중에는 다음과 같은 화면이 뜨는것을 확인할 수 있다.

이 부분에서 설정하는 것이 바로 swarmpit정보와 관련된 설정을 해주는 곳이다.
2번째 줄에 있는 포트는 swarmpit 접속 포트에 해당한다.
swarmpit의 기본 포트는 888이며, 다른 포트로 설정시 그 포트로 접속이 가능하다.
물론 설정한 포트에 맞게 EC2 인바인드 규칙에도 추가를 해줘야 한다.

4번째 줄과 5번째 줄이 swarmpit으로 접속할 때 필요한 usernamepassword를 지정하는 곳이다.
swarmpit에 접속하기 위해서는 필수적이기에 지정한 username과 password는 잊지 않도록 하다.

Swarmpit 설정

Swarmpit 접속하기

모든 설정이 끝나면 swarmpit에 접속할 수 있게 된다.
swarmpit의 url은 EC2에서 지정한 퍼블릭IP 또는 탄력적 IP주소를 통해 접속할 수 있다.

EC2 IP주소:swarmpit 포트를 통해 접속을 하면 다음과 같은 화면이 뜨는 것을 확인할 수 있다.

여기서 swarmpit을 설정할 때 설정한 username과 password를 통해 접속을 하게 된다.
username 혹은 password 둘 중 하나라도 틀리면 접속을 할 수 없으니 주의하자.

Swarmpit Service 생성하기

접속을 하면 다음과 같은 대시보드가 뜨게 된다.

위 화면에서 Service에 들어가면 다음과 같은 화면이 뜨게 된다.

이 화면은 swarmpit을 설정하고 초기 service 화면이다.
이 화면이 현재 EC2에서 돌아가고 있는 Docker Container들이다.
여기서 New Service를 통해 새로운 서비스를 생성할 수 있다.

위 화면은 현재 도커 허브에 존재하는 repository를 검색하는 것이다.
사용자명/repository로 검색할 수 있으며, 사용자명만 입력하면 위 화면처럼 그 사람의 repository가 검색된다.

만일 도커 허브에 repository가 존재하는데 검색이 안될 경우, Specift repository manually를 체크하여 도커 허브에 있는 repository를 입력하면 된다.

위 공백란에 repository 이름을 적고 다음으로 넘기면 된다.

위 화면에서는 생성할 Service의 이름과 Mode를 지정할 수 있다.
Tag의 경우, 아무것도 지정 안할 시 기본 latest로 지정된다.
Mode는 Replicated와 Global을 지정할 수 있다.

Replicated는 CD를 할 때 무중단 배포를 위해 사용될 인스턴스를 몇개 만들지 선택하는 것이다.
1개로 만들면 Global과 동일하지만, 2개 이상일 경우 무중단 배포가 가능하다.(사실상 2개 정도면 충분하다.)

Environment에서는 코드가 돌아가기 위해서 필요한 설정들을 하는 곳이다.
Variables에서 코드를 돌리기 위한 환경 변수를 Name에는 변수 이름, Value에는 값을 넣어 설정하면 된다.
(이 이외에는 딱히 설정해본 것이 없어서 넘어간다.)

DeployMent는 CD가 실행된 후, swarmpit에 자동적으로 적용시킬지 말지를 선택하는 것이다.
Autoredeploy를 체크하면 CD가 이루어지면 자동으로 swarmpit service에 변경된 코드가 적용된다.
따라서 체크하고 Deploy를 눌러 서비스를 생성하면 된다.

Github 설정

Dockerfile 생성하기

Dockerfile은 Docker를 이용해서 배포를 하려면 필요한 파일이다.

내가 배포하고자 하는 repository에 Dockerfile을 새로 만들어준다.

FROM openjdk:8-jre-slim
COPY ./build/libs/*.jar birthfit.jar
ENTRYPOINT ["java", "-Xmx200m", "-jar", "-Duser.timezone=Asia/Seoul", "/birthfit.jar"]
EXPOSE 3000

현재 SpringBoot java 8버전 기준으로 위와 같이 세팅을 진행하였다.
Dockerfile의 경우 배포하고자 하는 파일에 맞춰 만들면 된다.

Secrets 추가하기

추가적으로 CD하는 과정에서 내가 업로드 할 도커 허브의 접근할 계정이 필요하다.
Settings -> Secrets에서 환경 변수를 설정할 수 있는데, 여기서 도커 허브의 username과 password를 New repository secret으로 생성해준다.
여기서 username과 password는 도커 허브에 로그인 할 자신의 계정 정보를 입력하면 된다.

이 이외에도 코드를 돌리기 위한 환경변수를 여기서 설정하기도 한다.
여기서 secret으로 환경 변수를 설정하면 CI-CD 파일에서 다음과 같이 env로 지정을 해주면 적용이 된다.

CI-CD 확인하기

모든 설정이 완료된 후에 Github Action을 실행하면 다음과 같이 돌아가는 것을 확인할 수 있다.

만일 CI-CD가 실패하면 다음과 같이 X가 뜨면서 CI-CD가 중단되는 것을 확인할 수 있다.

기본 설정에서 CI-CD가 어떤 이유로 실패했는지 근본적인(?) 문제만 제시하고 자세하게 어떤 문제인지를 제공해주지 않는다.
이러한 문제를 해결하기 위해서 다음과 같이 run 부분 뒤에 --info를 붙이면 어떤 에러가 발생했는지 상세하게 확인할 수 있다.

모든 에러를 해결하고 CI-CD가 성공하면 다음과 같이 둘 다 체크표시가 뜨는 것을 확인할 수 있다.

CD가 성공을 한 후, Swarmpit Service에 들어가면 다음과 같이 인스턴스가 running인 것을 확인할 수 있다.

running 인스턴스를 들어가서 View Log를 확인하면 실제 서버가 실행될 때의 콘솔 화면을 확인할 수 있다.

여기서 실행하는 과정에서 문제가 발생할 수 있다.
문제가 발생하면 running 인스턴스가 잠시 멈추로, 다시 새로 running 상태가 된다.
그런 경우 코드를 수정하여 다시 push를 하거나, swarmpit의 환경 변수를 변경하여 코드가 정상적으로 돌아가는 것을 확인해야 한다.
성공적으로 인스턴스가 실행하면 비로소 Docker Swarm을 이용한 배포가 끝이난다.

profile
Spring Boot 공부하고 있는 고등학생입니다.

0개의 댓글