인스턴스를 생성했고,
인바운드 규칙에서 SSH ( Port 번호 : 22 ) 접근 URL을 내 IP 로 설정해 둡니다.
다운받아둔 키페어를 이용해 Putty 에 접속하면
이제 AWS 에서 빌린 서버를 이용할 수 있습니다.
최종 목적은
Spring Boot, Maven, MySQL 을 사용한 프로젝트를 Jenkins, GitHub 을 사용해 배포하는 것이므로
AWS 에서 빌린 깡통 서버에 필요한 개발 TOOL 들을 설치해 줍니다.
[ 필요 목록 ]
1. JDK
2. Maven
3. Tomcat
4. MySQL
5. Jenkins
1. JDK ( Java Development Kit )
- 자바 어플리케이션을 읽는 역할을 해주는 JRE는
개발자 도구를 포함, 개발을 진행 할 수 있게 해주는 JDK 안에 포함되어 있으므로 JDK 만 설치해 주었습니다.
- Ubuntu 환경이므로, apt -get 명령어를 이용해 설치해 줍니다. ( 11 버전 )
sudo apt-get install openjdk-11-jdk
- 설치가 완료되면
java -version
which javac
명령어 등을 이용해 잘 설치되었는지 확인해줍니다.
- JAVA 환경변수를 설정해 줍니다.
sudo vi /etc/profile
profile 파일에 들어가서,
맨 아래 부분에 JAVA_HOME 경로, PATH, CLASSPATH 설정을 해줍니다.
: JAVA_HOME 경로 : which java 명령어 실행 시, 나오는 경로에서 /bin 전까지의 경로
저장하고 나온 뒤 ( :wq )
source /etc/profile
변경 된 경로를 적용해 줍니다.
- 위치확인 => echo $JAVA_HOME
: /usr/lib/jvm/java-11-openjdk-amd64
2. Maven
- Maven 은 Jenkins 를 이용할 경우, Jenkins 에서 Auto Install 자동설치 기능을 제공하므로 선택사항입니다.
< tar 압축파일로 maven 다운로드 >
wget https://downloads.apache.org/maven/maven-3/3.8.6/binaries/apache-maven-3.8.6-bin.tar.gz
< 압축 풀기 >
tar -xvf apache-maven-3.8.6-bin.tar.gz
< link 생성 ( 선택사항 ) >
ln -s apache-maven-3.8.6 maven
직접 설치 했을 경우, 환경변수를 설정해 줍니다. ( sudo vi /etc/profile )
export MAVEN_HOME=/경로/apche-maven-3.8.6
export PATH=$PATH:$HOME/bin:$MAVEN_HOME/bin
3. Tomcat
- 마찬가지 순서로, Tomcat 을 설치해 줍니다.
wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.70/bin/apache-tomcat-9.0.70.tar.gz
tar -xf apache-tomcat-9.0.70.tar.gz
ln -s apache-tomcat-9.0.70 tomcat
=> Tomcat 의 경우 8080 포트를 사용하므로, 인스턴스에 인바운드 규칙을 추가해줘야 합니다.
AWS - EC2 - 인스턴스 => 인바운드 규칙 추가
[ 사용자 지정 TCP / Port: 8080 / anywhere (0.0.0.0/0) ]
: 8080 포트를 나의 어플리케이션 포트번호로 사용할 예정이므로, 모든 사용자가 접근 할 수 있도록 anywhere 로 인바운드 규칙을 추가해줍니다.
[ Tomcat - Jenkins 관리자 설정 ]
: tomcat의 users.xml 에 들어가서 관리자를 추가해줍니다.
sudo vi /경로/tomcat/conf/tomcat-users.xml
4. MySQL
- 먼저, 인스턴스에 MySQL DB용 인바운드 규칙을 추가해줍니다.
[ MySQL,Oracle / Port : 3306 / anywhere ]
- 설치
sudo apt-get install mysql-server
[ 접근 포트 허용 ]
cd /etc/mysql/mysql.conf.d
sudo vi mysqld.cnf
- mysqld.cnf 파일에 들어가서
bind-address = 127.0.0.1 (디폴트 값)
=> 0.0.0.0 으로 수정
Mysql 서비스 재시작
sudo systemctl restart mysql.service
5. Jenkins 설치
저장소 key 다운
wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
sources.list 에 추가
echo deb http://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list
키 등록
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FCEF32E745F2C3D5
업데이트
sudo apt-get update
Jenkins 설치
sudo apt-get install jenkins
서버 포트 번호 변경
sudo vi /etc/default/jenkins
HTTP_PORT=8080 => 바꿀포트번호
sudo vi /lib/systemd/system/jenkins.service
Environment="JENKINS_PORT= 8080" => 바꿀포트번호
=> 포트번호를 기존 8080에서 변경했다면,
인스턴스 - 인바운드규칙에 변경한 port 번호도 추가해 줍니다.
[ TCP / Port : 변경한 포트번호 / 내 IP ]
Jenkins 서비스 재시작 => 적용
sudo service jenkins restart
서비스 상태 확인 ( 포트 번호 확인 )
sudo systemctl status jenkins
Jenkins 초기 비밀번호 가져오기 => 복사해둡니다. ( Jenkins 최초 접속 시 사용 )
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
- 여기까지 완료되면, JDK, Maven, Tomcat, MySQL, Jenkins 등 기본적인 tool들이 설치됬습니다.
Tomcat 서버를 시작해 Jenkins 사이트로 들어가 복사해둔 초기 번호를 입력해 Jenkins 를 시작합니다.
/경로/tomcat/bin/startup.sh
http://퍼블릭IP:8080 => tomcat 사이트
http://퍼블릭IP:젠킨스포트번호 => jenkins 사이트
- 프리티어를 사용하면서, MySQL 에서 DB 데이터를 옮기는 등, 정말 조금의 작업을 하였는데도
위의 파일들을 설치하고 나니 메모리 부족으로 AWS의 꽁짜 서버가 버벅대기 시작했습니다.
- 프리티어를 사용할 경우, 스왑 메모리를 생성해서 사용하는 건 거의 필수사항인 듯 합니다.
[ swap 메모리 생성 ]
1. 스왑 파일 생성
$ sudo dd if=/dev/zero of=/swapfile bs=128M count=16
지정한 블록 크기(bs)는 인스턴스에서 사용 가능한 메모리보다 작게 설정 (memory exhausted 오류)
프리티어의 메모리는 1GB
=> 권장사항대로 두배값인 2GB를 증설시키기 위해
스왑 파일은 2GB(128MB x 16 = 2,048MB)로 위와 같이 생성해줍니다.
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
$ sudo swapon /swapfile
$ sudo swapon -s
/etc/fstab 파일에 들어가 부팅 시 스왑 파일을 자동 활성화
$ sudo vi /etc/fstab
파일 끝에 다음 줄을 추가
/swapfile swap swap defaults 0 0
free 명령어로 스왑 메모리가 잘 작동하는지 확인합니다.
스왑 메모리를 사용해주면 기존 1GB 메모리를 사용해 버벅대던 AWS 꽁짜 서버에
2GB 스왑 메모리가 추가되서 훨씬 빠르게 동작하는 서버를 확인할 수 있었습니다.
AWS 에 가입하면 1년간 제공되는 프리티어를 사용해서 배포하는 과정을 대략적으로 정리해 보았습니다.
메모리나 스토리지가 너무 제한적이기 때문에 가벼운 어플리케이션 정도, 적은 수의 사용자만 이용할 경우에 활용할 수 있을 듯 합니다.
프리티어지만 제공하는 사용량을 초과하면 초과 분에 대해서 요금이 청구되기 때문에,
구글 OTP 사용, 사용량 limit 알람 설정, 청구서 및 사용량 확인을 주기적으로 해주며 주의를 기울이고 사용해야 합니다.
프리티어를 사용해보면서, 사용자 수에 따른 부하, 사용량등에 대한 감각을 키우고,
적절한 유형의 인스턴스를 선정하여 $달러를 아낄 수 있는 역량을 점점 키워가야 겠습니다.
'Back to the AWS' 카테고리의 다른 글
AWS Tomcat 서비스 등록 => 자동시작 (0) | 2022.12.25 |
---|---|
AWS Apache2 VirtualHost 등록 => 80포트로 HTTP 와 WebSocket 사용하기 (0) | 2022.12.24 |
AWS EC2 프리티어로 배포하기(1) ( SpringBoot, Maven, MySQL, Jenkins, Ubuntu, Putty ) (0) | 2022.12.09 |