포스코DX X 비트교육센터 6기 - build & deploy
backend에 mojo 플러그인 설치
- pom.xml
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>npm</executable>
<workingDirectory>../frontend</workingDirectory>
<arguments>
<argument>run</argument>
<argument>build:fe</argument>
</arguments>
<environmentVariables>
</environmentVariables>
</configuration>
</plugin>
- exec-maven-plugin은 Maven 빌드 중에 외부 명령어나 스크립트를 실행하기 위한 플러그인 중 하나
-
이 플러그인을 사용하면 Maven 빌드 프로세스 중에 정의된 명령어나 스크립트를 실행하여 원하는 작업을 수행할 수 있다.
- 여기서는 npm이라는 Node.js 패키지 매니저를 실행하고, 해당 명령어의 실행 위치를 ../frontend로 지정하고 있어요. 그리고 npm run build:fe라는 스크립트를 실행 중.
-
이렇게 함으로써 Maven 빌드 중에 프론트엔드 자원을 빌드하는 등의 작업을 수행
- mojo란 이름은 Maven에서 사용하는 플러그인을 만들 때 자주 사용되는 용어이며, Maven의 플러그인 아키텍처를 구성하는 구성 요소 중 하나
- 따라서 org.codehaus.mojo는 Maven 플러그인을 위한 코드를 제공하는 Maven의 프로젝트 중 하나
frontend에 build script 추가하기
"build:fe": "npm install && npx webpack --config config/webpack.config.js --mode production",
- npm install은 Node.js 프로젝트에서 사용되는 패키지 의존성을 설치하는 명령어
- 여기서 “build:fe”이라는 스크립트를 실행하기 전에 npm install 명령어를 사용하면, 프로젝트에 필요한 패키지들이 설치되어 있지 않다면 먼저 필요한 패키지들을 설치
backend에 애플리케이션 실행 설정 정의 수정
# spring configuration
spring:
application:
name: emaillist
profiles:
active: development
---
# common spring boot configuration
spring:
mvc:
static-path-pattern: /assets/**
throw-exception-if-no-handler-found: true
web:
resources:
static-locations: classpath:/assets/
thymeleaf:
prefix : classpath:templates/
check-template-location: true
mode: HTML5
suffix : .html
cache : false
mybatis:
config-location: classpath:mybatis/configuration.xml
logging:
pattern:
console: "%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n"
level:
root: INFO
---
# development profile: spring boot configuration
spring:
config:
activate:
on-profile: development
devtools:
livereload:
enabled: true
datasource:
driver-class-name: org.mariadb.jdbc.Driver
url: jdbc:mariadb://[내 ip주소]:3307/webdb?charset=utf8
username: webdb
password: webdb
hikari:
minimum-idle: 10
maximum-pool-size: 20
server:
port: 8080
servlet:
context-path: /
encoding:
charset: utf-8
enabled: true
---
# production profile: spring boot configuration
spring:
config:
activate:
on-profile: production
datasource:
driver-class-name: org.mariadb.jdbc.Driver
url: jdbc:mariadb://[내 ip주소]:3307/webdb?charset=utf8
username: webdb
password: webdb
hikari:
minimum-idle: 10
maximum-pool-size: 20
server:
port: 8088
servlet:
context-path: /
encoding:
charset: UTF-8
enabled: true
- 터미널에서 해당 명령어로 build success 확인하기.
C:\Users\pc\Desktop\poscodx2023\eclipse\react-practices\emaillist\backend> mvn exec:exec clean package
- centOS에서 build 해보기
// git에서 프로젝트 clone 받기
# git clone 주소
// 만약에, 프로젝트 내용이 바뀐다면, git push하고, centOS에 있는 프로젝트를 삭제하고 다시 clone 받기
# rm -rf [프로젝트 이름]
# git clone 주소
// 빌드(배포)
# mvn -f emaillist/backend exec:exec clean package
// 테스트
# java -Dspring.profiles.active=production -jar emaillist/backend/target/emaillist.jar
Jenkins 배포하기
- 새로운 Items 추가
-
Freestyle Project로 ok
-
-
-
build 하기
- 결과 )
SSH 연결하기
- SSH란?
: 인증 및 접근 제어; SSH 키 기반의 인증은 안전하면서도 편리한 방법으로 접근을 제어할 수 있습니다. 특히 배포나 서버 접속과 같은 작업에서는 SSH 키를 사용하는 것이 일반적입니다. SSH 키는 비밀번호와는 달리 보안성이 높아, 무단 접근을 방지하는 데 도움이 됩니다.
SSH 키는 보안성을 높이고, 사용자 경험을 향상시키며, 자동화와 관리의 용이성을 제공하여 서버 접속 및 배포와 같은 작업을 더 효과적으로 수행할 수 있도록 도와줍니다.
- CentOS에서 key 생성하기
# ssh-keygen -t rsa -b 2048 -m PEM -C "sonrisa-bonita@naver.com"
- key 생성 확인 (root에서 cd .ssh으로 가서 ll 하면 두가지의 키를 확인할 수 있다.)
# cd .ssh
# ll
- private key(개인키): ~/.ssh/id_rsa
- public key(공개키): ~/.ssh/id_rsa.pub
- 공개키를 서버에 설치하기
# mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
- private key 잘 저장하기
# cat id_rsa
나오는 키값을 메모장에 옮겨 적고
모든 파일로 로컬에 ‘mykey_pem’라는 이름으로 저장
만약 open이 되지 않는다면??
//webmaster password 로 들어가서 root로 들어갈 수 있도록 설정을 바꾸어야함.
# vi /etc/ssh/sshd_config
//PermitRootLogin yes > 저장하기
# systemctl restart sshd
# exit
# open
// 상단 설정 다시해서 들어가기
- deploy: Publish Over SSH 플러그인(Jenkins)
플러그인 다운로드 받기
잰킨스관리의 system에서 다음과 같은 메뉴가 생긴다면 준비 완료
- SSH Server에 내용 채우기
- 배포하는 프로젝트 들어가서 configuration의 빌드 후 조치
- centOS에서 접속 환경 설정하기
1. ~/.ssh/environment (여기 파일을 만들어서 다음 내용 작성하기)
=====
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/poscodx2023/java/bin:/usr/local/poscodx2023/git/bin:/usr/local/poscodx2023/maven/bin:/usr/local/poscodx2023/mariadb/bin:/root/bin
=====
2. /etc/ssh/sshd_config ( 여기 파일에 들어가서 해당 내용 yes로 바꾸기 )
PermitUserEnvironment yes
- launch.sh를 backend/resource 폴더에 추가한다.
#! /bin/bash
APPLICATION_NAME=emaillist
SCRIPT_DIR=$(cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd)
PID=$(ps -ef | grep java | grep $APPLICATION_NAME.jar | awk '{print $2}')
if [ ! -z "$PID" ]
then
echo "stopping [$APPLICATION_NAME]"
kill -9 $PID
sleep 10
fi
echo "starting [$APPLICATION_NAME]"
cd $SCRIPT_DIR
nohup java -Dspring.profiles.active=production -jar $SCRIPT_DIR/$APPLICATION_NAME.jar >> $SCRIPT_DIR/launch.log &
이 스크립트는 Spring Boot 애플리케이션을 실행하거나 중지하는 데 사용
-
새로운 릴리스 배포: 애플리케이션을 업데이트하거나 새로운 릴리스를 배포할 때, 이전 버전의 애플리케이션을 중지하고 새 버전을 시작
-
환경 구성 변경: 애플리케이션의 환경 구성이 변경되었을 때, 적용된 변경 사항을 반영하기 위해 애플리케이션을 다시 시작.
-
애플리케이션 재시작: 메모리 누수나 성능 이슈 등으로 인해 애플리케이션을 주기적으로 재시작.
-
프로파일 변경: 스크립트에서 사용된 -Dspring.profiles.active=production은 애플리케이션을 production 프로파일로 시작하도록 지정.
이 스크립트는 이러한 작업을 자동화하여 운영 및 배포 프로세스를 편리하게 만들어줍니다. 특히, nohup을 사용하여 백그라운드에서 실행되도록 하고, 로그를 launch.log 파일에 기록하여 추적이 가능하게 합니다.
// 실행하고자 하는 프로젝트로 이동한다.
# cd /usr/local/poscodx2023/springboot-apps/emaillist07
// launch.sh를 실행한다.
# ./.launch.sh
// java 실행이 kill 이후 restart 되었는지 확인한다.
# ps -ef | grep java
// pid가 바뀐 것을 알 수 있다. Process ID의 약어로, 각 프로세스에 할당된 고유한 식별자. (운영체제는 각 실행 중인 프로세스에 대해 고유한 ID를 부여하여 해당 프로세스를 식별한다.)
- 결과) jenkins에서 빌드 이후 배포가 완료된 것을 알 수 있다.