728x90

개요 

저번 글 이어서 aws RDS 를 생성해볼려고 한다.

 

rds 보안그룹에 ec2 보안그룹 추가(EC2와 RDS간에 접근 가능하도록)

Host에 RDS 엔드포인트 작성, User, Password 작성

rds 콘솔창에서 아래 입력

create database {database-name};

show databases;

USE {database-name};

yml 파일에 자기가 생성한 rds에 맞게 설정하기

728x90

'AWS 인프라' 카테고리의 다른 글

#1. aws ec2 접속해서 배포하기  (1) 2024.09.06
AWS - IAM 사용자 생성하기  (1) 2024.09.01
728x90

개요

이번 프로젝트를 하면서 ec2에서 배포하는 방법에 대해서 작성할려고 한다.

나는 도커 컨테이너 위에  EC2를 설치할 것이다.

 

실행 환경

  • Local Server :Windows 11
  • Ec2 Server : Amazon Linux

 

 

사전 준비

1. Docker 사용법

2. AWS 가입 후 EC2 인스턴스 생성

3. AWS 기본 이해

4. GIT 사용법

 

 

EC2 생성

여기서 해야 할 일은 aws ec2에서 인스턴스를 생성하자.

이때 keypair은 아무 폴더에 잘 보관한다.

 

1. aws ec2에서 연결 클릭

2. SSH 클라이언트 클릭

3. '예:' 아래에 있는 명령어를 git bash에 입력

4. ec2 keypair가 있는 파일에서 git bash를 연다.

5. 3번에서 확인한 명령어를 입력 이후부터는 하나하나 복붙하면 EC2 연결 성공될 것이다.

ssh -i "{your-keypair.pem}" ec2-user@{ec2-dns-IP4}
sudo yum install git
git config --global user.name "{your-name}"
git config --global user.email "{your-email}"
git config --global --list
git version
# 자바 21 버전 설치
sudo yum install -y java-21-amazon-corretto-devel
java -version
# yum 업데이트 후 docker 설치
sudo yum update -y
sudo yum install -y docker

# docker 버전 확인
docker -v

# docker 실행
sudo service docker start

# docker 그룹 생성 후 사용자 추가: sudo 없이 docker 실행 가능
sudo groupadd docker
sudo usermod -aG docker $USER

# 리눅스 재부팅 후 테스트 (exit 하고 다시 ec2 연결)
exit

# 다시 연결 후 출력 잘 되는지 확인
docker container run hello-world
# docker-compose 설치
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# docker-compose 실행 권한 부여
sudo chmod +x /usr/local/bin/docker-compose

# 버전 확인
docker-compose --version

# 이렇게 나오면 설치 완료
docker-compose version 1.29.2, build 5becea4c

# [300762] Error loading Python lib '/tmp/_MEImKEyQN/libpython3.7m.so.1.0':~ 오류날 시
sudo dnf install libxcrypt-compat

# 파일 구조
home
  |---- ec2-user
        	   |---- docker
               			|---- kafka
                        		|---- docker-composer.yml
                        	|---- redis
                        		|---- docker-composer.yml
                   |---- {project-name}
                   	     |---- app
# 도커 폴더 생성
mkdir docker
cd docker

# kafka를 도커 컨테이너에 담아서 띄우기 위해서 파일 생성
mkdir kafka
cd kafka
vi docker-compose.yml

# docker-compose.yml 이 있는 곳에서 실행
docker-compose up -d

# /docker 폴더 안에 redis 폴더 생성
cd ..
mkdir redis
cd redis
vi docker-compose.yml
docker-compose up -d

# 총 3개의 파일이 실행되고 있어야 함
docker ps
sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm

sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
sudo yum update

sudo dnf install mysql-community-server

sudo systemctl status mysqld

sudo systemctl enable --now mysqld

mysql -u root -p -h [rds엔드포인트]
mysql -u root -p -h omg-database.c9i2u4yu40qt.ap-northeast-2.rds.amazonaws.com

# 프로젝트 파일 생성
mkdir app
cd app
git clone {배포하고자하는 git clone}

# yml 파일 생성
cd ~
cd app/{project-name}
cd src/main/resources
vi application.yml

# 배포하고자 하는 파일 이동
cd ~
cd app/{project-name}

 

application.yml 파일 내용

