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 |