ZrLog 博客系统部署指南(无 War 包版,Maven 构建 + 阿里云镜像优化)

ZrLog 博客系统部署指南(无 War 包版,Maven 构建 + 阿里云镜像优化)

适配场景:压缩包无现成 War 包,需通过 Maven 编译构建;新增阿里云镜像配置解决依赖下载失败问题

目标主机:192.168.223.20

适配系统:RHEL/CentOS/Rocky Linux 9.x


在 RHEL/CentOS/Rocky Linux 9.x 系统(目标主机 192.168.223.20)上,通过「JDK11+Maven3.9.6」编译 ZrLog 源码生成 War 包,搭配 MariaDB(数据库)+Tomcat10(应用容器)+Nginx(反向代理)完成部署,最终实现浏览器访问 ZrLog 博客系统。

源码 → Maven 构建(依赖下载 + 编译 + 打包)→ War 包 → Tomcat 部署 → Nginx 反向代理 → 浏览器访问;

二、前置环境准备(JDK + Maven + 基础依赖)

2.1 安装并配置 JDK 11

复制代码
# 1. 上传 jdk-11.tar.gz 到 /root 目录,执行解压
cd /root
tar -zxf jdk-11_linux-x64_bin.tar.gz  
mv  jdk-11  jdk11
​
# 2. 配置全局环境变量(永久生效)
cat > /etc/profile.d/jdk.sh << 'EOF'
export JAVA_HOME=/root/jdk11
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib
EOF
​
# 3. 生效并验证
source /etc/profile.d/jdk.sh
java -version  # 输出JDK版本即成功
  • JDK 是 Java 开发工具包,提供编写、编译、调试 Java 代码所需的全部工具,面向开发者使用;

  • JRE 是 Java 运行时环境,仅包含运行已编译 Java 程序的必要环境(JVM + 核心类库),仅运行Java程序时可只装JRE;

  • JVM 是 Java 虚拟机,负责将 Java 字节码翻译成操作系统能执行的指令,是 Java 实现跨平台运行的核心(Java 代码编译后生成的不是操作系统能直接执行的机器码,而是通用的「字节码(.class 文件)」,不同操作系统安装对应的 JVM(Java 虚拟机),由 JVM 负责将字节码翻译成当前系统的机器指令;)。

复制代码
┌─────────────────────────────────────┐
│               JDK                   │
│  ┌─────────────────────────────┐    │
│  │            JRE              │    │
│  │  ┌─────────────────────┐    │    │
│  │  │        JVM          │    │    │
│  │  └─────────────────────┘    │    │
│  │  (核心类库 + 系统文件)     │    │
│  └─────────────────────────────┘    │
│  (javac、jar、javadoc 等开发工具)  │
└─────────────────────────────────────┘

2.2 安装 Maven + 配置阿里云镜像(关键优化)

复制代码
# 1. 下载 Maven 3.9.6(适配JDK 11)
cd /root
wget https://archive.apache.org/dist/maven/maven-3/3.9.6/binaries/apache-maven-3.9.6-bin.tar.gz
​
# 2. 解压并重命名
root@zrlog ~]# tar -zxf   apache-maven-3.9.14-bin.tar.gz 
[root@zrlog ~]# mv apache-maven-3.9.14    maven
​
# 3. 配置全局环境变量
cat > /etc/profile.d/maven.sh << 'EOF'
export MAVEN_HOME=/root/maven
export PATH=$MAVEN_HOME/bin:$PATH
EOF
source /etc/profile.d/maven.sh
mvn -version  # 输出Maven版本即成功
​
[root@zrlog package]# vim /root/maven/conf/settings.xml
.....
<mirror>
    <id>tencentmaven</id>
    <mirrorOf>central</mirrorOf>
    <url>https://maven.aliyun.com/repository/public/</url>
</mirror>
....
复制代码

pom.xml(Project Object Model,项目对象模型)是 Maven项目的"灵魂配置文件",用于定义项目的所有核心信息,是Maven构建、依赖管理、打包的唯一依据(实验中核心作用是解决"无War包""依赖下载"问题)。

三、Maven 构建 ZrLog War 包(核心步骤)

3.1 解压 ZrLog 源码压缩包

复制代码
cd /root
# 解压到指定目录,避免文件混乱
unzip -q zrlog-3.3.0-1811fd7-release.zip -d zrlog-src
cd zrlog-src

3.2 定位 pom.xml 并执行构建

复制代码
# 进入pom.xml所在目录(根据你的压缩包结构)
[root@dev ~]# find   /root/zrlog-src/   -name  pom.xml   
/root/zrlog-src/META-INF/maven/com.hibegin/package/pom.xml
# 配置阿里云镜像(解决依赖下载慢/失败)
mv /root/zrlog-src/META-INF/maven/com.hibegin/package/pom.xml /root/zrlog-src/META-INF/maven/com.hibegin/package/pom.xml.bak
​
# 写入全新的独立pom.xml(无需父POM,直接构建War包)
cat > /root/zrlog-src/META-INF/maven/com.hibegin/package/pom.xml << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
​
    <!-- 手动定义项目基本信息(替代父POM) -->
    <groupId>com.hibegin</groupId>
    <artifactId>zrlog-web</artifactId>
    <version>3.3.0</version>
    <packaging>war</packaging>
    <name>ZrLog Web</name>
    <description>ZrLog Blog System</description>
