1. RDS 세팅하기
1-1. 엔진옵션 : MySQL

1-2. 템플릿 : 프리티어

1-3. DB 인스턴스 식별자 → aws RDS 에서 표현되는 이름
마스터 사용자 이름 → application.properties 에 작성
마스터 암호 → application.properties 에 작성

1-4. db.t3.micro 선택

1-5. 할당된 스토리지 : 20GiB
스토리지 자동 조정 활성화 : 체크 해제

1-6. ec2 컴퓨팅 리소스에 연결 안 함
퍼블릭 액세스 : 예
VPC 보안그룹 : 인바운드 규칙에 IPv4 3306와 IPv6 3306 허용하는 그룹

1-7. 데이터베이스 암호 인증 선택

1-8. 초기 데이터베이스 이름 설정
백업 : 자동 백업 활성화 체크 해제
아래에서 초기 데이터베이스 이름은 나중에 application.properties 에 넣을 예정

1-9. 파라미터 그룹 생성

1-10. 파라미터 그룹 설정

1-11. 생성한 파라미터 그룹 클릭

1-12. 편집 선택

1-13. 수정 가능한 파라미터에서 time_zone 검색 후 값 변경

1-14. 수정 가능한 파라미터에서 char 검색 후 값 변경

1-15. 수정 가능한 파라미터에서 collation 검색 후 값 변경


1-16. 이미 생성한 RDS 를 수정에 들어간 후 DB 파라미터 그룹을 생성한 그룹으로 변경

1-17. 생성한 RDS 와 스프링부트를 연결하기 위해 application.properties 설정
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://[rds 엔드포인트]:3306/[초기 데이터베이스 이름]?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul
spring.datasource.username=[마스터 사용자 이름]
spring.datasource.password=[마스터 암호]
spring.jpa.show-sql=false
spring.jpa.hibernate.ddl-auto=validate
spring.jpa.properties.hibernate.format_sql=true
2. redis, kafka 인스턴스 생성, 설치, 설정
↓ 이 부분은 docker를 사용하지 않고 인스턴스에 직접 redis를 설치하는 경우
ec2 인스턴스 내에 redis 설치하기
sudo apt install redis-server -y
sudo systemctl status redis //서비스 상태 확인
sudo systemctl enable redis // 서버 재부팅 시 자동으로 시작하도록 설정
redis.conf 파일 설정하기
sudo vi /etc/redis/redis.conf
bind 0.0.0.0
protected-mode no
로 수정하기
2-1. docker 설치
sudo apt update
sudo apt install docker.io -y //docker 패키지 설치
sudo systemctl enable docker
sudo systemctl start docker
2-2. 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
sudo chmod +x /usr/local/bin/docker-compose //다운로드한 파일은 실행 권한이 없으므로, 다음 명령어를 실행해야 함
2-3. docker-compose.yml 파일 작성
sudo vi docker-compose.yml
2-4. docker-compose.yml 파일 내용
version: '3'
services:
zookeeper:
image: confluentinc/cp-zookeeper:latest
container_name: zookeeper
restart: always
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ports:
- "2181:2181"
kafka:
image: confluentinc/cp-kafka:latest
container_name: kafka
restart: always
depends_on:
- zookeeper
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
ports:
- "9092:9092"
redis:
image: redis:latest
container_name: redis
restart: always
ports:
- "6379:6379"
command: ["redis-server", "--appendonly", "yes", "--bind", "0.0.0.0", "--protected-mode", "no"]
2-5. docker 실행하기
sudo docker-compose up
또는
sudo docker-compose up -d //백그라운드 실행
2-6. redis, kafka, zookeeper 와 스프링부트를 연결하기 위해 application.properties 설정
spring.cache.type=redis
spring.data.redis.host=3.39.11.83
spring.data.redis.port=6379
spring.kafka.consumer.bootstrap-servers=3.39.11.83:9092
spring.kafka.producer.bootstrap-servers=3.39.11.83:9092
spring.kafka.consumer.group-id=search-consumer-group
spring.kafka.consumer.auto-offset-reset=earliest
3. Jenkins에 .gitignore 에 추가했던 application.properties 추가하기
3-1. 프로젝트에서 application.properties 를 Explorer 로 열기

