|
|
|
|
# Rocky Linux 9.5 Spring Boot 서버 설정 가이드
|
|
|
|
|
|
|
|
|
|
## 요구사항
|
|
|
|
|
1. Rocky Linux 9.5 version, 가상화 서버
|
|
|
|
|
2. 현재 root로 설치만 되어 있는 상태
|
|
|
|
|
3. 목표는 신규 계정 및 그룹생성하고 java 설치, profile 설정 및 적용, path 설정 및 적용, umask 설정(775권한)
|
|
|
|
|
4. 디렉토리 생성하여 spring-boot 소스 배포
|
|
|
|
|
5. 소스 실행
|
|
|
|
|
6. 소스 실행 결과 확인
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 1단계: 그룹 및 사용자 계정 생성
|
|
|
|
|
|
|
|
|
|
### 1.1 그룹 생성
|
|
|
|
|
```bash
|
|
|
|
|
# 애플리케이션용 그룹 생성 (예: xit)
|
|
|
|
|
groupadd xit
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 1.2 사용자 계정 생성
|
|
|
|
|
```bash
|
|
|
|
|
# 사용자 생성 (예: xit)
|
|
|
|
|
# -m: 홈 디렉토리 자동 생성
|
|
|
|
|
# -g: 기본 그룹 지정
|
|
|
|
|
# -s: 기본 쉘 지정
|
|
|
|
|
useradd -m -g xit -s /bin/bash xit
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 1.3 사용자 비밀번호 설정
|
|
|
|
|
```bash
|
|
|
|
|
# xit 사용자 비밀번호 설정
|
|
|
|
|
passwd xit
|
|
|
|
|
# 프롬프트가 나오면 "xit5811807"을 입력합니다.
|
|
|
|
|
|
|
|
|
|
# root 사용자 비밀번호 설정 (필요시)
|
|
|
|
|
passwd root
|
|
|
|
|
# 프롬프트가 나오면 "xit5811807"을 입력합니다.
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 1.4 사용자 생성 확인
|
|
|
|
|
```bash
|
|
|
|
|
# 사용자 정보 확인
|
|
|
|
|
id xit
|
|
|
|
|
# 출력 예시: uid=1001(xit) gid=1001(xit) groups=1001(xit)
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 2단계: Java 설치
|
|
|
|
|
|
|
|
|
|
### 2.1 사용 가능한 Java 버전 확인
|
|
|
|
|
```bash
|
|
|
|
|
# 설치 가능한 Java 패키지 검색 (dnf 사용)
|
|
|
|
|
dnf search java | grep openjdk
|
|
|
|
|
|
|
|
|
|
# 또는 yum 사용 (Rocky Linux에서 yum은 dnf의 별칭)
|
|
|
|
|
yum search java | grep openjdk
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 2.2 Java 17 설치 (Spring Boot 3.x 권장)
|
|
|
|
|
```bash
|
|
|
|
|
# dnf로 Java 17 JDK 설치
|
|
|
|
|
dnf install -y java-17-openjdk java-17-openjdk-devel
|
|
|
|
|
|
|
|
|
|
# 또는 yum으로 설치
|
|
|
|
|
yum install -y java-17-openjdk java-17-openjdk-devel
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 2.3 Java 8 (JDK 1.8) 설치 (레거시 프로젝트용)
|
|
|
|
|
```bash
|
|
|
|
|
# dnf로 Java 8 JDK 설치
|
|
|
|
|
dnf install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
|
|
|
|
|
|
|
|
|
|
# 또는 yum으로 설치
|
|
|
|
|
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 2.4 여러 Java 버전 설치 시 버전 전환
|
|
|
|
|
```bash
|
|
|
|
|
# 설치된 Java 버전 목록 확인
|
|
|
|
|
alternatives --config java
|
|
|
|
|
|
|
|
|
|
# 실행하면 아래와 같이 선택 화면이 나옴:
|
|
|
|
|
# Selection Command
|
|
|
|
|
# -----------------------------------------------
|
|
|
|
|
# *+ 1 java-17-openjdk.x86_64
|
|
|
|
|
# 2 java-1.8.0-openjdk.x86_64
|
|
|
|
|
#
|
|
|
|
|
# Enter to keep the current selection[+], or type selection number:
|
|
|
|
|
|
|
|
|
|
# javac도 동일하게 전환
|
|
|
|
|
alternatives --config javac
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 2.5 Java 설치 확인
|
|
|
|
|
```bash
|
|
|
|
|
# Java 버전 확인
|
|
|
|
|
java -version
|
|
|
|
|
|
|
|
|
|
# javac 버전 확인
|
|
|
|
|
javac -version
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 2.6 Java 설치 경로 확인
|
|
|
|
|
```bash
|
|
|
|
|
# Java 설치 경로 확인
|
|
|
|
|
alternatives --display java
|
|
|
|
|
|
|
|
|
|
# 또는 직접 확인
|
|
|
|
|
ls -la /usr/lib/jvm/
|
|
|
|
|
|
|
|
|
|
# Java 8 경로 예시: /usr/lib/jvm/java-1.8.0-openjdk
|
|
|
|
|
# Java 17 경로 예시: /usr/lib/jvm/java-17-openjdk
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 2.7 dnf vs yum 차이점
|
|
|
|
|
| 명령어 | 설명 |
|
|
|
|
|
|--------|------|
|
|
|
|
|
| `dnf` | Rocky Linux 8/9의 기본 패키지 관리자 (권장) |
|
|
|
|
|
| `yum` | 기존 CentOS/RHEL 호환용 (dnf의 심볼릭 링크) |
|
|
|
|
|
|
|
|
|
|
**참고:** Rocky Linux 9에서는 dnf와 yum 둘 다 사용 가능하며, 동일하게 동작합니다.
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 3단계: 환경 변수 및 Profile 설정
|
|
|
|
|
|
|
|
|
|
### 3.1 사용자 profile 설정 파일 편집
|
|
|
|
|
```bash
|
|
|
|
|
# xit의 .bash_profile 편집
|
|
|
|
|
vi /home/xit/.bash_profile
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 3.2 .bash_profile 내용 추가
|
|
|
|
|
파일을 열고 아래 내용을 파일 끝에 추가합니다:
|
|
|
|
|
|
|
|
|
|
**Java 17 사용 시:**
|
|
|
|
|
```bash
|
|
|
|
|
# Java 환경 변수 설정 (Java 17)
|
|
|
|
|
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
|
|
|
|
|
export PATH=$JAVA_HOME/bin:$PATH
|
|
|
|
|
|
|
|
|
|
# 애플리케이션 관련 환경 변수
|
|
|
|
|
export APP_HOME=/app/VIPS
|
|
|
|
|
export PATH=$APP_HOME:$PATH
|
|
|
|
|
|
|
|
|
|
# umask 설정 (파일 생성시 775 권한)
|
|
|
|
|
# 775 = 777 - 002
|
|
|
|
|
umask 002
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**Java 8 (JDK 1.8) 사용 시:**
|
|
|
|
|
```bash
|
|
|
|
|
# Java 환경 변수 설정 (Java 8)
|
|
|
|
|
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
|
|
|
|
|
export PATH=$JAVA_HOME/bin:$PATH
|
|
|
|
|
|
|
|
|
|
# 애플리케이션 관련 환경 변수
|
|
|
|
|
export APP_HOME=/app/VIPS
|
|
|
|
|
export PATH=$APP_HOME:$PATH
|
|
|
|
|
|
|
|
|
|
# umask 설정 (파일 생성시 775 권한)
|
|
|
|
|
# 775 = 777 - 002
|
|
|
|
|
umask 002
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**vi 편집기 사용법:**
|
|
|
|
|
1. `i` 키를 눌러 편집 모드 진입
|
|
|
|
|
2. 내용 입력
|
|
|
|
|
3. `ESC` 키를 눌러 편집 모드 종료
|
|
|
|
|
4. `:wq` 입력 후 `Enter`로 저장 및 종료
|
|
|
|
|
|
|
|
|
|
### 3.3 .bashrc 파일도 설정 (선택사항)
|
|
|
|
|
```bash
|
|
|
|
|
# xit의 .bashrc 편집
|
|
|
|
|
vi /home/xit/.bashrc
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
파일 끝에 추가:
|
|
|
|
|
```bash
|
|
|
|
|
# umask 설정
|
|
|
|
|
umask 002
|
|
|
|
|
|
|
|
|
|
# alias 설정 (편의용)
|
|
|
|
|
alias ll=\'ls -la\'
|
|
|
|
|
alias app=\'cd /app/VIPS\'
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 3.4 설정 적용
|
|
|
|
|
```bash
|
|
|
|
|
# 설정 즉시 적용 (root에서 실행 시)
|
|
|
|
|
su - xit -c "source ~/.bash_profile"
|
|
|
|
|
|
|
|
|
|
# 또는 xit로 전환 후 실행
|
|
|
|
|
su - xit
|
|
|
|
|
source ~/.bash_profile
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 3.5 환경 변수 확인
|
|
|
|
|
```bash
|
|
|
|
|
# xit로 전환
|
|
|
|
|
su - xit
|
|
|
|
|
|
|
|
|
|
# 환경 변수 확인
|
|
|
|
|
echo $JAVA_HOME
|
|
|
|
|
echo $PATH
|
|
|
|
|
echo $APP_HOME
|
|
|
|
|
|
|
|
|
|
# umask 확인
|
|
|
|
|
umask
|
|
|
|
|
# 출력: 0002
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 4단계: 애플리케이션 디렉토리 생성 및 권한 설정
|
|
|
|
|
|
|
|
|
|
### 4.1 디렉토리 생성
|
|
|
|
|
```bash
|
|
|
|
|
# root 계정으로 실행
|
|
|
|
|
# 애플리케이션 디렉토리 생성
|
|
|
|
|
mkdir -p /app/VIPS
|
|
|
|
|
mkdir -p /app/VIPS/logs
|
|
|
|
|
mkdir -p /app/VIPS/config
|
|
|
|
|
mkdir -p /app/VIPS/backup
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 4.2 디렉토리 소유권 변경
|
|
|
|
|
```bash
|
|
|
|
|
# xit:xit 소유권으로 변경
|
|
|
|
|
chown -R xit:xit /app/VIPS
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 4.3 디렉토리 권한 설정
|
|
|
|
|
```bash
|
|
|
|
|
# 775 권한 설정 (소유자/그룹: rwx, 기타: r-x)
|
|
|
|
|
chmod -R 775 /app/VIPS
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 4.4 권한 확인
|
|
|
|
|
```bash
|
|
|
|
|
# 디렉토리 권한 및 소유권 확인
|
|
|
|
|
ls -la /app/VIPS
|
|
|
|
|
# 출력 예시:
|
|
|
|
|
# drwxrwxr-x. 4 xit xit 4096 Nov 19 10:00 .
|
|
|
|
|
# drwxrwxr-x. 2 xit xit 4096 Nov 19 10:00 logs
|
|
|
|
|
# drwxrwxr-x. 2 xit xit 4096 Nov 19 10:00 config
|
|
|
|
|
# drwxrwxr-x. 2 xit xit 4096 Nov 19 10:00 backup
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 5단계: Spring Boot 소스 배포
|
|
|
|
|
|
|
|
|
|
### 5.1 소스 파일 전송 (로컬 PC → 서버)
|
|
|
|
|
|
|
|
|
|
**방법 1: SCP 사용 (로컬 PC에서 실행)**
|
|
|
|
|
```bash
|
|
|
|
|
# Windows PowerShell 또는 CMD에서 실행
|
|
|
|
|
scp C:\path\to\VIPS-BOOT.war xit@서버IP:/app/VIPS/
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**방법 2: SFTP 사용**
|
|
|
|
|
```bash
|
|
|
|
|
# SFTP 접속
|
|
|
|
|
sftp xit@서버IP
|
|
|
|
|
|
|
|
|
|
# 파일 전송
|
|
|
|
|
put VIPS-BOOT.war /app/VIPS/
|
|
|
|
|
exit
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**방법 3: 서버에서 직접 다운로드 (URL이 있는 경우)**
|
|
|
|
|
```bash
|
|
|
|
|
# xit로 전환
|
|
|
|
|
su - xit
|
|
|
|
|
|
|
|
|
|
# 파일 다운로드
|
|
|
|
|
cd /app/VIPS
|
|
|
|
|
curl -O http://your-server/VIPS-BOOT.war
|
|
|
|
|
# 또는
|
|
|
|
|
wget http://your-server/VIPS-BOOT.war
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 5.2 배포된 파일 확인
|
|
|
|
|
```bash
|
|
|
|
|
# xit로 전환
|
|
|
|
|
su - xit
|
|
|
|
|
|
|
|
|
|
# 파일 확인
|
|
|
|
|
ls -la /app/VIPS/
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 5.3 실행 권한 부여 (필요시)
|
|
|
|
|
```bash
|
|
|
|
|
chmod 775 /app/VIPS/VIPS-BOOT.war
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 6단계: Spring Boot 애플리케이션 실행
|
|
|
|
|
|
|
|
|
|
### 6.1 기본 실행
|
|
|
|
|
```bash
|
|
|
|
|
# xit로 전환
|
|
|
|
|
su - xit
|
|
|
|
|
|
|
|
|
|
# 애플리케이션 실행
|
|
|
|
|
cd /app/VIPS
|
|
|
|
|
java -jar VIPS-BOOT.war
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 6.2 백그라운드 실행 (터미널 종료 후에도 계속 실행)
|
|
|
|
|
```bash
|
|
|
|
|
# nohup으로 백그라운드 실행
|
|
|
|
|
nohup java -Dspring.profiles.active=prd -jar /app/VIPS/VIPS-BOOT.war > /app/VIPS/logs/app.log 2>&1 &
|
|
|
|
|
# 실행로그도 안남김.. 서버 부팅 로그 확인 이후
|
|
|
|
|
nohup java -Dspring.profiles.active=prd -jar /app/VIPS/VIPS-BOOT.war > /dev/null 2>&1 &
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 또는 출력 분리
|
|
|
|
|
nohup java -Dspring.profiles.active=prd -jar /app/VIPS/VIPS-BOOT.war \
|
|
|
|
|
1>/app/VIPS/logs/stdout.log \
|
|
|
|
|
2>/app/VIPS/logs/stderr.log &
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 6.3 JVM 옵션과 함께 실행
|
|
|
|
|
```bash
|
|
|
|
|
# 메모리 설정 포함 실행
|
|
|
|
|
nohup java \
|
|
|
|
|
-Xms512m \
|
|
|
|
|
-Xmx1024m \
|
|
|
|
|
-jar /app/VIPS/VIPS-BOOT.war \
|
|
|
|
|
--spring.profiles.active=prod \
|
|
|
|
|
> /app/VIPS/logs/app.log 2>&1 &
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 6.4 프로세스 ID 확인
|
|
|
|
|
```bash
|
|
|
|
|
# 실행 직후 PID 저장
|
|
|
|
|
echo $! > /app/VIPS/app.pid
|
|
|
|
|
|
|
|
|
|
# 또는 프로세스 검색
|
|
|
|
|
ps -ef | grep java
|
|
|
|
|
ps -ef | grep VIPS-BOOT.war
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 7단계: 실행 결과 확인
|
|
|
|
|
|
|
|
|
|
### 7.1 프로세스 실행 확인
|
|
|
|
|
```bash
|
|
|
|
|
# Java 프로세스 확인
|
|
|
|
|
ps -ef | grep java
|
|
|
|
|
|
|
|
|
|
# 특정 포트 확인 (예: 18080)
|
|
|
|
|
ss -tlnp | grep 18080
|
|
|
|
|
# 또는
|
|
|
|
|
netstat -tlnp | grep 18080
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 7.2 로그 확인
|
|
|
|
|
```bash
|
|
|
|
|
# 실시간 로그 확인
|
|
|
|
|
tail -f /app/VIPS/logs/app.log
|
|
|
|
|
|
|
|
|
|
# 최근 100줄 확인
|
|
|
|
|
tail -100 /app/VIPS/logs/app.log
|
|
|
|
|
|
|
|
|
|
# 로그에서 에러 검색
|
|
|
|
|
grep -i error /app/VIPS/logs/app.log
|
|
|
|
|
grep -i exception /app/VIPS/logs/app.log
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 7.3 애플리케이션 응답 테스트
|
|
|
|
|
```bash
|
|
|
|
|
# HTTP 응답 확인 (포트 18080 예시)
|
|
|
|
|
curl -I http://localhost:18080
|
|
|
|
|
|
|
|
|
|
# API 엔드포인트 테스트
|
|
|
|
|
curl http://localhost:18080/actuator/health
|
|
|
|
|
curl http://localhost:18080/api/test
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 7.4 방화벽 설정 (외부 접속 허용)
|
|
|
|
|
```bash
|
|
|
|
|
# root 계정으로 실행
|
|
|
|
|
# 포트 18080 방화벽 허용
|
|
|
|
|
firewall-cmd --permanent --add-port=18080/tcp
|
|
|
|
|
firewall-cmd --reload
|
|
|
|
|
|
|
|
|
|
# 방화벽 상태 확인
|
|
|
|
|
firewall-cmd --list-all
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 8단계: 애플리케이션 관리 명령어
|
|
|
|
|
|
|
|
|
|
### 8.1 애플리케이션 중지
|
|
|
|
|
```bash
|
|
|
|
|
# PID 파일로 중지
|
|
|
|
|
kill $(cat /app/VIPS/app.pid)
|
|
|
|
|
|
|
|
|
|
# 또는 프로세스 검색 후 중지
|
|
|
|
|
ps -ef | grep VIPS-BOOT.war
|
|
|
|
|
kill [PID번호]
|
|
|
|
|
|
|
|
|
|
# 강제 종료 (응답 없을 때)
|
|
|
|
|
kill -9 [PID번호]
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 8.2 애플리케이션 재시작
|
|
|
|
|
```bash
|
|
|
|
|
# 중지 후 시작
|
|
|
|
|
kill $(cat /app/VIPS/app.pid)
|
|
|
|
|
sleep 3
|
|
|
|
|
# nohup java -Dspring.profiles.active=prd -jar /app/VIPS/VIPS-BOOT.war > /app/VIPS/logs/app.log 2>&1 &
|
|
|
|
|
nohup java -Dspring.profiles.active=prd -jar /app/VIPS/VIPS-BOOT.war > /dev/null 2>&1 &
|
|
|
|
|
echo $! > /app/VIPS/app.pid
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 8.3 시작 스크립트 생성 (선택사항)
|
|
|
|
|
```bash
|
|
|
|
|
vi /app/VIPS/start.sh
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
스크립트 내용:
|
|
|
|
|
```bash
|
|
|
|
|
#!/bin/bash
|
|
|
|
|
APP_NAME="VIPS-BOOT.war"
|
|
|
|
|
APP_HOME="/app/VIPS"
|
|
|
|
|
LOG_DIR="$APP_HOME/logs"
|
|
|
|
|
PID_FILE="$APP_HOME/app.pid"
|
|
|
|
|
|
|
|
|
|
# 이미 실행 중인지 확인
|
|
|
|
|
if [ -f "$PID_FILE" ]; then
|
|
|
|
|
PID=$(cat $PID_FILE)
|
|
|
|
|
if ps -p $PID > /dev/null 2>&1; then
|
|
|
|
|
echo "Application is already running (PID: $PID)"
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# 애플리케이션 시작
|
|
|
|
|
echo "Starting application..."
|
|
|
|
|
# nohup java -Xms512m -Xmx1024m -jar -Dspring.profiles.active=prd $APP_HOME/$APP_NAME > $LOG_DIR/app.log 2>&1 &
|
|
|
|
|
nohup java -Dspring.profiles.active=prd -jar /app/VIPS/$APP_HOME/$APP_NAME > /dev/null 2>&1 &
|
|
|
|
|
echo $! > $PID_FILE
|
|
|
|
|
echo "Application started (PID: $(cat $PID_FILE))"
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
스크립트 실행 권한 부여:
|
|
|
|
|
```bash
|
|
|
|
|
chmod 775 /app/VIPS/start.sh
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 8.4 중지 스크립트 생성 (선택사항)
|
|
|
|
|
```bash
|
|
|
|
|
vi /app/VIPS/stop.sh
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
스크립트 내용:
|
|
|
|
|
```bash
|
|
|
|
|
#!/bin/bash
|
|
|
|
|
PID_FILE="/app/VIPS/app.pid"
|
|
|
|
|
|
|
|
|
|
if [ -f "$PID_FILE" ]; then
|
|
|
|
|
PID=$(cat $PID_FILE)
|
|
|
|
|
if ps -p $PID > /dev/null 2>&1; then
|
|
|
|
|
echo "Stopping application (PID: $PID)..."
|
|
|
|
|
kill $PID
|
|
|
|
|
sleep 3
|
|
|
|
|
if ps -p $PID > /dev/null 2>&1; then
|
|
|
|
|
echo "Force killing..."
|
|
|
|
|
kill -9 $PID
|
|
|
|
|
fi
|
|
|
|
|
rm -f $PID_FILE
|
|
|
|
|
echo "Application stopped"
|
|
|
|
|
else
|
|
|
|
|
echo "Application is not running"
|
|
|
|
|
rm -f $PID_FILE
|
|
|
|
|
fi
|
|
|
|
|
else
|
|
|
|
|
echo "PID file not found"
|
|
|
|
|
fi
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
스크립트 실행 권한 부여:
|
|
|
|
|
```bash
|
|
|
|
|
chmod 775 /app/VIPS/stop.sh
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 9단계: systemd 서비스 등록 (선택사항 - 권장)
|
|
|
|
|
|
|
|
|
|
### 9.1 서비스 파일 생성
|
|
|
|
|
```bash
|
|
|
|
|
# root 계정으로 실행
|
|
|
|
|
vi /etc/systemd/system/vips.service
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
서비스 파일 내용:
|
|
|
|
|
```ini
|
|
|
|
|
[Unit]
|
|
|
|
|
Description=VIPS Spring Boot Application
|
|
|
|
|
After=network.target
|
|
|
|
|
# 600초(10분) 동안의 재시작 횟수를 카운트, 최대 5번까지만 재시작 시도
|
|
|
|
|
StartLimitIntervalSec=600
|
|
|
|
|
StartLimitBurst=5
|
|
|
|
|
|
|
|
|
|
[Service]
|
|
|
|
|
Type=simple
|
|
|
|
|
User=xit
|
|
|
|
|
Group=xit
|
|
|
|
|
WorkingDirectory=/app/VIPS
|
|
|
|
|
# ExecStart=/usr/lib/jvm/java-1.8.0-openjdk/bin/java -Xms512m -Xmx1024m -Dspring.profiles.active=prd -jar /app/VIPS/VIPS-BOOT.war
|
|
|
|
|
ExecStart=/usr/lib/jvm/java-1.8.0-openjdk/bin/java -Dspring.profiles.active=prd -jar /app/VIPS/VIPS-BOOT.war
|
|
|
|
|
# ExecStop=/bin/kill -15 $MAINPID
|
|
|
|
|
Restart=on-failure
|
|
|
|
|
RestartSec=10
|
|
|
|
|
|
|
|
|
|
[Install]
|
|
|
|
|
WantedBy=multi-user.target
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 9.2 서비스 등록 및 시작
|
|
|
|
|
```bash
|
|
|
|
|
# systemd 데몬 리로드
|
|
|
|
|
systemctl daemon-reload
|
|
|
|
|
|
|
|
|
|
# 서비스 시작
|
|
|
|
|
systemctl start vips
|
|
|
|
|
|
|
|
|
|
# 부팅 시 자동 시작 설정
|
|
|
|
|
systemctl enable vips
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 9.3 서비스 관리 명령어
|
|
|
|
|
```bash
|
|
|
|
|
# 상태 확인
|
|
|
|
|
systemctl status vips
|
|
|
|
|
|
|
|
|
|
# 시작
|
|
|
|
|
systemctl start vips
|
|
|
|
|
|
|
|
|
|
# 중지
|
|
|
|
|
systemctl stop vips
|
|
|
|
|
|
|
|
|
|
# 재시작
|
|
|
|
|
systemctl restart vips
|
|
|
|
|
|
|
|
|
|
# 로그 확인
|
|
|
|
|
journalctl -u vips -f
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 전체 실행 순서 요약
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# 1. root로 로그인 후 그룹/사용자 생성
|
|
|
|
|
groupadd xit
|
|
|
|
|
useradd -m -g xit -s /bin/bash xit
|
|
|
|
|
passwd xit
|
|
|
|
|
|
|
|
|
|
# 2. Java 설치
|
|
|
|
|
dnf install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
|
|
|
|
|
|
|
|
|
|
# 3. 환경 변수 설정
|
|
|
|
|
vi /home/xit/.bash_profile
|
|
|
|
|
# (JAVA_HOME, PATH, umask 설정 추가)
|
|
|
|
|
|
|
|
|
|
# 4. 디렉토리 생성 및 권한 설정
|
|
|
|
|
mkdir -p /app/VIPS/logs /app/VIPS/config /app/VIPS/backup
|
|
|
|
|
chown -R xit:xit /app/VIPS
|
|
|
|
|
chmod -R 775 /app/VIPS
|
|
|
|
|
|
|
|
|
|
# 5. 소스 배포 (외부에서 파일 전송)
|
|
|
|
|
# scp VIPS-BOOT.war xit@서버IP:/app/VIPS/
|
|
|
|
|
|
|
|
|
|
# 6. xit로 전환 후 실행
|
|
|
|
|
su - xit
|
|
|
|
|
cd /app/VIPS
|
|
|
|
|
nohup java -jar VIPS-BOOT.war > /app/VIPS/logs/app.log 2>&1 &
|
|
|
|
|
|
|
|
|
|
# 7. 실행 확인
|
|
|
|
|
ps -ef | grep java
|
|
|
|
|
tail -f /app/VIPS/logs/app.log
|
|
|
|
|
curl http://localhost:18080/actuator/health
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 문제 해결 (Troubleshooting)
|
|
|
|
|
|
|
|
|
|
### Java를 찾을 수 없는 경우
|
|
|
|
|
```bash
|
|
|
|
|
# Java 설치 확인
|
|
|
|
|
which java
|
|
|
|
|
java -version
|
|
|
|
|
|
|
|
|
|
# 환경 변수 확인
|
|
|
|
|
echo $JAVA_HOME
|
|
|
|
|
echo $PATH
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 포트가 이미 사용 중인 경우
|
|
|
|
|
```bash
|
|
|
|
|
# 포트 사용 프로세스 확인
|
|
|
|
|
ss -tlnp | grep 18080
|
|
|
|
|
lsof -i :18080
|
|
|
|
|
|
|
|
|
|
# 해당 프로세스 종료
|
|
|
|
|
kill [PID]
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 권한 오류 발생 시
|
|
|
|
|
```bash
|
|
|
|
|
# 파일 권한 확인
|
|
|
|
|
ls -la /app/VIPS/
|
|
|
|
|
|
|
|
|
|
# 권한 재설정
|
|
|
|
|
chown -R xit:xit /app/VIPS
|
|
|
|
|
chmod -R 775 /app/VIPS
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 로그 파일이 생성되지 않는 경우
|
|
|
|
|
```bash
|
|
|
|
|
# 로그 디렉토리 권한 확인
|
|
|
|
|
ls -la /app/VIPS/logs
|
|
|
|
|
|
|
|
|
|
# 디렉토리가 없으면 생성
|
|
|
|
|
mkdir -p /app/VIPS/logs
|
|
|
|
|
chown xit:xit /app/VIPS/logs
|
|
|
|
|
chmod 775 /app/VIPS/logs
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 메모리 부족 오류 (OutOfMemoryError)
|
|
|
|
|
```bash
|
|
|
|
|
# JVM 메모리 옵션 조정
|
|
|
|
|
java -Xms1g -Xmx2g -jar VIPS-BOOT.war
|
|
|
|
|
```
|