​
    <!-- 核心依赖(覆盖父POM的关键依赖) -->
    <dependencies>
        <!-- Servlet & JSP 核心 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2</version>
            <scope>provided</scope>
        </dependency>
        <!-- Java EE 基础 -->
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>8.0.1</version>
            <scope>provided</scope>
        </dependency>
        <!-- 数据库驱动(ZrLog核心依赖) -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.33</version>
        </dependency>
        <!-- 日志依赖 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.36</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.13</version>
        </dependency>
    </dependencies>
​
    <!-- 构建配置(确保能打出可运行的War包) -->
    <build>
        <finalName>zrlog</finalName>
        <plugins>
            <!-- 编译插件(适配JDK11) -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>11</source>
                    <target>11</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <!-- War包插件(忽略缺失web.xml) -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.3.2</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                    <!-- 指向ZrLog的源码/资源目录(关键) -->
                    <webResources>
                        <resource>
                            <directory>/root/zrlog-src</directory>
                            <includes>
                                <include>WEB-INF/**/*</include>
                                <include>META-INF/**/*</include>
                                <include>**/*.jsp</include>
                                <include>**/*.html</include>
                                <include>**/*.css</include>
                                <include>**/*.js</include>
                            </includes>
                        </resource>
                    </webResources>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
EOF
[root@dev ~]# cd  /root/zrlog-src/META-INF/maven/com.hibegin/package/
​
# 执行Maven打包(-DskipTests跳过测试,加快构建速度)
mvn clean package -DskipTests

✅ 构建成功标识:

控制台输出 BUILD SUCCESS,并在 target/ 目录下生成 zrlog-3.3.0.war(文件名含版本号)。

2.3 安装数据库 / 反向代理 / 应用容器

