Rocky Linux 9에서 RuoYi v3.9.0 전후방 분리 배포

1. RuoYi 백엔드 프레임워크 개요

RuoYi는 Spring Boot 기반의 오픈소스 관리 시스템으로, 보안 인증에 Apache Shiro를 활용하고 데이터 접근 계층에 MyBatis를 사용하며, 정적 뷰는 Thymeleaf로 구현된 경량화 조합을 특징으로 합니다. 주요 목적은 개발자가 비즈니스 로직에 집중할 수 있도록 기술 장벽을 낮추고, 프로젝트 개발 시간과 리소스 소모를 줄이는 것입니다.

핵심 사양

  • Java 버전: JDK 1.8 이상
  • 데이터베이스: MySQL 5.7+
  • 빌드 도구: Maven 3.0+

2. 서버 구성 및 배포 환경

본 설치에서는 전후방 분리 아키텍처를 기반으로 세 대의 Rocky Linux 9.5 가상 머신을 사용합니다.

역할소프트웨어버전용도
프론트엔드nginx1.20.1정적 자원 서비스 제공
백엔드OpenJDK1.8.0_452자바 애플리케이션 실행
Maven3.8.8프로젝트 빌드
Node.js16.20.2프론트엔드 빌드
DB 서버MySQL8.0.42시스템 메타데이터 저장
Redis6.2.18세션 및 캐시 저장

3. 사전 설정

보안 모듈과 방화벽을 비활성화하여 네트워크 통신을 원활히 합니다.

# 방화벽 중지 및 비활성화
systemctl stop firewalld
systemctl disable firewalld

# SELinux 비활성화
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

4. 백엔드 서버 설정

필수 도구 설치 및 환경 변수 등록:

yum -y install git java-1.8.0-openjdk.x86_64
wget https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz
wget https://nodejs.org/dist/v16.20.2/node-v16.20.2-linux-x64.tar.xz

tar -xf apache-maven-3.8.8-bin.tar.gz && mv apache-maven-3.8.8 /usr/local/maven
tar -xf node-v16.20.2-linux-x64.tar.xz && mv node-v16.20.2-linux-x64 /usr/local/node

echo 'export PATH=/usr/local/maven/bin:/usr/local/node/bin:$PATH' > /etc/profile.d/dev-env.sh
source /etc/profile.d/dev-env.sh

프로젝트 클론 및 설정 수정:

git clone https://gitee.com/y_project/RuoYi-Vue.git
cd RuoYi-Vue

데이터베이스 연결 정보 업데이트 (application-druid.yml):

master:
  url: jdbc:mysql://[DB_IP]:3306/ruoyi?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
  username: ruoyi
  password: [your_password]

Redis 설정 변경 (application.yml):

redis:
  host: [DB_IP]
  port: 6379
  password: [redis_password]
  database: 0
  timeout: 10s

프로젝트 빌드:

mvn clean package -DskipTests
cd ruoyi-ui && npm config set registry http://registry.npmmirror.com
npm install && npm run build:prod

5. 데이터베이스 서버 구성

MySQL 8.0 설치 및 초기화:

yum -y install https://dev.mysql.com/get/mysql84-community-release-el9-1.noarch.rpm
yum --enablerepo=mysql80-community --disablerepo=mysql-8.4-lts-community \
    -y install mysql-community-server
systemctl start mysqld

# 임시 비밀번호 추출 후 변경
TEMP_PASS=$(grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}')
mysqladmin -uroot -p"${TEMP_PASS}" password "MyRuoYi@2025"

데이터베이스 생성 및 권한 부여:

mysql -uroot -p"MyRuoYi@2025" <<EOF
CREATE DATABASE ruoyi CHARACTER SET utf8mb4;
CREATE USER 'ruoyi'@'%' IDENTIFIED BY 'AppDev#2025';
GRANT ALL PRIVILEGES ON *.* TO 'ruoyi'@'%';
FLUSH PRIVILEGES;
EOF

SQL 스키마 가져오기:

scp user@[BACKEND_IP]:~/RuoYi-Vue/sql/*.sql /root/
mysql -u root -p"MyRuoYi@2025" ruoyi < /root/ry_*.sql
mysql -u root -p"MyRuoYi@2025" ruoyi < /root/quartz.sql

Redis 설치 및 외부 접속 허용:

yum -y install redis
sed -i 's/^bind .*/bind 0.0.0.0/' /etc/redis/redis.conf
sed -i 's/^# requirepass .*/requirepass AppDev#2025/' /etc/redis/redis.conf
systemctl enable --now redis

6. 프론트엔드 서버 배포

Nginx 설치 및 역방향 프록시 구성:

yum -y install nginx
systemctl start nginx

기본 설정 파일 재정의:

cat > /etc/nginx/nginx.conf <<'EOF'
events { worker_connections 1024; }

http {
    upstream backend_app {
        server [BACKEND_IP]:8080;
    }

    server {
        listen 80;
        location / {
            root /usr/share/nginx/html;
            try_files $uri $uri/ /index.html;
        }
        location /prod-api/ {
            proxy_pass http://backend_app/;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
}
EOF

프론트엔드 아티팩트 배포:

scp -r user@[BACKEND_IP]:~/RuoYi-Vue/ruoyi-ui/dist/* /usr/share/nginx/html/
rm -rf /usr/share/nginx/html/{.*,*} 2>/dev/null || true
mv ~/dist/* /usr/share/nginx/html/
systemctl restart nginx

7. 시스템 검증

브라우저에서 http://[FRONTEND_IP] 접속 후 다음 자격 증명으로 로그인:

  • 계정: admin
  • 비밀번호: admin123

대시보드 로딩 성공 시 전체 배포 완료.

태그: Spring Boot nginx MySQL 8 Redis maven

7월 20일 01:38에 게시됨