SBB - 배포(1)

JIWOO YUN·2024년 6월 10일
0

게시판만들기

목록 보기
17/21
post-custom-banner

할 일

배포를 시작하기 전에 처리해야할 것들 사전 작업으로 해야할 것들을 적어두기.

기본적으로 yum update를 통해서 최신화 진행 완료

springboot 3.x 이상부터는 java 17을 사용하기 때문에 java 17 깔기
- 자바 깔기 완료

db는 mariaDB로 변경하고 mariaDB를 깔아주기
- (mariaDB 깔기 완료)

Docker 추가
- springboot 와 mariaDb 둘다 도커를 통해서 실행
- (mariaDb는 docker 추가 완료)

jasypt 환경변수 설정하는 법 알아두기
- 유출되면 안되는 정보들은 jasypt를 활용해서 암호화를 진행했기 때문에.
- (환경변수 설정 완료)

개인적으로 배포 테스트하면서 진행할거기 때문에 도메인은 사지않고 진행.

ngix proxy manager를 깔기
- (아직 안한 부분)

포트 포워딩하기.
- (아직 안한 부분)

기본 적으로 서버는 aws EC2 프리티어에서 진행했다.

  • 서버를 설정하는 방식의 경우 프리티어이기 때문에 t2.micro 를 선택했고 그외에는 건들이지 않았다.
  • 인바운드 규칙의 경우 서버 배포 테스트 용도로 사용하기 때문에 현재는 ipv4AnyWhere로 일단 모든 곳에서 접근이 가능하게 해놨다.
    • 나중에는 모든 ip가 아닌 특정 ip 만 접근할 수있도록 제한을 거는게 좋다.
      • Ec2로 들어오는 악의적인 접근을 막아주기 위해서

1. EC2 리눅스 서버에 yum 을 최신화

  • sudo yum update -y

2. 자바 17 버전 설치

  • sudo yum install java-17-amazon-corretto-devel
    • 가장 많이 사용된다는 jdk를 설치 진행
    • java 어플리케이션을 실행만 하려는 경우 devel 버전을 굳이 깔 필요없음.

3. 도커 설치

  • sudo yum install docker -y
  • 도커 버전 확인
    • docker -v

도커를 설치하고 난 뒤에 버전까지 확인 한 뒤에 활용을하려면 도커를 실행 시켜놔야한다.

  • sudo service docker start

docker 그룹을 생성한 후 사용자를 추가해준다. -> sudo 없이 docker 실행이 가능하게

  • sudo usermod -aG docker ec2-user
    • -a : 변경대신 정보를 추가
    • -G : 사용자계정의 그룹을 대상으로
      • 사용자 계정을 docker 계정에 포함시켜라.

docker를 실행하고 mariaDB 이미지 실행하기

# 컨테이너 실행
docker run \
  --name mariadb_1 \
  -d \
  --restart unless-stopped \
  -e MARIADB_ROOT_PASSWORD=YOURPASSWORD \
  -e TZ=Asia/Seoul \
  -p 3306:3306 \
  -v /docker_projects/mariadb_1/conf.d:/etc/mysql/conf.d \
  -v /docker_projects/mariadb_1/mysql:/var/lib/mysql \
  -v /docker_projects/mariadb_1/run/mysqld:/run/mysqld/ \
  mariadb:latest

설명

--name : 컨테이너 이름
-d : detached 모드 -> 컨테이너가 백그라운드로 실행
-- restart : 컨테이너 종료시 재시작 정책 설정
-e 컨테이너 내에서 사용할 환경변수 설정 -> mariaDB의 계정 비밀번호 넘겨주기.-> 현재는 설명용으로 비밀번호를 지워둠.

-p 호스트와 컨테이너의 포트를 연결
<호스트포트> : <컨테이너 포트> -> 호스트포트 3306으로 들어오면 해당 컨테이너 포트 3306으로 연결해줘.

-v 도커에서 마운트 볼륨 설정 -> 컨테이너와 호스트간에 데이터를 공유하거나 지속적으로 보관

restart 옵션 4가지

  • no : container를 재시작 시키지않는다 -> 이게 기본 설정(옵션을 넣지않으면 이걸로 실행됨)
  • on-failure[:max-retries] : container가 정상적으로 종료되지 않은 경우에만 재시작 시킴. 뒤에 max-retires에 재시작 최대 시도 횟수를 지정할 수 있음.
  • always : container를 항상 재시작 -> exit code 상관없이 항상 재시작됨.
  • unless-stopped: container를 stop 시키기전까지 항상 재시작.

4. git 설치

  • git에 올라가있는 프로젝트를 배포서버에 클론하기.
    • sudo yum install git -y

directory를 통해서 docker에서 실행할 프로젝트를 디렉토리로 나눠두기

  • sudo mkdir -p /docker_projects/sbb/project
    • 유저 계정이기 때문에 sudo를 통해서 디렉토리 생성

5. 해당 디렉토리 이동후 프로젝트 클론

public project 클론 방식

  • sudo git clone (git 주소) .
    • 저장소를 현재 디렉토리에 클론 진행 -> 디렉토리가 비어있어야 가능.
  • sudo git clone (git 주소)
    • 현재 디렉토리에 새로운 디렉토리를 생성하고 그 안에 저장소를 clone 진행.

