간단한 AWS 웹 서버 구축 with mongodb (feat. Github and Docker)

오랫만에 블로그에 게시글을 업데이트 해봅니다.


최근에 AWS 로 서버 구축하는 것을 테스트 해본 것이 있어서,

이번 게시글에서는 AWS 를 사용하여 간단하게 웹 서버 구축하는 것을 진행하려고 합니다.



AWS EC2 서버 프리티어 버전으로 1대 발급 받은 후 해당 서버에 java, maven, git, docker, docker-compose 를 설치한 후 github에서 SpringBoot 로 만들어둔 테스트 프로젝트를 받아 빌드하고 실행을 하도록 하겠습니다.

또 마찬가지로 github 에서 docker-compose 파일을 받아 실행하여, mongodb 실행하는 것 까지 해보겠습니다.


AWS 계정을 신규로 만들게 되면 프리티어 서비스의 경우 12개월 무료로 사용 가능합니다.

기존의 이미 계정을 만드셔서 12개월이 지난 경우 새로운 이메일로 계정을 만들면 다시 12개월 사용이 가능합니다. (아마도?)


우선 AWS 가입을 해야하는데 가입하기 위해서는 해외결제가 가능한 카드 번호를 필수로 입력해야합니다.
AWS 의 경우 실제 비용 발생이 될 수 있기 때문에, 매우 조심하셔야 합니다. 테스트 종료 후 서버를 반드시 중지/종료 해두시길 권장합니다.
AWS 가입하는 방법에 대해서는 다른 게시글을 참조 부탁드립니다.


AWS 계정을 만들었다고 생각하고 진행하도록 하겠습니다.

# AWS Linux EC2 Server 생성

인스턴스 생성
AWS 서비스 중 "EC2" 를 선택하고, "인스턴스" 메뉴를 선택합니다.계정을 만들었다고 생각하고 진행하도록 하겠습니다.
우측 상단 쪽에 보시면 "인스턴스 시작" 이라는 버튼이 있고 해당 버튼을 누르면 인스턴스 생성을 할 수 있습니다.
[서비스] > "EC2" 선택 >  [인스턴스] > [인스턴스시작]

가장 상단에 있는 "Amazon Linux" 를 선택하여 서버를 만듭니다.

여러개의 서버 스펙을 선택할 수 있는 있는 Grid 가 보일텐데 여기에서 공짜로 사용할 수 있는 것은 "프리 티어 사용 가능" 이 붙어 있는 서버만 가능합니다. 
CPU1 코어에, 1기가 메모리만 할당 받을 수 있습니다. (너무 사양이 부족하지만... 테스트니까)

우측 하단에 보면 "다음: 인스턴스 세부 정보 구성" 버튼을 눌러 다음 단계로 이동합니다.


프리티어를 사용하기 위해서는 설정을 할 수 있는 것이 없기는 한데, 스토리지 용량 정도는 약간 증설 가능하긴 합니다.
하지만 그냥 진행하도록 하겠습니다.

"보안 그룹 구성"에서 방화벽 설정을 할 수 있게 됩니다. 
해당 탭에서 밖으로 몇가지 포트를 설정하도록 하겠습니다. (실제로 운영을 할 경우 이렇게 아무렇게나 포트 오픈하면 안돼요)


키 페어를 생성을 하고 다운받으신 후 "인스턴스 시작"을 누르면  서버가 구동됩니다.
해당 키 페어는 서버에 접속할 때 필요하니, 저장 위치를 기억하셔야 합니다.


인스턴스 상태가 "실행 중" 상태가 되게 되면 퍼블릭 IP를 조회할 수 있습니다.


서버 접속
퍼블릭 IP를 통해 SSH 를 접속하도록 하겠습니다. 접속 시 아까 저장한 인증서 파일의 경로를 같이 적어둬야 합니다.
ssh 연결 명령어 : ssh -i {인증서경로} ec2-user@{아이피}
                           (ex: 
ssh -i ~/Downloads/aws-test.pem ec2-user@13.209.19.10)


SSH 에서 "yes" 라고 적으면 서버에 접속이 됩니다.


# 테스트 웹 서버 및 MongoDB 구축

git 설치
터미널에서 아래 명령어를 수행하여 git 을 설치합니다.

sudo yum install git


git clone 수행
테스트용으로 만들어둔 backend / mongodb github 프로젝트를 clone 합니다.
대충 폴더를 만들어주고, 해당 폴더에서 아래 git clone 명령어를 수행합니다.

git clone https://github.com/vackjangmi/sooyeol-test-mongodb
git clone https://github.com/vackjangmi/sooyeol-test-server