复制代码
# 1. 基础工具依赖
dnf install -y wget unzip tar vim net-tools
​
# 2. MariaDB 数据库部署
dnf install -y mariadb-server mariadb
systemctl start mariadb && systemctl enable mariadb
# 创建ZrLog专用库和用户
mysql -u root -e "
CREATE DATABASE zrlog DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'zrlog'@'%' IDENTIFIED BY 'zrlog123456';
GRANT ALL PRIVILEGES ON zrlog.* TO 'zrlog'@'%';
FLUSH PRIVILEGES;
"
​
# 3. Nginx 反向代理部署
dnf install -y nginx
# 写入优化配置
cat > /etc/nginx/conf.d/zrlog.conf << 'EOF'
server {
    listen 80;
    server_name _;
    charset utf-8;
    client_max_body_size 100M;
    # 反向代理Tomcat
    location / {
    #反向代理核心:转发请求到Tomcat的8080端口
        proxy_pass http://127.0.0.1:8080;  
        #把用户请求中的 Host 头(比如用户访问的域名 / IP)传递给后端 Tomcat。
        proxy_set_header Host $host;
        #把真实的客户端 IP 传递给后端 Tomcat。
        proxy_set_header X-Real-IP $remote_addr;
        #传递 "IP 转发链",适配多层代理场景。
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        #设置 Nginx 与后端 Tomcat 建立连接的超时时间(60 秒)
        proxy_connect_timeout 60s;
        #设置 Nginx 等待后端 Tomcat 响应数据的超时时间(60 秒)。
        proxy_read_timeout 60s;
    }
}
EOF
# 启动并开机自启
systemctl start nginx && systemctl enable nginx
nginx -t  # 验证配置无报错
​
# 4. Tomcat 9 部署
cd /root
[root@dev ~]# tar -zxf apache-tomcat-10.1.52.tar.gz 
[root@dev ~]# mv apache-tomcat-10.1.52 tomcat10
[root@dev ~]# 
​
# 配置Tomcat内存参数
cat > /root/tomcat10/bin/setenv.sh << 'EOF'
export JAVA_HOME=/root/jdk11
export CATALINA_OPTS="-Xms512m -Xmx1024m"
EOF
chmod +x /root/tomcat10/bin/*.sh

配置这些环境变量,就是让系统和程序 "不用问、不用找",直接知道核心工具 / 依赖的位置,既能简化命令执行,也能避免版本冲突、路径错误等问题。

变量 一句话作用 应用场景举例
JAVA_HOME 告诉系统 "JDK 装在哪" Tomcat 启动、Maven 编译、ZrLog 运行
PATH(JDK) 告诉系统 "java 命令在哪" 执行java -versionjavac 源码.java
CLASSPATH 告诉 JVM "Java 类库在哪" 编译 / 运行 ZrLog 源码时加载核心类
MAVEN_HOME 告诉系统 "Maven 装在哪" 执行mvn命令时加载 Maven 配置
PATH(Maven) 告诉系统 "mvn 命令在哪" 执行mvn clean package构建 War 包

四、部署 War 包到 Tomcat

4.1 复制 War 包并清理旧数据

复制代码
# 回到Maven构建目录
cd  /root/zrlog-src/META-INF/maven/com.hibegin/package/
​
# 复制War包到Tomcat webapps目录,重命名为ROOT.war(直接访问根路径)
cp target/zrlog.war   /root/tomcat10/webapps/ROOT.war
​
​
# 清理Tomcat旧解压文件(避免冲突)
rm -rf /root/tomcat10/webapps/ROOT

4.2 启动 Tomcat 并验证

复制代码
# 启动Tomcat
/root/tomcat10/bin/startup.sh
​
# 查看启动日志(确认War包解压、服务无报错)
tail -f /root/tomcat10/logs/catalina.out

✅ 启动成功标识:

日志中出现 Server startup in XXX ms,且无 ERROR 级日志。


五、Web 端安装与访问

5.1 访问地址

复制代码
http://192.168.223.20 (Nginx反向代理80端口,无需加8080)

5.2 安装向导配置(数据库信息)

配置项 取值
数据库地址 192.168.223.20
数据库端口 3306
数据库名 zrlog
数据库用户名 zrlog
数据库密码 zrlog123456

填写完成后点击「安装」,即可进入 ZrLog 后台管理界面。

六、常见问题排查

6.1 Maven 构建失败

问题现象 解决方案
依赖下载超时 / 失败 确认阿里云镜像配置生效(settings.xml 路径正确),或切换网络后重新构建
JAVA_HOME 未配置 重新执行 source /etc/profile.d/jdk.sh,验证 java -version 输出正常
缺少编译依赖 执行 dnf install -y gcc-c++ make 安装编译工具后重新构建

6.2 Tomcat 启动后 404

问题现象 解决方案
ROOT.war 未解压 检查 catalina.out 日志是否有解压错误,手动删除 War 包重新复制后重启
端口 8080 被占用 `netstat -tulpn grep 8080` 找到占用进程,kill 后重启 Tomcat
数据库连接失败 确认 MariaDB 已启动,且 zrlog 用户允许远程连接(% 通配符)

6.3 Nginx 无法访问

问题现象 解决方案
80 端口未监听 systemctl status nginx 查看状态,修复配置错误(nginx -t 验证)
反向代理无响应 确认 Tomcat 已启动,且 proxy_pass 地址为 127.0.0.1:8080 无误

七、标准化服务管理命令

复制代码
# JDK/Maven环境生效
source /etc/profile.d/jdk.sh
source /etc/profile.d/maven.sh

# MariaDB 管理
systemctl start/stop/status mariadb

# Nginx 管理
systemctl start/stop/status nginx
nginx -t  # 配置验证

# Tomcat 管理
/root/tomcat9/bin/startup.sh   # 启动
/root/tomcat9/bin/shutdown.sh  # 停止
tail -f /root/tomcat9/logs/catalina.out  # 实时日志

总结

本次优化核心补充:

  1. 新增Maven 阿里云镜像配置,彻底解决国内网络下依赖下载失败 / 慢的问题;

  2. 明确 pom.xml 路径和构建命令,适配你的压缩包结构;

  3. 补充构建 / 启动失败的排查方案,降低部署风险;

  4. 所有命令可直接复制执行,无需手动修改路径(仅需替换服务器 IP)。

相关推荐
小江的记录本2 小时前
【Java】Java核心关键字:final、static、volatile、synchronized、transient(附《面试高频考点》)
java·开发语言·spring boot·后端·sql·spring·面试
伟大的大威2 小时前
彻底解决 Nginx Proxy Manager 反代 MinIO 报 SignatureDoesNotMatch (S3 签名不匹配) 的终极方案
运维·nginx·minio
yy_xzz2 小时前
【Linux开发】 02 Linux TCP 网络编程——迭代、回声服务器
linux·服务器·网络
oyzz1202 小时前
SpringBoot最佳实践之 - 使用AOP记录操作日志
java·spring boot·后端
yang_B6212 小时前
C# ISerializable 允许对象控制自己的序列化/反序列化过程
java·开发语言·c#
秦渝兴2 小时前
从手工高可用到全容器化:我的 Keepalived+Nginx+Tomcat+MySQL 项目迁移实战
linux·运维·mysql·nginx·容器·tomcat
mygljx2 小时前
oracle 12c查看执行过的sql及当前正在执行的sql
java·sql·oracle
1104.北光c°2 小时前
Leetcode21.合并两个有序链表 双指针+递归 【hot100算法个人笔记】【java写法】
java·后端·程序人生·算法·leetcode·链表·学习方法
花间相见2 小时前
【JAVA基础14】—— 二维数组详解:从基础到实战应用
java·python·算法