aws EC2, 가비아를 이용하여 Spring Project 직접 배포해보기 + SSL

Kim Dong Hyun·2023년 4월 1일
9

Server

목록 보기
1/5

*실행 환경 M1 Mac

aws EC2

aws에서 인스턴스 항목에서 인스턴스 시작을 누르자.

다른 항목은 다 건너 뛰고, 인스턴스 유형을 프리 티어 사용 가능한 t2.micro로 설정


'새 키 페어 생성'을 눌러서 새로운 키 페어를 생성해주었다.

원하는 이름을 설정하고 다운로드 받아지는 키이름.pem 을 절대로 유출하지 말고, 삭제도 하지 말고 잘 갖고있자.
PuTTY접속용이라면 ppk로 만들자.

나머지는 그대로 기본 설정을 따라간다.
원래는 SSH를 내 아이피만 허용해서 제대로 된 보안을 구축하는 것이 좋다.

프리티어는 30GB까지 사용 가능하다. 하지만 잘못 설정하면 요금폭탄 맞으니 8GB만 하겠다..

정상적으로 인스턴스가 생성된 것을 볼 수 있다.

왼 쪽에 탄력적 IP탭을 들어간다.
탄력적 IP 주소 할당을 눌러준다. 그리고 그냥 할당을 눌러주면 된다.

성공적으로 탄력적 IP를 할당 받았다. 이제 이 IP를 방금 생성했던 인스턴스에 연결해야 한다.
할당된 IP주소를 클릭해서 세부 설정에 들어간다.


오른쪽 상단에 있는 탄력적 IP 주소 연결을 눌러준다.


인스턴스에서 방금 만들었던 인스턴스를 선택하고 연결을 눌러준다.

성공적으로 퍼블릭 IP가 연결된 것을 확인할 수 있다.

SSH 접속


터미널을 켜서 .ssh 폴더로 이동한다.

$ vim config

명령어를 통해 config파일을 만들어 준다.

Host test
	HostName IP주소
    User ec2-user
    	IdentityFile 키 경로

를 작성해서 ssh접속을 자동화해준다.

$ ssh 서버이름

을 통해 ssh접속을 해준다.

Are you sure you want to continue connecting (yes/no/[fingerprint])? 가 나오면
yes를 입력하면 된다.

그럼 이렇게 나오는데, 키의 권한이 없어서 그렇다.

터미널에서 키가 있는 경로로 가준다.


$ chmod 600 키의 경로

해당하는 키에 600권한을 주면 된다.

다시 ssh 접속을 시도해보았다.


성공적으로 서버에 접속을 완료했다.

Spring 프로젝트

간이로 스프링 프로젝트를 만들어보자.
https://start.spring.io/


테스트용으로 간이 프로젝트를 작성했다.


미리 80포트로 설정해 주었다.


페이지 정상 작동 확인


해당 프로젝트를 깃허브에 배포했다.

이제 서버에다 배포해보자.

서버 프로젝트 배포

Java 다운로드

먼저, 서버에 Java를 설치하자.
https://jdk.java.net/
여기서 해당하는 Java 버전을 다운받자.

 $ sudo yum install java

*sudo java install

$ cd /usr/lib
$ wget jdk링크


압축 풀기

$ tar -zxvf 경로

잘 설치되었나 확인

$ /usr/lib/jdk-19.0.2/bin/java -version

java 19가 잘 설치되었다.

이제 환경변수를 등록해주자.

$ vi /etc/profile

profile 수정을 들어가서, Shift + G 를 눌러 맨 아랫 줄을 들어가서, 다음을 작성한다.

export JAVA_HOME=/usr/lib/jdk-자바 버전

저장하고 나와서 다음을 실행해준다.

$ source /etc/profile

환경변수 등록이 완료됐다.

$ echo $JAVA_HOME

을 입력해 환경변수 등록이 잘 되었는지 확인해준다.

다음은 Alias (별칭)등록을 해준다.

$ vi /etc/bashrc

마찬가지로 가장 아랫 줄에 두 줄을 추가해준다.

alias java="/usr/lib/jdk-19.0.2/bin/java"
alias javac="/usr/lib/jdk-19.0.2/bin/javac"

$ source /etc/bashrc

수정한 파일을 저장해준다.


java 명령어가 잘 작동한다.

gradle 다운로드

다음은 gradle을 설치해보자.
gradle 다운로드
https://services.gradle.org/distributions-snapshots/
여기서 원하는 gradle 버전을 wget을 통해서 다운로드 한다.

wget https://services.gradle.org/distributions/gradle-5.0-bin.zip -P /tmp

압축 풀기

$ sudo unzip -d /opt/gradle /tmp/gradle-5.0-bin.zip

추출 확인

$ ls /opt/gradle/gradle-5.0

환경변수 설정

$ sudo nano /etc/profile.d/gradle.sh

다음 붙여넣기

# /etc/profile.d/gradle.sh

export GRADLE_HOME=/opt/gradle/gradle-5.0
export PATH=${GRADLE_HOME}/bin:${PATH}

스크립트 실행 권한 설정

$ sudo chmod +x /etc/profile.d/gradle.sh

환경변수 로드

$ source /etc/profile.d/gradle.sh

설치 확인

$ gradle -v


Gradle 설치 완료!

git 설치

이제 git을 설치해서 내 프로젝트를 가져와보자.

$ sudo yum install git

간단하게 yum으로 다운로드 하자.

git 설치 완료.
이제 내 프로젝트를 git clone을 통해서 가져오자.

아파치 설치

$ sudo yum install httpd

위 명령어를 통해 아파치를 설치할 수 있다.