java 11 설치
테스트로 만든 backend 프로젝트의 경우 SpringBoot / java 11 로 되어 있기 때문에 java 11 버전이 설치가 필요합니다.
기본적으로 aws-linux 에는 java 1.7 이 설치되어 있습니다.
아래 명령어를 수행하여 java 11을 설치하고 version 을 확인합니다. (java 11버전으로 나오면 정상 설치된 것입니다.)

sudo rpm --import https://yum.corretto.aws/corretto.key
sudo curl -L -o /etc/yum.repos.d/corretto.repo https://yum.corretto.aws/corretto.repo
sudo yum install -y java-11-amazon-corretto-devel
java -version


maven 설치
SpringBoot 프로젝트를 빌드하기 위해서는 maven 이 필요하기 때문에 아래 명령어를 수행하여 maven도 설치를 합니다.

sudo wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
sudo sed -i s/\$releasever/6/g /etc/yum.repos.d/epel-apache-maven.repo


sudo yum install -y apache-maven
mvn --version


spring boot maven build
maven 이 설치가 다 됐으면 backend 프로젝트 (sooyeol-test-server) 로 이동하여 아래 명령을 수행하여 빌드 합니다.

mvn clean package


docker 설치
github 에 올려둔 테스트용 mongodb 의 경우 docker 로 구성이 되어 있기 때문에 docker 설치가 필요합니다.
아래 명령어를 수행하여 docker 를 설치를 하고 docker service 를 실행합니다.

sudo yum install docker
sudo service docker start


보너스)
docker 의 경우 특별한 작업을 해주지 않을 경우 sudo 명령을 통해 실행해야하는데, 매번 그렇게 하기 불편함이 있습니다.
그렇기 때문에 아래 명령어를 수행하여 sudo 없이 docker 명령어를 수행하게 설정합니다.
해당 명령어를 수행 후 터미널을 종료 후 다시 접속해야 (세션 재 생성) 정상 동작합니다.

sudo usermod -aG docker $USER

docker-compose 설치 & root 계정 활성화
github에 올려둔 테스트용 mongodb 스크립트의 경우 docker-compose 로 작성되어 있습니다.
해당 스크립트에 대한 설명은 별도로 하지 않도록 하겠습니다.

docker-compose 를 설치하기 위해서는 root 권한이 필요합니다.
아래 명령어를 수행하여 root 권한 획득 후 root 계정으로 전환합니다.

sudo passwd root
su root

root 계정으로 전환 완료 후 아래 명령어를 수행하여 docker-compose 를 설치하고, exit를 수행하여 다시 원래 ec2-user 계정으로 전환합니다.

sudo curl -L https://github.com/docker/compose/releases/download/1.25.0-rc2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose


mongodb docker 실행
정상적으로 docker 와 docker-compose 가 설치가 됐으면 mongodb 프로젝트로 이동하여 아래 명령어를 수행하여 docker 컨테이너를 실행하고, 정상적으로 실행됐는지 확인합니다.

docker-compose up --build -d
docker ps


docker 가 정상적으로 실행이 된것이 확인 됐으면, 웹 브라우저를 열어 http://{ip주소}:9018 로 접속합니다.
backend 쪽 api 를 테스트하기 위해서는 "sooyeol" 이라는 database를 만들고, "person" 이라는 collection을 만들어야 합니다.


spring boot 실행
backend 프로젝트의 maven 빌드 된 폴더 (target 폴더)로 이동하여 아래 명령어를 수행하여 SpringBoot 를 실행합니다.

nohup java -jar xxx.jar &


서버 테스트
http://{ip주소}:8000/api/person 으로 접속해보면 테스트 페이지가 열립니다.
해당 페이지가 열리면 정상적으로 서버가 올라온 것입니다.

swagger-ui 를 적용해둔 소스이기 때문에 아래 url 로 접속하시면 api 문서도 같이 확인 가능합니다.
http://{ip주소}:8000/swagger-ui.html



http://{ip주소}:8000/api/person 에 대해서 POST (생성) / PUT (수정) / DELETE(삭제) api 를 테스트해볼 수 있습니다.
POST / PUT / DELETE 등을 수행한 후 http://{ip주소}:9018 사이트에서 데이터가 잘 반영 됐는지 확인 가능합니다.


간단한 AWS 웹 서버 구축 with mongodb (feat. Github and Docker)

오랫만에 블로그에 게시글을 업데이트 해봅니다. 최근에 AWS 로 서버 구축하는 것을 테스트 해본 것이 있어서, 이번 게시글에서는 AWS 를 사용하여 간단하게 웹 서버 구축하는 것을 진행하려고 합니다. AWS EC2 서버 프리티어 버전으로 1대 발급 받...