private repo 클론 방식은 access token을 생성하고 해당 토큰을 넣어줘야한다.


프로젝트 클론까지 진행하고 나서 해야할 것들.

  • gitignore를 통해서 application-secret.yml을 push 가 안되게 했을 경우 해당 파일이 없어서 프로젝트를 빌드해도 오류가 발생해서 실행이 안되기 때문에 해당 파일을 추가해줘야한다.

이 문제를 해결하기 위해서 규격에 맞춰서 파일을 만들어서 올려놓았었다.

  • default 내용
spring:
  mail:
    host: smtp.naver.com
    port: 465
    username: userid
    password: password
    properties:
      mail.smtp.auth: true
      mail.smtp.ssl.enable: true
      mail.smtp.ssl.trust: smtp.naver.com
      mail.smtp.starttls.enable: true
  • username 과 password 에다가 해당하는 중요 정보를 넣어준다음 secret파일로 이름을 변경해줌으로써 git에는 중요정보가 유출되지 않으면서 규격을 새로 쓸 필요도 없어서 좋은 방법인거 같다.

파일 이름명을 바꾸기 위해 mv 명령어를 통해서 해당 이름을 변경

  • sudo mv src/main/resource/application-secret.yml.default src/main/resource/application-secret.yml

    • 이름 변경을 통해서 해당 파일을 만들어주고 vim 을 이용해서 해당 파일의 username과 password를 넣어주기.
  • 빌드를 하기위해서 ./gradlew 파일 chmod 744로 권한을 변경해서 파일소유자가 빌드를 할 수 있도록

  • gradlew 파일은 gradle 실행 환경을 제공 -> 로컬 시스템이 gradle 이 설치되어 있지 않아도 gradle을 다운로드하고 프로젝트를 지정된 버전의 Gradle 사용하여 빌드.

    • sudo chmod 744 gradlew
    • ./gradlew clean build
  • 빌드를 통해서 만들어진 빌드 파일을 실행하기 전 해야하는게 있다.

    • jasypt를 활용하면서 환경변수로 해당 복호화시 필요한 비밀번호를 넣어줘야한다.

6 .jasypt 환경변수를 넣어주는 방법

.bashrc 환경설정파일에 넣어주기

  • bash 셸의 초기화 파일 -> 사용자가 로그인할 때나 새로운 쉘을 시작할 때 실행

  • 사용자 별로 사용자 디렉토리 에 포함되는 설정파일

    • 지역적인 함수나 별칭을 작성할 때 사용되는 설정파일.

해당 파일에 밑의 환경 변수 추가

export JASYPT_ENCRYPTOR_PASSWORD=YOUR_ENCRYPTION_PASSWORD
  • YOUR_ENCRYPTION_PASSWORD 에는 내가 설정한 jasypt 비밀번호를 넣어주면된다.

해당 변수를 넣어준 뒤에 서버를 재시작 하거나 Source . bashrc 와 같이 source 명령어를 통해서 즉시 적용


7. 도커 파일로 만들기 전 해당 프로젝트가 제대로 실행되는 지 확인

  • 빌드 했던 파일을 실행해야하기 때문에 해당 디렉토리로 이동
    • cd /docker_projects/sbb/project
  • 컴파일 된 클래스 파일 jar 파일 실행
    • 현재 테스트를 하는 것이고 실제 배포가 진행되지 않기 때문에 버그나 문제가 발생하는지 확인하기 위해서 SnapShot.jar 파일을 실행
sudo java -jar -Dspring.profiles.active=dev -Djasypt.encryptor.password=$JASYPT_ENCRYPTOR_PASSWORD build/libs/sbb-0.0.1-SNAPSHOT.jar

8. 외부에서 접속확인.

  • 포트포워딩이 되어있지않기 때문에 해당 8080 port로 연결을 시도해야 연결이된다.
    • http://AwsEC2Pulicip:8080/ 링크를 통해서 이동가능
      • ip노출은 하지 않기 위해서 AwsEc2Publicip에 해당 ec2 server 가 할당받은 public ip를 넣으면 접속이 된다.
  • 접속 된 모습.

여기까지 현재 진행된 모습이고 이제 남은 부분은 다음 게시물에서 진행하면서 기록할 예정.


참고 Ref.

restart 옵션 참고 ref

https://blog.leocat.kr/notes/2019/11/20/docker-restart-container-whenever-start-docker-desktop

bashrc 참고 :

https://goldsony.tistory.com/243

  • 포트포워딩 진행된 이슈 찾을때

https://velog.io/@as9587/AWS-EC2-Amazon-Linux-2023-OS-%ED%8F%AC%ED%8A%B8-%EB%A6%AC%EB%8B%A4%EC%9D%B4%EB%A0%89%ED%8A%B8port-redirect-%ED%95%98%EB%A9%B0-%EB%B0%9C%EC%83%9D%ED%95%9C-%EC%9D%B4%EC%8A%88-%EC%A0%95%EB%A6%AC

profile
열심히하자
post-custom-banner

0개의 댓글