$ sudo systemctl start httpd

-> 아파치 실행 명령어

프로젝트 실행

먼저 clone을 통해 프로젝트를 가져왔다.

프로젝트 폴더에서 gradle 빌드를 시켜줬다.

  • -x test 옵션 : test를 제외하고 빌드

서버 배포

빌드 후에
이제 /build/libs 폴더에 있는 스냅샷을 실행시켜준다.

$ sudo nohup java -jar -Dspring.profiles.active=prod build/libs/demo-0.0.1-SNAPSHOT.jar &

nohup -> 백그라운드 실행 중 로그 추출
& -> 백그라운드 실행


퍼블릭 IP를 통해 접속은 확인됐다.

도메인 연결

가비아 https://www.gabia.com/ 에서 도메인을 구입했다.

도메인 관리 페이지로 들어가서, DNS 설정을 해준다.

해당 도메인의 레코드 수정을 눌러준다.


다음과 같이 레코드를 설정해준다.

  • @ : 앞에 www를 붙이지 않아도 접속할 수 있게 해준다. (dongpage.shop으로 접속할 때)
  • www : 앞에 www를 붙일 때 접속하게 해준다.

이렇게 설정해주면, 도메인 설정이 완료된다.

아직 https설정이 되진 않았지만, 도메인을 통해 접속할 수 있다.

SSL 설정

이제 내 페이지에 SSL인증서를 설치하여, 안전하게 보호할 차례이다.
SSL인증서를 설치하면, 서버 간의 통신에 암호화가 되기 때문에 중간의 통신 데이터를 가로채더라도, 어떤 값을 주고받았는지 알 수 없다. 그렇다고 서버가 안전한 것은 아님을 주의하자.


https://manage.sslforfree.com/

SSL For Free라는 사이트에서 SSL인증서를 받을 것이다.

New Certificate를 눌러준다.


내 도메인을 입력하고, Next Step을 눌러준다.


무료 SSL인 90일제한 인증서를 눌러준다.


Auto Generate를 선택하고 넘어간다.


Free Plan이 선택되어 있는 것을 확인하고 넘어간다.


이제 이 도메인이 내 도메인인지를 확인할 시간이다.
나는 HTTP File을 업로드하는 방식을 선택할 것이다.
먼저 1번에 Download Auth File을 눌러 txt파일을 다운로드 해준다.

이 txt파일을 내 도메인/.well-known/pki-validation/ 파일에 넣어주어야 한다.
그러니까,
http://dongpage.shop/.well-known/pki-validation/FEF7090FE1E9AE9E0DFF9FFEB3D7E825.txt
를 들어갔을 때 해당 txt파일이 뜨면 되는 것이다.

나는 이 txt파일을 웹 서버 Apache를 통해 업로드를 할 것이다.
Auth File을 다운로드 했으면 Next Step을 눌러주고 Apache 업로드를 해보자.

아파치는 간단하게

$ sudo yum install httpd

를 통해 다운받을 수 있다.

다운로드가 완료되면,

/var/www/html/.well-known/pki-valdation

경로에 txt파일을 넣어준다. (없는 폴더는 새로 만들어야 한다)

파일을 넣었으면,

$ sudo service httpd start

명령어로 아파치를 실행해준다.
*반드시 80포트가 사용중이지 않아야 한다.

도메인에서 It Works!가 뜬다면 아파치 웹 서버가 정상적으로 실행된 것이다.
이제 해당 url에 들어가보면,

txt 파일이 잘 뜨는것을 볼 수 있다.

이제 Verify Domain을 눌러서 인증해주자.

$ service httpd stop

인증이 완료되었으면 위 명령어로 아파치 서버를 닫아준다.

이제 Server Type을 스프링 프로젝트를 배포할 것이므로, 내장 웹서버인 Tomcat을 선택하고 Download Certificate를 받아준다.


압축을 풀면 세 가지 파일을 받을 수 있다.
Next Step을 눌러서 다음으로 넘어간다.

이제 서버에 SSL 설정을 적용시키기 전에,
위에서 받은 세 파일을 이용하여 keystore을 만들어 주어야 한다.

먼저 openssl을 다운받자.

$ sudo yum install opnessl
/etc/pki/tls/certs/test/certificate.crt
/etc/pki/tls/certs/test/ca_bundle.crt
/etc/pki/tls/private/private.key

해당 경로에 세 파일을 넣어준다.

$ openssl pkcs12 -export \
-name demo.test.me \
-in /etc/pki/tls/certs/test/certificate.crt \
-CAfile /etc/pki/tls/certs/test/ca_bundle.crt \
-inkey /etc/pki/tls/private/private.key \
-out /etc/pki/tls/certs/test/test.p12

위 명령어로 keystore을 만들어준다.
*권한이 막히면 앞에 sudo를 붙여주면 된다.


원하는 비밀번호를 설정한다. (2번) <- 비밀번호를 기억하고 있어야 한다!!

이제 서버 프로젝트 설정파일(application)에서 설정해주자.

server:
	port: 443
    ssl:
        enabled: true
        enabled-protocols:
        - TLSv1.1
        - TLSv1.2
        key-store: "/etc/pki/tls/certs/test/test.p12"
        key-store-password: "password"
        key-store-type: "PKCS12"

이제 443(https)로 열고, 아래처럼 설정해준다.
각 상황에 맞게 경로와 비밀번호를 바꿔주면 된다.

이제 서버를 다시 빌드하고, 실행하면


443포트로 성공적으로 열리고

인증서 설정이 완료됐다.

1개의 댓글

comment-user-thumbnail
2023년 4월 6일

감사합니다

답글 달기