java单体项目部署

(node1)部署mysql8

下载仓库
dnf install -y https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm

centos7版本:
sudo yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm

dnf repolist enabled | grep mysql

dnf install -y mysql-community-server --nogpgcheck

systemctl start mysqld
systemctl enable mysqld
systemctl status mysqld

查看密码
grep password /var/log/mysqld.log

初始化设置
mysql_secure_installation    输入的密码是Aa123456.
依次输入  yyynyy

测试连接:mysql -uroot -p[密码] 



创建远程连接:
CREATE USER 'root'@'%' IDENTIFIED BY 'Aa123456.';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

开放防火墙

firewall-cmd --zone=public --add-service=mysql --permanent

或者开放 3306 端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent

# 让规则立即生效
firewall-cmd --reload

firewall-cmd --list-all


(node1)部署redis

更新dnf相关软件包 【可选】  时间较长 预计20分钟
dnf update -y
# 安装redis操作
dnf install redis -y


修改配置:

vim  /etc/redis.conf
# 83行附件, 修改为  * -::*  任意的服务都可以连接redis服务
bind 0.0.0.0    

#908行附近: 打开requirepass,设置其密码为123456 【可选】
requirepass 123456

如果找不到, 请在794行,添加即可
#794 行附近: 添加 requirepass,设置其密码为123456 【可选】  如果不涉及密码, 访问redis不需要输入密码,建议设置,因为项目中配置有对应密码
requirepass 123456

启动:
systemctl start redis

systemctl enable redis

查看状态:
systemctl status redis

测试连接状态:
redis-cli 【-a 密码】

或
redis-cli  命令 进入客户端, 然后输入 auth 123456

退出客户端: quit 或 ctrl +d

开启防火墙:
firewall-cmd --add-service=redis --permanent
或
firewall-cmd --add-port=6379/tcp --add-port=6379/udp --permanent

重新加载:
firewall-cmd --reload


创建阿里云oss服务获取 accesskey:

创建百度千帆大模型 访问key

前端部署

安装项目依赖文件,从阿里云拉取
npm install --registry=https://registry.npmmirror.com

启动
npm run dev

部署架构

服务器节点 数据库服务 redis服务 Nginx服务 Tomcat DNS服务 日志服务 时间同步服务器
node1(192.168.130.100) node1.shili.cn
node3同步
node2(192.168.130.101) √(安装JDK)
node3同步
node3(192.168.130.102)

三节点ssh配置

ssh-keygen -f ~/.ssh/id_rsa -P '' -q
ssh-copy-id root@192.168.88.101
ssh-copy-id root@192.168.130.101  
ssh-copy-id root@192.168.130.102
cat .ssh/authorized_keys

ssh root@192.168.130.101 -o StrictHostKeyChecking=no

ssh脚本

#!/bin/bash
#1.定义要免密的服务器地址
SERVERS=("192.168.130.101" "192.168.130.102" "192.168.130.100")
USER=root
#2.判断系统中是否生成秘钥对
[ ! -f "$HOME/.ssh/id_rsa" ] && ssh-keygen -t rsa -N "" -f "$HOME/.ssh/id_rsa"
#3.使用循环遍历所有服务器
for SERVER in "${SERVERS[@]}"
do
    echo "配置对 $SERVER 服务器进行免密"
    ssh-copy-id -o StrictHostKeyChecking=no "$USER@$SERVER"
done

关闭selinux防火墙

vim /etc/selinux/config

一步到位
sudo sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

设置ntp时间同步

vim /etc/chrony.conf

pool 2.centos.pool.ntp.org iburst
pool ntp.aliyun.com iburst
pool ntp.tencent.com iburst

# 允许130网段客户端, 向时间同步服务器同步时间
#allow 192.168.0.0/16
allow 192.168.130.0/24

# 打开最后一行 详细日志记录
log measurements statistics tracking
重启
systemctl restart chronyd
防火墙放行:
firewall-cmd --add-service=ntp --permanent
firewall-cmd --reload
firewall-cmd --list-all
vim /etc/chrony.conf

pool 192.168.130.102 iburst

# node1 和 node2都要执行
systemctl restart chronyd

测试
chronyc sources

安装mysql

上面已经在node1中安装mysql8

(node2)安装jdk11

mkdir -p /export/software
cd  /export/software

tar -xzf openjdk-11.0.0.2_linux-x64.tar.gz -C /opt/

cd /opt/
vim /etc/profile

