티스토리 뷰

공연 동행 구인 웹서비스를 구현하며 

앞서, 깃헙 액션을 통해 CI/CD 및 서버를 구성해두었는데

 

구글 소셜 로그인 개발 중, 도메인이 필요한 상황이 발생했습니다😲

구글 소셜 로그인을 redirect url 등록 시, 배포 서버에서 사용하려면 .shop 같은 도메인을 두어야 함
→ https는 선택: 앱 게시 상태를 테스트 단계로 둘거면 없어도 되고, 프로덕션 단계로 둘거면 필요

 

이후 배포를 목적으로 하는 서비스이기에, 

도메인 연결 후, https 설정까지 해보기로 하였습니다!

(사실 평소에 ec2 ip 주소 보면서, 이름 지어주고 싶기도 했음..)

 


도메인 구매하기 🛍️

가비아에서 도메인 가격 확인 후, shop이 500원으로 저렴하길래 구매했습니다!(1년에 500원 입니다~~)

https://domain.gabia.com/regist/today_domain

 

가비아: 대한민국 도메인 점유율 1위

대한민국 100만 도메인 등록 업체

domain.gabia.com

 

 

 

도메인을 샀으니, EC2와 도메인 연결해주기🤝

AWS에서 제공하는 DNS, Route53 이용하기

+ DNS는 도메인과 도메인에 해당하는 IP 정보를 가지고 있다가 도메인 주소에 대한 요청이 들어왔을 때 이에 해당하는 ip를 알려주는 서버

 

1. dongoorami.shop 도메인에 대해 호스팅 영역을 생성

 

2. 레코드 생성을 통해 연결하고자 하는 ec2의 퍼플릭 ip 주소를 연결해주면 됩니다.

➡️www.도메인 사용하고 싶으면 레코드 이름에 www 입력

도메인, www.도메인 둘다 사용가능하도록 두개 추가해줬습니다.

 

네임서버 설정하기

생성한 호스팅 영역에 들어가면 아래와 같이 네임서버를 확인할 수 있습니다.

+ 네임서버란 해당 도메인에 매핑되는 ip주소로 변환해주는 서버

(아래 네임서버를 사용하는 도메인은 해당 네임 서버에서 IP주소를 반환해줍니다.)

 

 

요 4개 값들을 가비아에 등록하면 됩니다.(맨 뒤에 .은 빼기!)

가비아 사이트 -> 도메인 관리 -> 네임서버 설정

 


EC2 인스턴스의 NGINX에 HTTPS 적용하기🔐

SSL 인증서를 사용해 웹사이트를 HTTPS로 열 수 있게끔 Nginx 서버에 SSL 인증서를 적용하였습니다.

NGINX는 고성능, 확장성, 고가용성 웹서버, 역방향 프록시 서버 및 웹 가속기(HTTP 로드밸런서, 콘텐츠 캐시 등의 기능 결합)입니다.

 

HTTPS를 설정하는 것은 SSL/TLS 인증서를 설치하고 nginx에서 HTTPS 프로토콜을 사용할 수 있도록 설정하는 과정입니다. 여기서 HTTPS는 보안을 강화한 HTTP의 변형으로, 데이터를 안전하게 전달하는 역할을 합니다.

 

nginx 설치

sudo apt update
sudo apt install nginx

 

SSL 인증서 발급하기

SSL 무료 인증서로  Let's Encrypt를 사용하였으며, 인증서 발급은 Cerbot을 이용했습니다.

 

sudo snap install --classic certbot

 

nginx 설정파일에 도메인 추가하기

sudo vi /etc/nginx/sites-available/default

 

아래와 같이 구매한 도메인 이름을 적어줍니다.

 

 

방화벽을 통한 HTTPS 허용

sudo ufw status 명령어로 방화벽을 확인하면

기본은 비활성화인데 활성화를 통해 https를 허용해야 합니다.

ufw는 우분투 방화벽

 

⚠️주의!!

방화벽 활성화 후, SSH 포트(22번)를 설정하지 않고 터미널을 종료하게 되면

AWS 보안 그룹에서 SSH 포트를 허용 하더라도

EC2 자체 방화벽인 UFW에서 패킷을 DROP 하기 때문에 접속을 할 수가 없다고 합니다!!

 

(이렇게 했다가 ec2 접속이 아예 안돼서 식겁했습니다..🥲

그래도 인스턴스 중지 후, 사용자 데이터 편집으로 해결 가능합니다~)

 

SSL 인증서 받기

sudo cerbot --nginx -d dongoorami.shop -d www.dongoorami.shop

 

Let's Encrypt의 인증서는 90일 동안만 유효한데 

설치를 하는 과정에서, /etc/cron.d에 자동으로 갱신 시켜주는 커맨드가 추가되어 있어서

하루에 두 번 실행되고 만료 30일 이내에 인증서를 자동으로 갱신하는 시스템 타이머를 추가하여 이를 처리한다고 합니다👍

 

발급은 /etc/letsencrypt/live 안에서 확인가능

live 접근이 안될경우 chmod로 권한 설정하기!

 


CI/CD 및 스프링부트 설정⚙️

키 변환

발급된 키를 스프링부트에서 사용하기 위해서는

.pem을 PKCS12 형식으로 변경 과정이 필요하여 아래 명령어를 통해 변환하였습니다.

sudo openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out keystore.p12 -name ttp -CAfile chain.pem -caname root

 

nginx 재시작하기

sudo service nginx restart

 

기존에 적용해둔 CI/CD로 스프링부트에 SSL 인증서 가져오기

우선 파일 질라로 ec2 접속하여 생성된 keystore.p12를 가져옵니다.

keystore.p12를 base64 인코딩하여 github action secret 변수로 넣어두고

 

인코딩 방법

openssl base64 -in 인코딩할파일명 -out 인코딩된파일명

 

CI.yml 파일에서 secret.KEYSTORE를 가져와 ./src/main/resources/keystore.p12로 복사하도록 하였습니다.

- name: create keystore.p12
        shell: bash
        run: |
          if [ ! -d "./src/main/resources" ]; then
            mkdir -p ./src/main/resources
          fi
          touch ./src/main/resources/keystore.p12
          echo "${{ secrets.KEYSTORE }}" | base64 --decode >> ./src/main/resources/keystore.p12

 

그리고 application.yml 파일에도 아래 내용을 추가해줍니다!

server:
  ssl:
    key-store: classpath:keystore.p12
    key-store-type: "PKCS12"
    key-store-password: 인증서 만들면서 설정한 비밀번호

 


이제 설정한 도메인으로 접속 가능!🙆