Ubuntu에 SpringBoot 프로젝트 배포하기(Maven, Gradle)

나르·2021년 10월 31일
1

Spring

목록 보기
3/25
post-thumbnail

🛠 Requirements

  • java 11
  • postgresql(DB)

🌈 Spring Project 배포하기

1. 클라우드 인스턴스를 생성 및 key를 이용하여 인스턴스 접속

2. requirements 설치

$ sudo apt update
$ sudo apt install openjdk-11-jdk
$ java --version
$ sudo apt install postgresql postgresql-contrib
$ psql --version

$ sudo -i -u postgres   #postgres로 유저 전환
postgres@ubuntu:~$ psql

# psql user, db 생성
# 생성한 psql 유저로 접속할 땐 psql -U [username] -d [database] -h 127.0.0.1 

3. git clone [repository]

4. 프로젝트 빌드 파일이 있는 위치로 이동

5. 빌드 및 실행

Maven

$ ./mvnw clean package -DskipTests
$ cd target/
$ nohup java -jar [빌드된 jar 파일 이름] &
commanddescription
package 컴파일을 수행하고 컴파일한 소스를 packaging 양식(war/jar)에 맞춰 프로젝트 내 지정한 경로(eg.target) 디렉토리에 생성
clean 이전 maven build 시 생성된 모든 것들을 삭제한다.
-DskipTests 빌드할 때 테스트케이스를 건너뛴다.

testskip-Dmaven.test.skip=true 옵션이나 pom.xml plugin에 아래 코드를 추가하는 방법으로도 가능합니다.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <skipTests>true</skipTests> 
    </configuration> 
</plugin>

❗️error

./mvnw clean package permission denied

해당 명령어의 수행 권한이 없어서 발생하는 에러이므로 chmod +x mvnw 로 권한을 주면 됩니다.

Gradle

Gradle 도 Maven 과 크게 다르지 않습니다.


$ ./gradlew clean build -x test
$ cd build/libs/
$ nohup java -jar [빌드된 jar 파일 이름] &

nohup 커맨드를 추가해 daemon으로 실행시킬 수 있습니다.
tail nohup.out으로 로그 확인이 가능합니다.

tail 옵션

  • -f: 파일의 마지막 10라인을 실시간으로 계속 출력
    ex) tail -f nohup.out

  • -n : 원하는 수 라인 만큼 출력
    ex)
    tail -n 10 nohup.out 마지막부터 10줄을 출력
    tail -n +10 nohup.out 파일의 10번째 줄 이후부터 출력

  • grep: 특정 패턴이 들어간 라인만 출력
    ex)
    tail -f nohup.out | grep "example" 마지막부터 10줄에 example이 들어간 라인들을 출력
    tail -100f nohup.out | grep "example" 마지막부터 100줄에 example이 들어간 라인들을 출력

♻️ 코드 수정 후 재배포

  1. git pull 로 수정사항을 불러옵니다.

  2. 기존에 돌아가던 서버 중지하지 않고 새로 빌드한 파일을 실행하면 8080 port already in use 가 뜹니다.
    taskkill 을 해주면 해결됩니다.

ps -ef | grep java 
혹은
jps
// 실행 중인 프로세스 번호 확인
kill -9 [프로세스의 실행번호]
  1. 재빌드 및 실행

매번 수정때마다 빌드하고 배포하기 너무 귀찮아서...조만간 웹훅이라도 달아서 처리해야겠습니다😂
wrapper도 조만간 자세히 뒤져보는걸로🙄

build.sh 생성하기

CD를 연결해 두지 않았을 경우 매번 커맨드를 치는 것 보다 쉘스크립트를 생성하는게 편합니다..
chmod u+x script.sh 로 권한을 부여하고 실행합니다.

아래는 Gradle+멀티모듈 구조 기준 스크립트입니다.

#!/bin/bash
SERVICE_NAME=

echo "kill previous process"
kill -9 $(jps | grep $SERVICE_NAME | awk '{print $1}')

echo "###### $SERVICE_NAME ######"
cd $SERVICE_NAME/

echo "remove old jar file"
rm -rf build/

echo "build new jar file"
cd ../
./gradlew clean
./gradlew $SERVICE_NAME:bootJar

echo "run server"
cd $SERVICE_NAME/build/libs/
nohup java -jar $SERVICE_NAME-0.0.1.jar &
profile
💻 + ☕ = </>

0개의 댓글