在文件的尾部添加: 
# JAVA_HOME
export JAVA_HOME=/opt/jdk-11.0.0.2
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/lib:$CLASSPATH

source /etc/profile

校验:
java -version

打包 jar包部署(node2)

上传jar包
mkdir -p /opt/zzyl_project

运行
 cd /opt/zzyl_project
java -jar zzyl-admin.jar

开放 9000 端口
firewall-cmd --zone=public --add-port=9000/tcp --permanent  
firewall-cmd --reload


firewall-cmd --list-all

后台运行:
nohup java -jar zzyl-admin.jar 2>&1 >/dev/null &


校验:
jps : 查看Java的进程
ps -ef | grep java 查看java进程


基于tomcat启动

将源码打包成war包上传


cd /export/software/
tar -xzf apache-tomcat-9.0.97.tar.gz -C /opt/

cd /opt/

启动tomcat
cd /opt/apache-tomcat-9.0.97/bin
./startup.sh

开放 8080 端口
firewall-cmd --zone=public --add-port=8080/tcp --permanent  

# 让规则立即生效
firewall-cmd --reload

验证防火墙规则
firewall-cmd --list-all

将打包好的war包上传至webapps目录下
启动tomcat   这里访问是默认tomcat端口8080

监控日志
tail -100f logs/catalina.out

node3部署nginx

dnf install nginx -y

systemctl start nginx
systemctl enable nginx
# 查看状态信息
systemctl status nginx


开启防火墙:
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent

# 重新加载规则信息
firewall-cmd --reload

# 查看规则信息
firewall-cmd --list-all



nginx目录介绍

•/etc/nginx/ 目录 【重要】
这是 Nginx 的 主配置目录,存放所有与 Nginx 配置相关的文件

•/var/www/目录 【重要】
默认情况下,Nginx 的网站文件(例如 HTML、图片等)通常存放在这个目录下

•/usr/share/nginx/目录
这个目录通常包含与 Nginx 程序相关的文件

/usr/share/nginx/html/ :
    Nginx 默认的网页目录,通常安装时会有一个默认的 index.html 文件,用来验证 Nginx 是否成功安装。

var/log/nginx/目录 【重要】
Nginx 会把日志文件存放在这个目录下。日志文件帮助你监控 Nginx 的运行情况,排查问题


(node3)前端程序打包

该命令在package.json文件中可以找到
npm run build:prod


创建www目录:
mkdir -p /var/www/

将打包好的dist上传到此目录下

配置nginx

vim /etc/nginx/nginx.conf


# 添加相关内容:
# 在HTTP的目录下, 添加以下三个add_header   CORS 配置
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS, PUT, DELETE";
add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept, Authorization";


作用:这几行配置用于设置 跨域资源共享(CORS),
它们在 Nginx 中用来允许其他域名访问你的资源。CORS 是一种机制,
允许通过浏览器发起跨域 HTTP 请求,常用于 Web 应用与不同域名的 API 交互时,
解决浏览器的同源策略限制


在server中, 添加以下三行内容, 删除原有的server_name 和root
client_max_body_size 60m; # 限制客户端请求体的最大大小。
client_body_buffer_size 512k; # 设置 Nginx 用于缓冲客户端请求体的内存大小。
client_header_buffer_size 2k; # 设置 Nginx 用于缓冲请求头的内存大小。

说明
这些配置项与 Nginx 处理客户端请求的请求体大小、
请求头缓冲区等相关,主要用于控制 Nginx 在处理上传文件、请求体内容和请求头时的行为。


在server中,继续添加以下内容, 注意根据图片 确定放置位置
       # 处理 静态页面
       location / {
                root   /var/www/dist;
                index  index.html index.htm;
                proxy_set_header   Upgrade          $http_upgrade;
                proxy_set_header   Connection       upgrade;
                try_files $uri $uri/ /index.html;
        }
        # 处理反向代理
        location /prod-api/ {
                proxy_pass http://192.168.130.101:8080/zzyl-admin/;
                proxy_set_header   Upgrade          $http_upgrade;
                proxy_set_header   Connection       upgrade;
        }




重启 Nginx:
systemctl restart nginx

或
重新加载 Nginx 配置(不停止服务):
nginx -s reload


node3安装配置dns服务器

node3:
后台管理系统域名 Nginx: www.zzyl-itcast.cn 或 zzyl-itcast.cn
        DNS服务器域名: ns.zzyl-itcast.cn
        时间同步服务器域名: ntp.zzyl-itcast.cn