spring:
  application:
    name: {project-name}
  datasource:
    url: jdbc:mysql://{RDS-andpoint}:3306/omg
    username: {name}
    password: {password}
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    hibernate:
      ddl-auto: update
    properties:
      hibernate:
        format_sql: true

  security:
    oauth2:
      client:
        registration:
          kakao:
            client-id: {kakao-client-id}
            client-secret: {kakao-client-secret}
            authorization-grant-type: authorization_code
            redirect-uri: http://{ec2-dns}:8080/login/oauth2/code/kakao
            client-name: Kakao
            client-authentication-method: client_secret_post
            scope:
              - account_email
              - profile_nickname

          naver:
            client-id: {naver-client-id}
            client-secret: {naver-client-secret}
            redirect-uri: http://{ec2-dns}:8080/login/oauth2/code/naver
            client-name: Naver
            authorization-grant-type: authorization_code
            scope:
              - name
              - email

          google:
            client-id: {google-client-id}
            client-secret: {google-client-secret}
            client-name: google
            authorization-grant-type: authorization_code
            redirect-uri: http://{ec2-dns}:8080/login/oauth2/code/google
            scope:
              - profile
              - email

        provider:
          kakao:
            authorization-uri: https://kauth.kakao.com/oauth/authorize
            token-uri: https://kauth.kakao.com/oauth/token
            user-info-uri: https://kapi.kakao.com/v2/user/me
            user-name-attribute: id
          naver:
            authorization_uri: https://nid.naver.com/oauth2.0/authorize
            token_uri: https://nid.naver.com/oauth2.0/token
            user-info-uri: https://openapi.naver.com/v1/nid/me
            user_name_attribute: response

  mail:
    host: smtp.gmail.com
    port: 587
    username: {mail-name}
    password: {mail-password}
    properties:
      mail:
        smtp:
          starttls:
            enable: true
          auth: true

  devtools:
    livereload:
      enabled: true
    restart:
      enabled: true

  kafka:
    consumer:
      bootstrap-servers: {ec2-dns}P:9092 
      group-id: chat-room-listener 
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer 
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer 
    producer:
      bootstrap-servers: {ec2-dns}:9092 
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer

  data:
    redis:
      host: {ec2-dns}
      port: 6379
      password: {redis-password}

  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 10MB

server:
  port: 8080

jwt:
  secretKey: {jwt-secret-key}
  refreshKey: {jwt-refreshKey}

cloud:
  aws:
    s3:
      bucket: {bucket-name}
    stack.auto: false
    region.static: ap-northeast-2
    credentials:
      accessKey: {bucket-iam-access-key}
      secretKey:  {bucket-iam-secret-key}

weather:
  api:
    key: {weather-key}

tour:
  api:
    key: {tour-key}

channel:
  api:
    key: {channel-key}
# 프로젝트가 있는 곳으로 이동
cd app/{project-name}

# 실행 권한 주기
chmod +x ./gradlew
./gradlew
./gradlew build

# jar 파일이 생긴 곳에서 실행
cd build/libs/
java -jar build/libs/OMG_project-0.0.1-SNAPSHOT.jar

# 터미널 세션 종료 후에도 애플리케이션 계속 실행될려면 아래 코드 작성
nohup java -jar build/libs/OMG_project-0.0.1-SNAPSHOT.jar &

 

서버 확인

ec2 dns 주소:8080 으로 입력하면 접속이 잘 되는 것을 볼 수 있다.

 

728x90

'AWS 인프라' 카테고리의 다른 글

#2. aws RDS 생성  (0) 2024.09.06
AWS - IAM 사용자 생성하기  (1) 2024.09.01
728x90

1. AWS에 ROOT 계정으로 접속한다.

 

 

2. IAM을 클릭한다.

3. 사용자 -> 사용자 생성

 

 

4. 사용자 이름 ,암호 지정

사용자 이름과 암호 등을 입력한 후 다음을 누른다.

 

 

5. 권한 옵션

- 사용자를 여러명 두어야 한다면 그룹을 생성해서 그룹에 권한을 부여한다.

아니라면 그냥 권한 설정에서 직접 정책 연결로 권한을 부여한다. => S3 full, codedefloy full, ec2 full, rds full

 

 

6. 엑세스 키 발급하기

사용자가 생성이 된 후  생성된 사용자를 클릭해서 엑세스 키 만들기 를 클릭하여 csv 파일로 미리 다운로드 해놓는다.

아님

IAM ->  사용자 -> 보안 자격 증명 -> 엑세스 키 만들기 -> CLI 선택 을 해서 만들어도 된다. 둘다 똑같다.

 

 

7. IAM 대시보드에서 별칭 지정

IAM 대시보드에서 우측에 별칭을 설정한다. 

 

 

8. 로그아웃 후
     a. 지정한 별칭 (별칭을 지정안했다면 7번에서 세션 ID 입력)
     b. iam 사용자 이름
     c. 암호

위의 2가지를 사용해서 iam 사용자로 로그인을 한다.

728x90

'AWS 인프라' 카테고리의 다른 글

#2. aws RDS 생성  (0) 2024.09.06
#1. aws ec2 접속해서 배포하기  (1) 2024.09.06

+ Recent posts