해당 시리즈는 현재 필자가 연습하고자 하는 서비스 아키텍쳐와 맞지 않아 Springboot 와 Gradle 을 사용한 시리즈를 다시 작성하고 있습니다. 최신 시리즈를 확인하여주시고 이 시리즈는 끝마치지 못한 부분이 있어 설치 부분만 참고를 하시길 바랍니다.
(최신 시리즈)
오늘은 Docker, Tomcat, Ansible, SonarQube 서버를 구축해보겠습니다.
Docker 인스턴스에 docker 설치
$ apt-get update
기본적인 패키지 최신 패키지로 업데이트
$ sudo apt install apt-transport-http ca-certificates curl software-properties-common
Apt가 https를 통해 rpeository를 이용하는 것을 허용할 수 있도록 하는 패키지들 설치
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
Docker 공식 GPG Key 추가
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
Docker repository 등록
$ sudo apt update
$ sudo apt install docker-ce
Docker 설치
$ sudo docker version
Docker가 정상적으로 설치가 되었는지 확인
$ sudo systemctl status docker
Docker가 정상적으로 실행되고 있는지 확인할 수 있음
$ sudo usermod -aG docker [유저초기이름]
docker명령어 입력시 sudo를 입력하지 않고 쓸 수 있게 해줌. 설정 후 적용이 되려면 쉘을 종료후 다시 로그인하여 접속을 하여야 적용이 됨.
필자는 AWS EC2의 ubuntu를 사용하고 있으므로 ubuntu 입력.
Linux의 경우 초기유저네임이 ec2-user 로 잡히는 것 같음.
자세한 사항은 아래 링크 참고.
$ docker run hello-world
Docker 임시 기동 시켜보기
Tomcat Server 구축
$ apt-get update
기본적인 패키지 최신 패키지로 업데이트
Apache Tomcat 9 중 최신 버전인 9.0.65를 설치하고자 한다. 다른 버전을 설치하고 싶다면 아래 링크를 통해 주소를 복사후 wget 명령어를 통해 다운받도록 하자.
$ sudo wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.67/bin/apache-tomcat-9.0.67.tar.gz
해당 경로를 통해 압추파일을 받아옴.
$ sudo tar -xvzf apache-tomcat-9.0.67.tar.gz
해당 압축파일을 해제 해줌.
$ ls -al
압축해제된 파일을 확인할 수 있음.
$ rm -rf apache-tomcat-9.0.67.tar.gz
$ ls -al
압축을 해제하였으니 기존 압축파일 삭제 및 잘 삭제되었는지 확인.
$ cd apache-tomcat-9.0.67/
$ sudo chmod +x ./bin/startup.sh && sudo chmod +x ./bin/shutdown.sh
압축해제한 폴더 경로로 접근 후 shell script 실행권한 추가.
$ sudo ./bin/startup.sh
tomcat은 tomcat 설치 경로(CATALINA_HOME) 아래 bin/startup.sh로 시작할 수 있다.
톰캣을 실행시켜줌.
[AWS EC2 Public Ip]:8080
톰캣은 기본적으로 8080포트를 사용하여 접속할 수 있다.
Tomcat이 정상적으로 실행되었다면 다음과 같은 창을 볼 수 있을 것입니다.
위 창에서 Manager App 부분에 모든 IP가 접근할 수 있도록 하기위해 몇 가지 설정을 진행하도록 하겠습니다.
$ sudo vim ./webapps/manager/META-INF/context.xml
자신이 편한 에디터로 설정파일에 들어가 value 부분을 주석처리 해주도록 하겠습니다.
$ sudo vim ./webapps/host-manager/META-INF/context.xml
위와 동일하게 value 부분을 주석처리 후 :w 저장하고 :q 를 입력하여 나오도록 하겠습니다.
다음은 Manager App에 접근하기 위한 Tomcat 관리자 계정을 생성해보도록 하겠습니다.
$ sudo vim ./conf/tomcat-users.xml
<role rolename="admin-gui"/>
<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat" roles="admin-gui,manager-gui">
위의 내용을 추가해준 후 저장하고 나와주도록 합니다.
$ sudo ./bin/shutdown.sh
$ sudo ./bin/startup.sh
Tomcat 중지 후 재실행 시켜줌.
톰캣 8080포트 접속 후 Manager App 클릭
아까 설정을 추가해준 아이디와 tomcat 비밀번호 tomcat으로 로그인을 해줌.
정상적으로 로그인이 되었다면 다음과 같은 창을 볼 수 있을 겁니다.
Ansible 서버 구축
$ apt-get update
패키지 업데이트
$ sudo apt install ansible
Ansible 설치
$ sudo vim /etc/ansible/hosts
host파일에 접근하여 아래와 같이 추가
Ip 주소는 각 인스턴스의 private Ip 주소를 적었습니다.
추가하고 저장 후 빠져나옵니다.
$ ssh-keygen -t rsa
Ansible Server에서 Docker 서버와 Tomcat서버에 SSH 접속을 가능하게 하기위해 Ansible 서버에 SSH Key를 rsa 암호화 방식으로 생성.
$ cd .ssh
$ cat id_rsa.pub
위 명령어를 입력하여 나온 공개 키 값을 복사해줍니다.
Docker 서버의 ssh에 접속을 하여 이 공개키를 추가해줄겁니다.
$ cd .ssh
$ vim ~/.ssh/authorized_keys
편집기를 사용하여 Ansible 서버에서 복사해둔 공개키 값을 넣어줍시다.
Docker 서버에 복사한 키를 이미 존재하는 키 아래에 추가 후 저장.
Vim 에서 맨 아랫줄로 이동을 하려면 o 키를 눌러주면 됩니다.
이제 Tomcat 서버에도 동일하게 적용을 해줍시다.
마지막으로 Ansible서버에도 이 공개키를 추가해주도록 하겠습니다.
추가를 완료하였습니다.
이제 docker서버와 tomcat서버에 ansible 서버에서 만든 공개키가 제대로 작동하면
Ansible서버에서 ssh [사용자이름]@[프라이빗ip] 로 접속이 가능합니다.
예시로 Ansible서버에서 docker서버로 ssh 접속을 시도해보겠습니다.
이와 같이 접속이 잘 되는 것을 확인할 수 있습니다.
이제 Ansible서버에서 Docker서버와 Tomcat서버로 ping test를 진행해보도록 하겠습니다.
$ ansible -m ping all
필자의 경우 로컬 ping test는 정상적인 응답이 왔으나 Docker 서버와 Tomcat서버에서는 응답에 실패하는 상황이 발생하였습니다.
우선 추측을 해보았을 때 Ansible 서버에서 Docker서버와 Tomcat 서버에 정상적으로 ssh 접속이 가능한 것으로 보아 등록해준 공개키가 정상적으로 작동을 하고 있는 것으로 판단하였습니다.
"module_stdout": "/bin/sh: 1: /usr/bin/python: not found\r\n"
무언가 python interpreter와 연관이 되어 있는 것 같아 구글링을 해보았습니다.
Stack overflow의 답변을 보면 remote서버(필자의 경우 docker, tomcat)에 python을 설치해주면 해결되는 것 같네요. (제가 참고한 링크는 아래 링크를 확인해주세요.)
필자도 한 번 시도를 해보겠습니다.
(Docker 서버)
$ apt install python
(Tomcat 서버)
$ apt install python
자 이제 remote 서버에 모두 설치가 되었고 다시 Ansible 서버로 가서 Ping test를 진행해보도록 하겠습니다.
$ ansible -m ping all
오… local과 remote 서버 모두 정상적으로 응답이 오는 것을 확인하였습니다.
원인 파악을 해보았을 때 이 추측이 틀렸을 수 있지만 ubuntu 에는 기본적으로 python3 이 설치가 되어있는데 Ansible 서버는 ansible을 설치하면서 python이 default 버전인 2.7로 설치가 되는 것 같습니다. 이 때문에 Ansible 서버와 python을 따로 설치하지 않아 2.7버전으로 맞추어져 있지 않은 remote 서버 간의 호환 문제 일 수 도 있을 것 같다는 생각을 해봅니다.(그냥 필자의 추측입니다…ㅎㅎ 아닐확률 98.9999%....?!)
SonarQube 서버 구축
SornarQube는 프리티어인 AWS EC2 t2.micro 로 설치하게 되면 자원부족으로 기동이 되지 않는다고 합니다. 최소 t2.small 로 사용(유료). 필자는 그냥 설치만 진행해보도록 하겠습니다.
$ sudo apt update
우선 만들어둔 SonarQube 인스턴스의 ssh 접속을 해주고 패키지 업데이트를 해주겠습니다.
$ sudo mkdir /opt/sonarqube
우선 opt directory 안에 sonarqube라는 디렉토리를 생성해줍니다.
$ sudo wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.6.zip
생성한 디렉토리 안에 sonarqube zip 파일을 다운받도록 하겠습니다.
zip파일이 잘 들어온 것을 확인해줍니다.
이제 이 zip 파일을 압축해제 시켜주어야 하는데 unzip 명령어가 실행되지 않는다면
다음과 같이 설치를 진행해주세요 =)
$ cd
$ sudo apt install unzip
먼저 해당 디렉토리 경로를 빠져나와 unzip 패키지를 다운받아줍니다.
$ cd /opt/sonarqube
$ sudo unzip sonarqube-7.6.zip
다시 sonarqube 디렉토리로 이동후 압축파일을 해제 해주면 이번에는 정상적으로 압축파일이 해제되는 것을 확인할 수 있습니다. =)
$ sudo rm -f sonarqube-7.6.zip
정상적으로 압축파일이 해제되었으니 압축파일은 삭제해주도록 하겠습니다.
이제 권한 설정을 진행해보도록 하겠습니다.
SonarQube는 Elastic Search와 같은 Service와 연계되어 사용되는데, root 권한이 아닐 경우 해당 Service를 이용할 수 없다고 Error가 뜰 수 있다고 합니다.
$ sudo chown -R ubuntu:ubuntu /opt/sonarqube
Ubuntu 부분은 사용자 이름을 넣어주면 됩니다.
Sonarqube directory 소유권을 ubuntu로 이전시켜줍니다.
$ cd sonarqube-7.6/
$ cd conf
SonarQube 설정파일 경로로 들어와줍니다. SonarQube의 설정파일을 확인해봅시다.
$ vim /opt/sonarqube/sonarqube-7.6/conf/sonar.properties
Line number 를 확인하기 위해 :set nu 를 입력해줍니다. 그리고 113번째 줄을 확인해보면 Sonarqube의 웹브라우저 port 번호를 확인할 수 있습니다.
AWS EC2 인스턴스 인바운드 규칙에 9000번 포트를 열어주면 해당 포트번호로 접근할 수 있습니다. =)
이렇게 AWS EC2에 접속하여 인바운드 규칙에 추가를 해줍니다.
$ cd /opt/sonarqube/sonarqube-7.6/bin/linux-x86-64
$ sudo ./sonar.sh start
실행파일이 있는 경로로 들어와준 후 실행을 시켜주겠습니다. =)
Sonarqube의 자세한 설정및 사용은 아래 블로그 링크를 참고해주세요.
'DailyStudy > CI CD' 카테고리의 다른 글
Jenkins & Slack 연동하기(Slack Notification) 및 파이프라인 작성 (0) | 2022.10.27 |
---|---|
Gitea Webhook Jenkins(Gitea 와 jenkins 연동하기) (1) | 2022.10.11 |
AWS EC2 인스턴스에 Maven 설치하기 (0) | 2022.10.04 |
Jenkins를 이용한 CI/CD Pipeline 구축해보기(2) (1) | 2022.10.04 |
Jenkins를 이용한 CI/CD Pipeline 구축해보기(1) (0) | 2022.10.02 |