顶级域名:
    zzyl-itcast.cn

子域名:  www  ns  ntp  


www.zzyl-itcast.cn :  192.168.130.102
    zzyl-itcast.cn  :  192.168.130.102
    
    ns.zzyl-itcast.cn : 192.168.130.102
    ntp.zzyl-itcast.cn : 192.168.130.102
在node3配置DNS服务器, 完成最终解析操作, 同时windows连接服务器的DNS, 实现域名访问


node1日志服务

要求在node1节点中,单独挂载一块磁盘, 用于存储中州养老的日志数据,同时支持后续扩容使用

初始磁盘大小: 10GB
采用LVM方案
挂载点: /mnt/zzyl_logs

日志需求说明: 
    日志:
        Nginx node3的access.log和error.log: 开启日志轮替方案, 每日轮替一次,至少保留6个版本【轮替文件时存在的, 只需要将版本调整为6即可】
        

        后台系统 node2: /home/ruoyi/logs/  已自动有轮替,无需配置
                 sys-info.2024-12-28.log
                 sys-user.2024-12-28.log
                 sys-error.2024-12-28.log
                         

对日志,进行周期性同步, 每日凌晨1点, 准时同步之前(不含当天日志)的 Nginx和后台系统日志到/mnt/zzyl_logs

注意: 涉及到名字的命名, 要求见名知意即可,可以任意定义


需求: 只能同步上一天及其之前的数据
数据同步:
    数据源:
        node2: /home/ruoyi/logs/  有三个日志文件
            sys-info.2024-12-28.log
            sys-user.2024-12-28.log
            sys-error.2024-12-28.log
        node3:  /var/log/nginx 有二个日志文件
            access.log-20250331
            error.log-20250331
        
    
    目的地: 
        node1: /mnt/zzyl_logs

        
总结 先分区/不分区  -> 然后 pv vg lv -》格式化lv -》 挂载lv -》永久挂载 写入 /etc/fstab

先分区
sudo fdisk /dev/sdb

n → p → 1 → 回车(默认起始)→ 回车(使用全部空间)
t → 8e        # 设置分区类型为 "Linux LVM"
w             # 保存并退出

lsblk
# 应看到 /dev/sdb1

创建pv
# 如果你做了分区
sudo pvcreate /dev/sdb1

# 如果你没分区(直接用整盘)
# sudo pvcreate /dev/sdb

sudo pvs
# 输出应包含 /dev/sdb1,大小 ~10G

创建vg
# 使用分区
sudo vgcreate vg_logs /dev/sdb1

# 或使用整盘
# sudo vgcreate vg_logs /dev/sdb

sudo vgs
# 应显示 VG: vg_logs, Size: 10.00g

创建lv
sudo lvcreate -l 100%FREE -n lv_logs vg_logs
sudo lvs
# 应显示 LV: lv_logs, VG: vg_logs, LSize: 10.00g

格式化逻辑卷
# 推荐 XFS(适合大文件、日志场景)
sudo mkfs.xfs /dev/vg_logs/lv_logs

# 或使用 ext4
# sudo mkfs.ext4 /dev/vg_logs/lv_logs

创建挂载点挂载
sudo mkdir -p /mnt/zzyl_logs
sudo mount /dev/vg_logs/lv_logs /mnt/zzyl_logs

验证挂载:
df -hT /mnt/zzyl_logs
# 应显示 xfs/ext4 文件系统,容量 ~10G

永久挂载:
echo '/dev/vg_logs/lv_logs /mnt/zzyl_logs xfs defaults 0 0' | sudo tee -a /etc/fstab

lvm挂载硬盘脚本

#!/bin/bash
#=============================================================
# 脚本名称: setup_lvm_logs.sh
# 功能: 自动为新硬盘创建 LVM 并挂载到 /mnt/zzyl_logs
# 作者: Assistant
# 日期: 2026-01-02
# 改进: 自动检测并安装 lvm2 包,支持主流 Linux 发行版
#=============================================================

set -e

DEVICE=""
FS_TYPE="xfs"
MOUNT_POINT="/mnt/zzyl_logs"
VG_NAME="vg_logs"
LV_NAME="lv_logs"

log() {
    echo -e "\033[32m[INFO]\033[0m $1"
}
warn() {
    echo -e "\033[33m[WARN]\033[0m $1"
}
error() {
    echo -e "\033[31m[ERROR]\033[0m $1" >&2
    exit 1
}

