개인적으로 프로젝트 관리를 위해 GitLab을 on-premise 형태로 구축해 사용해왔다.
이번 프로젝트에서도 해당 GitLab을 그대로 사용할 예정이지만, Docker 기반으로 다시한번 구축해보려 한다.
본 포스팅은 AWS EC2를 활용해 인프라를 구축하는 내용으로 진행되며 AWS EC2의 기본 사용법은 별도로 언급하지 않고 진행하겠다.
또한 본 포스팅에서 사용하는 AWS EC2 인스턴스, Elastic IP 등의 서비스는 과금이 될 수 있으니 프리티어 계정을 사용하거나 과금을 고려해 인스턴스 유형을 조정해 사용하도록 하자.
AWS EC2 인스턴스 생성하기
1. AWS Console에서 EC2 인스턴스 생성
AWS Console에 접속해 EC2 대쉬보드로 접속하자.
"인스턴스 시작" 메뉴로 접근해 신규 인스턴스 생성을 진행해보도록 하겠다.
- OS는 Ubuntu 22.04 LTS 64bit
- 인스턴스 유형은 t3.medium (2Core / 4GB)
- 키 페어는 기존에 만들어둔 키를 사용할거다. 키 페어는 나중에 인스턴스에 SSH 접속시 사용할 RSA 키 페어다.(없으면 우측에 새 키 페어 생성을 통해 생성해주면 된다.)
- 네트워크 설정은 그대로 두고 방화벽은 기존에 생성해두었던 All Permit 용 정책을 추가 (로컬에서 접속하기 위해 미리 만들어둔 정책)
- 스토리지는 30GB정도로 잡아주자
- 인스턴스가 총 4개 필요하니 한번에 만들어 주기 위해 인스턴스 개수를 4개로 설정하고 "인스턴스 시작"을 누르자.
- 인스턴스 4개를 동시 생성하면 4개 인스턴스가 동일 subnet에 할당되게 된다. 개별 1개씩 4개 인스턴스를 생성하면 모두 다른 subnet을 할당 받으니 참고하자.
생성한 인스턴스 정보를 다시 정리해보면 다음과 같다.
- OS는 Ubuntu 22.04 LTS 64bit
- 인스턴스 유형은 t3.medium (2Core / 4GB)
- 스토리지는 30GB
- 인스턴스 4개
각 인스턴스가 어떤 역할인지 알기 쉽게 인스턴스 이름들을 지어주었다.
2. 생성한 EC2 인스턴스에 접속하기
나는 맥북을 쓰니 기본 터미널을 통해 EC2 인스턴스에 접속해보겠다. (윈도우에서는 별도 SSH 클라이언트 통해서 접속하면 된다.)
먼저 AWS Console에서 생성한 EC2 인스턴스 선택 후 연결 정보를 클릭해보면 접속방법이 나온다.
SSH 클라이언트 탭 아래쪽에 기재되어 있는 ssh 명령어를 복사해 터미널에 입력해보겠다.
ssh -i "aws_key.pem" ubuntu@ec2-3-39-246-253.ap-northeast-2.compute.amazonaws.com
위 명령을 간단하게 해석해보면 아래와 같다.
ssh : ssh 명령을 통해 ssh로 접속한다.
-i "aws_key.pem" : "aws_key.pem" 이라는 키 파일로 접속을 시도한다. (인스턴스 생성시 선택한 키페어)
ubuntu@ec2-3-39-246-253.ap-northeast-2.compute.amazonaws.com : 해당 인스턴스의 퍼블릭 도메인
명령을 실행해보면 뭐 fingerprint 어쩌고 나오는데 처음 접속하는 대상이라 신뢰할수 없는데 그래도 접속하겠냐는 내용이다.
yes를 입력하면 해당 서버에 대한 정보를 known_host에 기록하게 되며 그 이후 접속할때는 경고창이 뜨지 않는다.
~ » ssh -i "aws_key.pem" ubuntu@ec2-3-39-246-253.ap-northeast-2.compute.amazonaws.com
Warning: Identity file aws_key.pem not accessible: No such file or directory.
The authenticity of host 'ec2-3-39-246-253.ap-northeast-2.compute.amazonaws.com (3.39.246.253)' can't be established.
ED25519 key fingerprint is SHA256:zv9ib+KlTo7VStWBZEnBx6jkA3yATxmvXuJ59R04BV4.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
바보다. aws_key.pem 파일을 들고 ssh를 접속하겠다 해놓고 aws_key.pem 파일 없이 접속을 시도했다.
(위 에러 내용에 보면 aws_key.pem not accessible: No such file or directory. 가 그 내용이다.)
aws_key.pem 파일이 있는 곳에서 다시 시도하거나 ssh 명령 실행시 aws_key.pem 파일의 절대경로를 정확하게 입력해주면 된다.
~ » ssh -i ~/Downloads/aws_key.pem ubuntu@ec2-3-39-246-253.ap-northeast-2.compute.amazonaws.com
The authenticity of host 'ec2-3-39-246-253.ap-northeast-2.compute.amazonaws.com (3.39.246.253)' can't be established.
ED25519 key fingerprint is SHA256:zv9ib+KlTo7VStWBZEnBx6jkA3yATxmvXuJ59R04BV4.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'ec2-3-39-246-253.ap-northeast-2.compute.amazonaws.com' (ED25519) to the list of known hosts.
Welcome to Ubuntu 22.04 LTS (GNU/Linux 5.15.0-1011-aws x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Mon Aug 1 05:00:39 UTC 2022
System load: 0.080078125 Processes: 102
Usage of /: 5.0% of 28.90GB Users logged in: 0
Memory usage: 5% IPv4 address for ens5: 172.31.60.34
Swap usage: 0%
0 updates can be applied immediately.
The list of available updates is more than a week old.
To check for new updates run: sudo apt update
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
ubuntu@ip-172-31-60-34:~$
잘 접속된다.
3. 고정 IP(Elastic IP) 할당하기
EC2 인스턴스는 내부적으로는 사설 IP 만 할당되어 있고 외부에서 접속할때 사용할 공인 IP 를 별도로 매핑해서 제공해준다.
그런데 이 공인 IP는 인스턴스가 부팅될 때 마다 변경된다. 말그대로 공인 IP 일 뿐이지 고정적으로 제공해주는 IP는 아니다.
고정으로 IP를 할당해 사용하려면 AWS Console에서 Elastic IP를 신청하고 인스턴스에 매핑해주어야 한다.
AWS Console에 접속해 EC2 대쉬보드 좌측 메뉴 하단의 "탄력적 IP" 메뉴로 접속하고 우측 상단의 탄력적 IP 주소 할당을 클릭하자.
- 네트워크 경계 그룹은 인스턴스가 속한 Region 정보라 보면 된다. 인스턴스를 생성한 Region으로 맞춰져 있긴 할텐데 확인은 해보자.
- 별다른 설정 하지 않고 할당을 눌러 IP를 받아보자.
- 할당 완료되면 아래와 같이 할당된 공인 IP가 보인다. 공인 IP 클릭후 탄력적 IP 연결을 눌러 인스턴스에 연결해보자.
- 인스턴스 리스트에서 매핑하길 원하는 인스턴스를 선택하고 연결을 누르자.
- 별다른 설정없이 바로 공인IP가 인스턴스에 연결된다.
- 인스턴스 리스트에 가보면 해당 인스턴스의 정보의 탄력적IP 및 퍼블릭 IP 주소가 변경되어 있다.
- 인스턴스의 연결정보를 다시 확인해보면 퍼블릭 도메인도 탄력적IP로 변경되어 있는 것을 확인할 수 있다.
현재 생성한 인스턴스는 총 4개 이지만 teamcity-agent는 공인IP를 사용하지 않을 예정이라 IP가 변동되지 않아야 하는 인스턴스는 gitlab, teamcity-server, was 총 3개이다. 해당 내용대로 탄력적IP를 할당/연결하고 다음 포스팅으로 넘어가겠다.
인스턴스 이름 | 탄력적 IP 사용 여부 |
gitlab | O |
teamcity-server | O |
teamcity-agent | X |
was | O |
TIP) ssh 접속 명령어 alias 적용(MAC/LINUX)
EC2 인스턴스로 SSH 접속하기 위한 명령어는 꽤 길다.
인스턴스 퍼블릭도메인으로 접근하다보니 URL이 길어져서 그렇다. 매번 치기도 귀찮고 외우기도 어려우니 alias 적용해 단축어마냥 사용해보자.
gitlab 인스턴스에 접속하기 위한 명령은 아래와 같다.
ssh -i "aws_key.pem" ubuntu@ec2-43-200-25-92.ap-northeast-2.compute.amazonaws.com
위에서 사용하는 key 위치를 절대경로로 해줘야 어느 위치에서든 접근할 수 있으니 절대경로로 바꾸어주면 더길어진다.
ssh -i ~/aws_key.pem ubuntu@ec2-43-200-25-92.ap-northeast-2.compute.amazonaws.com
alias 적용을 위해 zshrc를 편집하자. (난 MAC 유저라 zsh이지만 리눅스면 bash_profile 편집하면 될듯)
vi ~/.zshrc
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Example aliases
# alias zshconfig="mate ~/.zshrc"
# alias ohmyzsh="mate ~/.oh-my-zsh"
alias sshgl="ssh -i ~/aws_key.pem ubuntu@ec2-43-200-25-92.ap-northeast-2.compute.amazonaws.com"
alias로 sshgl이라는 이름에 gitlab EC2 접속 명령어를 매핑했다. 테스트해보니 잘된다.
~ » sshgl
Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-1015-aws x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Thu Aug 4 00:08:05 UTC 2022
System load: 0.123046875
Usage of /: 19.8% of 28.89GB
Memory usage: 82%
Swap usage: 0%
Processes: 196
Users logged in: 0
IPv4 address for br-b6876d963705: 172.19.0.1
IPv4 address for docker0: 172.17.0.1
IPv4 address for ens5: 172.31.60.34
* Ubuntu Pro delivers the most comprehensive open source security and
compliance features.
https://ubuntu.com/aws/pro
0 updates can be applied immediately.
ubuntu@ip-172-31-60-34:~$
굳.
다음 포스팅에서 실제로 GitLab 설치를 진행해보면 되겠다.
2022.08.01 - [devops] - GitLab + Teamcity + Docker + AWS CI/CD 구축하기 (1)
2022.08.01 - [devops] - GitLab + Teamcity + Docker + AWS CI/CD 구축하기 (2) - AWS EC2 구축
2022.08.01 - [devops] - GitLab + Teamcity + Docker + AWS CI/CD 구축하기 (3) - GitLab 설치
2022.08.02 - [devops] - GitLab + Teamcity + Docker + AWS CI/CD 구축하기 (4) - Teamcity 설치
2022.08.05 - [devops] - GitLab + Teamcity + Docker + AWS CI/CD 구축하기 (5) - GitLab Teamcity 연동
2022.08.05 - [devops] - GitLab + Teamcity + Docker + AWS CI/CD 구축하기 (6) - Teamcity 배포 구성
'devops' 카테고리의 다른 글
GitLab + Teamcity + Docker + AWS CI/CD 구축하기 (6) - Teamcity 배포 구성 (0) | 2022.08.05 |
---|---|
GitLab + Teamcity + Docker + AWS CI/CD 구축하기 (5) - GitLab Teamcity 연동 (0) | 2022.08.05 |
GitLab + Teamcity + Docker + AWS CI/CD 구축하기 (4) - Teamcity 설치 (0) | 2022.08.02 |
GitLab + Teamcity + Docker + AWS CI/CD 구축하기 (3) - GitLab 설치 (0) | 2022.08.01 |
GitLab + Teamcity + Docker + AWS CI/CD 구축하기 (1) (0) | 2022.08.01 |
댓글