EC2 - 가비아 도메인 연결 이후 해야할 것들 (Java/Spring)

김용범·2024년 10월 18일

EC2 서버(Ubuntu)와 도메인 연결 이후 순서 정리

  1. 가비아 - Route53 <- EC2 인스턴스의 탄력적 IP 연결까지 완료!

  2. EC2 서버에 Java 설치

    # 순서
    sudo apt-get update 
    sudo apt-get install openjdk-17-jdk
    java -version 
    
    # 경로 확인 
    update-alternatives --list java
    
    vi ~/.bashrc 
    # 하단에 다음 두 줄 적기 
    export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
    export PATH=$PATH:$JAVA_HOME/bin
    # 갱신 
    source ~/.bashrc 
    # 확인 
    echo $JAVA_HOME
  3. EC2 서버에 Mysql 설치 및 외부 연동

    sudo apt-get update 
    sudo apt-get install mysql-server 
    sudo ufw allow mysql 
    
    sudo systemctl start mysql
    sudo systemctl enable mysql 
    
    sudo /usr/bin/mysql -u root 
    # 사용자 정보 확인 
    select user, host, authentication_string from mysql.user;
    
    # DB 만들기
    create database [DB 명];
    show databases; 
    
    # 사용자 만들기 -> select 절 확인 
    create user '[username]'@'localhost' identified by '[mysql PW]';
    flush privileges;
    select user, host, authentication_stirng from mysql.user;
    
    # 해당 DB를 사용할 계정에 권한 부여 -> select 절 확인 
    grant all privileges on [DB 명].* to '[username]'@'%';
    flush privileges;
    show grant for '[username]'@'%';
    select user, host, authentication_string from mysql.user;
    
    sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf 
    bind-address 127.0.0.1 -> 0.0.0.0 으로 수정 
    ## exit 이후 정보 갱신
    sudo systemctl restart mysql 
  4. 깃허브 ssh-keygen 설정

    # 순서 
    cd ~/.ssh
    ssh-keygen -t ed25519 -C [깃허브 계정]
    # ed25519: 타원 곡선과 비대칭 암호화를 모두 사용하는 암호 알고리즘
    # 보안: ed25519는 256비트 고정된 크기로 생성되며, 일반적으로 더 안전하다.
    # 성능: ed25519는 RSA보다 더 빠르고 효율적이다.
    
    cat id_ed25519.pub
    # 해당 내용을 git ssh 키로 등록한다.
    # EC2서버에 git clone 성공!
  5. NGINX 설정 및 Certbot HTTPS 적용

    # Nginx 설치 
    sudo apt install nginx 
    # Nginx 작동 확인을 위한 상태 확인 
    sudo service nginx status 
    # Nginx 재시작 
    sudo service nginx restart 
    • nginx 연동 후 상태 확인 !
    • 그 이후 -> Let's Encrypt를 이용하여 HTTPS 적용 !
    # 충돌 방지를 위하여 기존의 Certbot 삭제
    sudo apt-get remove certbot
    sudo apt-get update 
    
    sudo apt-get install  letsencrypt
    sudo apt install snapd
    sudo snap install --classic certbot   ## 시간 오래걸림 주의 
    sudo ln -s /snap/bin/certbot /usr/bin/certbot 
    
    # 버전 확인 
    certbot --version
    
    # 도메인에 대한 인증서 발급 
    sudo certbot --nginx -d [도메인] -d [도메인],,
    
    # 인증서 발급 내역 조회 
    sudo certbot certificates 
    
    # nginx 관련 프록시 설정 
    sudo vi /etc/nginx/sites-available/default
    
    # sudo service nginx restart
  6. Springboot 프로젝트 SSL 적용

    # root 권한으로 실행
    sudo su 
    
    # .pem 파일들이 있는 위치로 이동 
    cd /etc/letsencrypt/live/[도메인 명]   # .pem 파일 4개 존재 
    
    # 해당 명령어를 실행하여 keystore.p12 파일 생성 
    openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out \
    keystore.p12 -name tomcat -CAfile chain.pem -caname root
    
    # 외부 권한을 허용하게끔 변경 
    chmod 777 keystore.p12 
    
    # 생성된 keystore.p12 파일을 /[git clone]/src/main/resources 로 이동
    mv keystore.p12 /home/ubuntu
    
    # 루트 권한 종료 
    exit -> cd -> /home/ubuntu 로 이동
    
    # 해당 프로젝트의 resources 로 이동
    mv /home/ubuntu/keystore.p12 ./ 
    
    # yml 파일에 다음 내용 작성
    #SSL 
    server.ssl.key-store=classpath:keystore.p12
    server.ssl.key-store-type=PKCS12
    server.ssl.key-store-password=password
    
  7. 포트 포워딩 관련 명령어

    # 포트 포워딩 상태 확인 명령어
    sudo iptables -t nat -L -v -n 
    
    # 포워딩 규칙 추가 443 -> 8080
    sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8080
    
    # 포워딩 규칙 추가 80 -> 8080 
    sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
    
    # nginx restart 
    sudo service nginx restart
  8. etc

    • 카카오 로그인 관련 오류
      • 허용 IP 주소 확인하기
      • Web 도메인, Login/Logout redirect url
    • Spring 애플리케이션 관련 오류
      • @Test, @SpringBootTest 어노테이션 주석 처리
      • yml 파일, keystore.p12 파일 위치 확인

Reference

EC2 프리티어 메모리 부족현상 해결 -> Swap 공간

java 17 설치

mysql 설치 및 DB, user 생성

EC2 - git ssh-key - git clone

Nginx 설치 및 Let's Encrypt 인증서 발급

Springboot 프로젝트 SSL 적용

포트 포워딩

DB 마이그레이션 (DBeaver & Mysql)

profile
꾸준함을 기록하며 성장하는 개발자입니다!

0개의 댓글