3-2. application.properties를 바탕화면에 복붙하기

3-3. Jenkins 관리 -> Credentials 클릭

3-4. 빨간박스 부분 [Add Credentials] 클릭

3-5. [+ Add Credentials] 클릭

3-6. Credentials 설정
Kind - Secret file
Scope - 기본값 그대로
File - 다운받은 application.properties 파일
ID - 스크립트에서 구별할 수 있는 이름으로 설정
Description - 설명(선택사항)

4. Jenkins 에서 백엔드 파이프라인 만들기
4-1. 파이프라인 생성

4-2. General 에서 Github project 체크 후 백엔드 코드가 있는 리포지터리의 주소를 지정 후
Github hook trigger for GITScm polling 체크 후 save 클릭

4-3. 파이프라인 스크립트 작성
pipeline {
agent any
tools {
gradle "GRADLE" // Ensure the Gradle tool is configured in Jenkins
}
stages {
stage('Clone Repository') {
steps {
git branch: 'master', url: 'https://github.com/DongHun3946/new_stockBurning_backend', credentialsId: 'github_token'
}
}
stage('Build with Gradle') {
steps {
sh 'chmod +x ./gradlew'
sh './gradlew clean build'
}
}
stage('Copy Application Properties') {
steps {
withCredentials([file(credentialsId: 'application_properties', variable: 'APP_PROPERTIES_FILE')]) {
script {
sh "cp $APP_PROPERTIES_FILE src/main/resources/application.properties"
sh "chmod u+w src/main/resources/application.properties"
echo 'Application properties copied successfully!'
}
}
echo 'Application properties copied successfully!'
}
}
stage('Deploy to Server 1') {
steps {
script {
deployToServer("43.201.65.150")
}
}
}
}
post {
success {
echo 'Deployment completed successfully.'
}
failure {
echo 'Deployment encountered an error.'
}
}
}
def deployToServer(serverIp) {
def jarFile = "${WORKSPACE}/build/libs/stockBurning-0.0.1-SNAPSHOT.jar"
def deployPath = '/home/ubuntu'
def runAppCommand = "nohup java -jar $deployPath/stockBurning-0.0.1-SNAPSHOT.jar > $deployPath/app.log 2>&1 &"
def checkLogCommand = "grep -q 'Starting' $deployPath/app.log"
// Stop existing application on the server
sshagent(['deploy_ssh_key']) { // Replace 'deploy_ssh_key' with the correct Jenkins credential ID
sh script: "ssh -o StrictHostKeyChecking=no -i /var/jenkins_home/.ssh/id_rsa ubuntu@$serverIp 'pgrep -f stockBurning-0.0.1-SNAPSHOT.jar && pkill -f stockBurning-0.0.1-SNAPSHOT.jar || echo \"No process found\"'", returnStatus: true
}
// Transfer the new JAR file and application.properties to the server
sh "scp -o StrictHostKeyChecking=no -i /var/jenkins_home/.ssh/id_rsa ${WORKSPACE}/build/libs/stockBurning-0.0.1-SNAPSHOT.jar ubuntu@$serverIp:$deployPath/"
// Start the application on the remote server
sshagent(['deploy_ssh_key']) { // Replace 'deploy_ssh_key' with the correct Jenkins credential ID
sh "ssh -o StrictHostKeyChecking=no -i /var/jenkins_home/.ssh/id_rsa ubuntu@$serverIp '$runAppCommand'"
sleep 20 // Allow time for the application to start
// Verify the application started successfully
int result = sh script: "ssh -o StrictHostKeyChecking=no -i /var/jenkins_home/.ssh/id_rsa ubuntu@$serverIp '$checkLogCommand'", returnStatus: true
if (result == 0) {
echo "Deployment to $serverIp was successful."
} else {
error "Deployment to $serverIp failed."
}
}
}'배포' 카테고리의 다른 글
| [배포-3] HTTPS 적용하기 (0) | 2025.03.17 |
|---|---|
| [배포-1] 프론트 배포하기 (0) | 2025.03.06 |