if [[ $EUID -ne 0 ]]; then
    error "请使用 root 权限运行此脚本 (sudo)"
fi

# ========================
# 新增:自动安装 LVM2
# ========================
install_lvm2() {
    log "检测 LVM 工具是否已安装..."
    if command -v pvcreate &> /dev/null; then
        log "LVM 工具已安装,跳过安装步骤。"
        return 0
    fi

    log "LVM 工具未安装,正在自动安装 lvm2..."

    # 检测发行版
    if command -v apt-get &> /dev/null; then
        # Debian/Ubuntu
        apt-get update -y
        apt-get install -y lvm2
    elif command -v yum &> /dev/null; then
        # CentOS/RHEL 7
        yum install -y lvm2
    elif command -v dnf &> /dev/null; then
        # Fedora/CentOS/RHEL 8+
        dnf install -y lvm2
    else
        error "不支持的包管理器,请手动安装 lvm2 后重试。"
    fi

    # 验证安装
    if ! command -v pvcreate &> /dev/null; then
        error "lvm2 安装失败,请手动检查网络或软件源。"
    fi

    log "lvm2 安装成功!"
}

# 执行 LVM 安装
install_lvm2

# ========================
# 原有逻辑(参数解析等)
# ========================
if [[ $# -ge 1 ]]; then
    DEVICE="$1"
    if [[ ! -b "$DEVICE" ]]; then
        error "设备 $DEVICE 不存在或不是块设备"
    fi
fi

if [[ $# -ge 2 ]]; then
    FS_TYPE="$2"
    if [[ "$FS_TYPE" != "xfs" && "$FS_TYPE" != "ext4" ]]; then
        error "文件系统类型必须是 'xfs' 或 'ext4'"
    fi
fi

# 自动检测新硬盘
if [[ -z "$DEVICE" ]]; then
    log "正在自动检测新硬盘..."
    for disk in /dev/sd[b-z] /dev/vd[b-z]; do
        if [[ -b "$disk" ]]; then
            if ! lsblk -nro MOUNTPOINT "$disk" | grep -q . && ! lsblk -nro NAME "$disk" | grep -q "[0-9]$"; then
                DEVICE="$disk"
                log "检测到新硬盘: $DEVICE"
                break
            fi
        fi
    done
    [[ -z "$DEVICE" ]] && error "未找到可用的新硬盘,请手动指定设备路径(如 /dev/sdb)"
fi

read -p "将对设备 $DEVICE 执行 LVM 初始化操作,确认继续? (y/N): " -n 1 -r
echo
[[ ! $REPLY =~ ^[Yy]$ ]] && exit 0

# 安装文件系统工具(如果需要)
if [[ "$FS_TYPE" == "xfs" ]]; then
    if ! command -v mkfs.xfs &> /dev/null; then
        log "检测到 XFS 工具未安装,正在安装..."
        if command -v apt-get &> /dev/null; then
            apt-get install -y xfsprogs
        elif command -v yum &> /dev/null || command -v dnf &> /dev/null; then
            (yum install -y xfsprogs || dnf install -y xfsprogs)
        fi
    fi
elif [[ "$FS_TYPE" == "ext4" ]]; then
    if ! command -v mkfs.ext4 &> /dev/null; then
        log "检测到 ext4 工具未安装,正在安装 e2fsprogs..."
        if command -v apt-get &> /dev/null; then
            apt-get install -y e2fsprogs
        elif command -v yum &> /dev/null || command -v dnf &> /dev/null; then
            (yum install -y e2fsprogs || dnf install -y e2fsprogs)
        fi
    fi
fi

# 步骤 1: 创建 LVM 分区
log "1. 对 $DEVICE 创建 LVM 分区..."
parted -s "$DEVICE" mklabel gpt mkpart primary 0% 100% set 1 lvm on
PARTITION="${DEVICE}1"

sleep 2
if [[ ! -b "$PARTITION" ]]; then
    partprobe "$DEVICE" 2>/dev/null || true
    sleep 2
fi
[[ ! -b "$PARTITION" ]] && error "分区 $PARTITION 未创建成功"

# 步骤 2-7: LVM + 挂载(保持不变)
log "2. 创建物理卷 (PV)..."
pvcreate -ff -y "$PARTITION" >/dev/null

log "3. 创建卷组 (VG: $VG_NAME)..."
vgcreate "$VG_NAME" "$PARTITION" >/dev/null

log "4. 创建逻辑卷 (LV: $LV_NAME)..."
lvcreate -l 100%FREE -n "$LV_NAME" "$VG_NAME" >/dev/null

LV_PATH="/dev/$VG_NAME/$LV_NAME"
[[ ! -b "$LV_PATH" ]] && error "逻辑卷 $LV_PATH 未创建成功"

log "5. 格式化为 $FS_TYPE 文件系统..."
if [[ "$FS_TYPE" == "xfs" ]]; then
    mkfs.xfs -f "$LV_PATH" >/dev/null
else
    mkfs.ext4 -F "$LV_PATH" >/dev/null
fi

log "6. 创建挂载点并挂载..."
mkdir -p "$MOUNT_POINT"
mount "$LV_PATH" "$MOUNT_POINT"

log "7. 配置 /etc/fstab 开机自动挂载..."
UUID=$(blkid -s UUID -o value "$LV_PATH")
[[ -z "$UUID" ]] && error "无法获取逻辑卷 UUID"

cp /etc/fstab /etc/fstab.bak.$(date +%Y%m%d)
echo "UUID=$UUID $MOUNT_POINT $FS_TYPE defaults 0 0" >> /etc/fstab

if ! mount -a 2>/dev/null; then
    error "fstab 配置有误,请检查 /etc/fstab"
fi

# 输出结果
log "✅ LVM 挂载完成!"
echo "----------------------------------------"
echo "挂载点:       $MOUNT_POINT"
echo "文件系统:     $FS_TYPE"
echo "逻辑卷:       $LV_PATH"
echo "卷组:         $VG_NAME"
echo "设备:         $DEVICE → $PARTITION"
echo "容量:         $(df -h "$MOUNT_POINT" | awk 'NR==2 {print $2}')"
echo "fstab 备份:   /etc/fstab.bak.$(date +%Y%m%d)"
echo "----------------------------------------"
# ========================
# 新增:验证信息打印
# ========================
log "🔍 正在执行挂载验证..."
if mountpoint -q "$MOUNT_POINT"; then
    log "✅ 挂载点 $MOUNT_POINT 已正确挂载。"
else
    error "❌ 挂载点 $MOUNT_POINT 未挂载!请手动检查。"
fi

if [[ $(df -h "$MOUNT_POINT" | wc -l) -ge 2 ]]; then
    log "✅ 文件系统容量已识别。"
else
    warn "⚠️  df 未显示挂载点容量,可能存在异常。"
fi

# 检查 fstab 是否包含条目
if grep -q "UUID=$UUID" /etc/fstab; then
    log "✅ /etc/fstab 已正确配置自动挂载。"
else
    warn "⚠️  /etc/fstab 中未找到 UUID 条目,请手动检查。"
fi

log "📌 验证命令参考:"
echo "  # 查看挂载情况"
echo "  df -h $MOUNT_POINT"
echo ""
echo "  # 查看块设备结构"
echo "  lsblk"
echo ""
echo "  # 查看 LVM 信息"
echo "  pvs && echo '---' && vgs && echo '---' && lvs"
echo ""
echo "  # 测试写入权限"
echo "  touch $MOUNT_POINT/test_write && rm -f $MOUNT_POINT/test_write && echo '✅ 写入测试通过'"
sudo chmod +x /root/setup_lvm_logs.sh

卸载清除lvm分区脚本

#!/bin/bash
#=============================================================
# 脚本名称: cleanup_lvm_logs.sh
# 功能: 安全卸载并彻底清理 LVM 配置,恢复硬盘原始状态
# 作者: Assistant
# 日期: 2026-01-02
#=============================================================

set -e

MOUNT_POINT="/mnt/zzyl_logs"
VG_NAME="vg_logs"
DEVICE=""  # 自动检测

log() { echo -e "\033[32m[INFO]\033[0m $1"; }
error() { echo -e "\033[31m[ERROR]\033[0m $1" >&2; exit 1; }

if [[ $EUID -ne 0 ]]; then
    error "请使用 root 权限运行 (sudo)"
fi

# 1. 卸载挂载点
if mountpoint -q "$MOUNT_POINT"; then
    log "1. 卸载挂载点 $MOUNT_POINT..."
    umount "$MOUNT_POINT"
    rmdir "$MOUNT_POINT" 2>/dev/null || true
else
    log "1. 挂载点 $MOUNT_POINT 未挂载,跳过卸载。"
fi

# 2. 从 /etc/fstab 移除条目
if grep -q "$MOUNT_POINT" /etc/fstab; then
    log "2. 从 /etc/fstab 中移除自动挂载配置..."
    sed -i "/$MOUNT_POINT/d" /etc/fstab
    log "   已清理 fstab。"
fi

# 3. 停用并删除逻辑卷
if lvs --noheadings -o lv_name,vg_name 2>/dev/null | grep -q "lv_logs.*$VG_NAME"; then
    log "3. 删除逻辑卷 lv_logs..."
    lvremove -f "/dev/$VG_NAME/lv_logs"
fi

# 4. 删除卷组
if vgs --noheadings -o vg_name 2>/dev/null | grep -q "^ *$VG_NAME *$"; then
    log "4. 删除卷组 $VG_NAME..."
    vgremove -f "$VG_NAME"
fi

# 5. 清除物理卷标签
# 先尝试从 LVM 获取 PV 设备
PV_DEVICE=$(pvs --noheadings -o pv_name,vg_name 2>/dev/null | awk "/$VG_NAME/ {print \$1}" | head -1)
if [[ -z "$PV_DEVICE" ]]; then
    # 回退:尝试常见设备名
    for dev in /dev/sd[b-z]1 /dev/vd[b-z]1; do
        if [[ -b "$dev" ]] && pvs "$dev" 2>/dev/null | grep -q "$VG_NAME"; then
            PV_DEVICE="$dev"
            break
        fi
    done
fi

if [[ -n "$PV_DEVICE" ]]; then
    log "5. 清除物理卷标签: $PV_DEVICE..."
    pvremove -ff -y "$PV_DEVICE"
    DEVICE="${PV_DEVICE%1}"  # /dev/sdb1 → /dev/sdb
else
    log "5. 未找到关联的物理卷,跳过 pvremove。"
fi

# 6. 彻底擦除分区表(恢复硬盘为“全新”状态)
if [[ -n "$DEVICE" && -b "$DEVICE" ]]; then
    log "6. 擦除硬盘分区表: $DEVICE..."
    wipefs -a "$DEVICE"      # 清除所有文件系统/分区表签名
    dd if=/dev/zero of="$DEVICE" bs=1M count=10 oflag=direct 2>/dev/null || true
    log "✅ 硬盘 $DEVICE 已恢复为原始状态,可重新使用!"
else
    warn() { echo -e "\033[33m[WARN]\033[0m 无法确定底层硬盘设备,请手动执行 wipefs/dd。"; }
    warn
fi

# 7. 可选:重启 LVM 服务(某些系统需要)
if systemctl is-active --quiet lvm2-lvmetad; then
    log "7. 重启 LVM 服务..."
    systemctl restart lvm2-lvmetad 2>/dev/null || true
fi

log "🎉 LVM 清理完成!硬盘已释放。"
dnf install logrotate

配置:

sudo tee /etc/logrotate.d/nginx << 'EOF'
/var/log/nginx/access.log
/var/log/nginx/error.log
{
    daily
    missingok
    rotate 6
    compress
    delaycompress
    notifempty
    create 0640 nginx nginx
    sharedscripts
    dateext
    dateformat -%Y%m%d
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 $(cat /var/run/nginx.pid)
    endscript
}
EOF

手动测试:
sudo logrotate -f /etc/logrotate.d/nginx

ls -lh /var/log/nginx/
命令操作: 
    同步远端 node2:  在node1执行同步命令
    rsync -avz --delete  'root@node2:/home/ruoyi/logs/sys-*.log'  /mnt/zzyl_logs

    同步远端 node3:  在node1执行同步命令
    rsync -avz --delete  'root@node3:/var/log/nginx/*.log-*'  /mnt/zzyl_logs


配置定时操作: 仅在node1即可    每日凌晨1点


编写定时器: crontab -e
输入 i 进入插入模式:
添加以下二行内容:
0 1 * * * /usr/bin/rsync -avz --delete  root@192.168.130.101:/home/ruoyi/logs/sys-*.*.log  /mnt/zzyl_logs
0 1 * * * /usr/bin/rsync -avz --delete  root@192.168.130.102:/var/log/nginx/*.log-*  /mnt/zzyl_logs
posted @ 2026-01-06 17:46  ShiLiCoder  阅读(12)  评论(0)    收藏  举报