ICOOLKJ 前后端分离项目完整部署文档(MySQL8.4+Redis+JDK21+Nginx+HTTPS+自动同步演示库)

一、环境总览

  • 操作系统:Linux x86_64
  • 数据库:MySQL 8.4.10 二进制手动部署(忽略表名大小写)
  • 缓存中间件:Redis 最新稳定版(二进制部署,开机自启)
  • 运行环境:JDK 21 LTS(Temurin 开源免费商用)
  • Web服务:Nginx 源码编译(支持SSL、反向代理、静态资源)
  • 项目架构:Vue前端 + SpringBoot后端 前后端分离
  • 自动化能力:每日凌晨2点自动将正式库同步覆盖演示库

二、MySQL 8.4.10 部署(关键:忽略表名大小写)

1. 核心特性

初始化强制开启:lower_case_table_names=1,彻底忽略表名大小写,解决Linux大小写敏感问题。

2. 目录规范

  • 安装目录:/opt/software/mysql-8.4.10-linux-glibc2.28-x86_64
  • 数据目录:/data/mysql
  • 配置文件:/etc/my.cnf

3. my.cnf 核心配置

必须初始化前配置,不可后期修改

bash 复制代码
[mysqld]
lower_case_table_names=1
user=mysql
port=3306
basedir=/opt/software/mysql-8.4.10-linux-glibc2.28-x86_64
datadir=/data/mysql
socket=/tmp/mysql.sock
pid-file=/data/mysql/ICOOLKJ.pid
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
log_error=/data/mysql/mysql-error.log
slow_query_log=1
long_query_time=2

4. 初始化与密码重置

初始化后通过 skip-grant-tables 免密重置 root 密码为自定义密码,保证可正常登录。

数据库库名规范

  • 正式业务库:icoolkj_platform
  • 演示测试库:icoolkj_platform_dev

三、Redis 中间件部署

1. 部署方式

采用 Linux 二进制/源码编译部署,配置密码、开机自启、后台常驻,适配 SpringBoot 项目缓存、登录会话、验证码缓存需求。

2. 基础环境依赖

bash 复制代码
yum install -y gcc gcc-c++ make

3. 安装目录规范

  • 安装目录:/usr/local/redis
  • 配置文件:/usr/local/redis/redis.conf
  • 数据持久化目录:/data/redis

4. 核心配置优化(生产可用)

修改 redis.conf 关键参数

bash 复制代码
# 后台运行
daemonize yes
# 绑定本机,安全加固
bind 127.0.0.1
# 关闭保护模式
protected-mode no
# 端口
port 6379
# 设置自定义密码
requirepass test
# 持久化开启
appendonly yes
# 数据目录
dir /data/redis

5. Systemd 开机自启配置

文件路径:/etc/systemd/system/redis.service

bash 复制代码
[Unit]
Description=Redis Service
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/redis/redis-server /usr/local/redis/redis.conf
ExecStop=/usr/local/redis/redis-cli -a test shutdown
Restart=on-failure

[Install]
WantedBy=multi-user.target

6. 服务管理命令

bash 复制代码
systemctl daemon-reload
systemctl start redis
systemctl enable redis
systemctl status redis

# 连接测试
redis-cli -a test

7. 项目适配说明

SpringBoot 项目默认配置连接本地 Redis,密码对应上述自定义密码,无需远程开放端口,安全可控。

四、JDK21 部署(Temurin 开源版)

1. 安装方式

采用清华镜像 JDK21 免编译压缩包,适配所有Linux系统,无版权风险。

2. 目录

/usr/local/jdk/jdk21

3. 环境变量 /etc/profile

bash 复制代码
# JDK21
export JAVA_HOME=/usr/local/jdk/jdk21
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib

生效命令:source /etc/profile

验证:java -version

五、Nginx 源码编译部署(支持SSL)

1. 编译模块

包含:ssl、gzip、status 监控模块

2. 目录规范

  • 安装目录:/usr/local/nginx
  • 站点配置:/usr/local/nginx/conf/vhost/
  • SSL证书目录:/usr/local/nginx/conf/ssl

3. systemd 开机自启

已配置 systemd 托管,支持 start/stop/restart/enable

六、前后端分离项目统一部署规范

1. 项目统一目录

/opt/project/

├── frontend # 前端dist打包静态资源

├── backend # SpringBoot jar包

└── logs # 项目日志

2. 后端 SpringBoot 部署

包名:icoolkj-admin-api-1.0.0-SNAPSHOT.jar

端口:8080

运行方式:systemd 常驻服务,开机自启、失败自动重启

依赖组件:MySQL8.4 + Redis

后端服务文件: /etc/systemd/system/icoolkj-admin-api.service

bash 复制代码
[Unit]
Description=icoolkj-admin-api Backend Service
After=network.target mysqld.service redis.service

[Service]
User=root
Environment="JAVA_HOME=/usr/local/jdk/jdk21"
WorkingDirectory=/opt/project/backend
ExecStart=/usr/local/jdk/jdk21/bin/java -Xms512m -Xmx1024m -jar icoolkj-admin-api-1.0.0-SNAPSHOT.jar
ExecStop=/bin/kill -15 $MAINPID
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

3. 前端部署

前端打包 dist 内所有文件直接放入:/opt/project/frontend

前端生产环境接口地址:VITE_API_URL=/api

七、Nginx 完整 HTTPS 生产配置(适配正式域名)

功能:80强制跳转443、SSL加密、Vue history路由、接口反向代理、静态缓存、跨域统一处理

绑定域名:platform.px.icoolkj.com

文件:/usr/local/nginx/conf/vhost/icoolkj.conf

bash 复制代码
# HTTP 强制跳转 HTTPS
server {
    listen 80 default_server;
    server_name platform.px.icoolkj.com;
    return 301 https://$host$request_uri;
}

# HTTPS 主站点
server {
    listen 443 ssl default_server;
    server_name platform.px.icoolkj.com;

    ssl_certificate     /usr/local/nginx/conf/ssl/platform.icoolkj.com.crt;
    ssl_certificate_key /usr/local/nginx/conf/ssl/platform.icoolkj.com.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    root /opt/project/frontend;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }

    location /api/ {
        proxy_pass http://127.0.0.1:8080/api/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    client_max_body_size 20M;

    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
        expires 7d;
    }

    access_log /opt/project/logs/icoolkj-access.log;
    error_log /opt/project/logs/icoolkj-error.log;
}

主配置引入:nginx.conf http{} 内添加 include vhost/*.conf;

生效命令:nginx -t && nginx -s reload

八、演示环境自动同步方案(核心特色)

需求

每日凌晨 2:00 自动使用正式库 icoolkj_platform 完全覆盖演示库 icoolkj_platform_dev,保证演示环境永远是最新正式数据。

1. 自动同步脚本

路径:/opt/script/sync_platform_dev.sh

bash 复制代码
#!/bin/bash
# 数据库配置
DB_USER="root"
DB_PASS="你的MySQL密码"
DB_HOST="127.0.0.1"
DB_PROD="icoolkj_platform"
DB_DEV="icoolkj_platform_dev"

TMP_SQL="/opt/script/platform_prod_dump.sql"
LOG_FILE="/opt/script/sync_dev_log.log"
MYSQL_PATH="/opt/software/mysql-8.4.10-linux-glibc2.28-x86_64/bin"

echo "==================== $(date '+%Y-%m-%d %H:%M:%S') 开始同步 ====================" >> $LOG_FILE

# 导出正式库完整数据、存储过程、触发器
$MYSQL_PATH/mysqldump -u${DB_USER} -p${DB_PASS} -h${DB_HOST} -R --triggers --routines ${DB_PROD} > $TMP_SQL
if [ $? -ne 0 ];then
  echo "❌ 正式库导出失败" >> $LOG_FILE
  exit 1
fi

# 删除重建演示库
$MYSQL_PATH/mysql -u${DB_USER} -p${DB_PASS} -h${DB_HOST} << EOF
DROP DATABASE IF EXISTS ${DB_DEV};
CREATE DATABASE ${DB_DEV} DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
EOF

# 导入数据到演示库
$MYSQL_PATH/mysql -u${DB_USER} -p${DB_PASS} -h${DB_HOST} ${DB_DEV} < $TMP_SQL
if [ $? -eq 0 ];then
  echo "✅ 同步完成:${DB_PROD} 已覆盖 ${DB_DEV}" >> $LOG_FILE
else
  echo "❌ 导入dev库失败" >> $LOG_FILE
fi

2. 授权与测试

bash 复制代码
chmod +x /opt/script/sync_platform_dev.sh
bash /opt/script/sync_platform_dev.sh

3. 定时任务 crontab

crontab -e

bash 复制代码
0 2 * * * /opt/script/sync_platform_dev.sh

含义:每天凌晨 02:00 自动执行覆盖同步

九、防火墙/安全组放行端口

bash 复制代码
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --add-port=443/tcp --permanent
firewall-cmd --reload

云服务器安全组必须放行:80、443

内网端口:3306、6379 仅本地监听,无需对外开放,保障安全

十、项目访问地址

  • 后端接口:Nginx 自动代理 /api 请求至后端8080端口
  • 演示库机制:每日凌晨2点自动同步正式库全量数据

十一、日常维护命令汇总

1. 后端服务

bash 复制代码
systemctl start/stop/restart/status icoolkj-admin-api
journalctl -u icoolkj-admin-api -f

2. Nginx

bash 复制代码
nginx -t
nginx -s reload

3. Redis 服务

bash 复制代码
systemctl start/stop/restart/status redis
redis-cli -a test

4. 数据库同步日志查看

bash 复制代码
tail -f /opt/script/sync_dev_log.log

十二、常见问题总结

  • Nginx显示默认页面:缺少 default_server、server_name 不匹配、未引入vhost配置
  • 接口404:proxy_pass 斜杠配置错误、后端服务端口不一致
  • 502异常:后端jar服务未启动、端口未监听
  • 脚本执行二进制错误:Windows换行符导致,执行 dos2unix 修复脚本格式
  • MySQL同步报错:mysqldump 参数顺序错误、数据库密码配置错误
  • 项目缓存/登录异常:Redis未启动、密码配置不匹配

十三、全套软件官方/高速下载地址(本次部署对应版本)

1. Nginx 1.26.2(稳定版源码)

官网下载页:https://nginx.org/en/download.html

一键wget下载:

bash 复制代码
wget https://nginx.org/download/nginx-1.26.2.tar.gz

2. JDK21 Temurin(开源免费商用、清华镜像高速)

镜像下载页:Index of /Adoptium/21/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

本次部署对应版本一键下载:

bash 复制代码
wget https://mirrors.tuna.tsinghua.edu.cn/Adoptium/21/jdk/x64/linux/OpenJDK21U-jdk_x64_linux_hotspot_21.0.11_9.tar.gz

3. MySQL 8.4.10(glibc2.28 x86_64 官方二进制包)

官方下载页:https://dev.mysql.com/downloads/mysql/8.4.html

4. Redis 稳定版(官方源码)

官网:https://redis.io/

所有稳定版本:https://download.redis.io/releases/

5. HTTPS 免费证书申请工具 acme.sh

项目地址:https://github.com/acmesh-official/acme.sh

一键安装:

bash 复制代码
curl https://get.acme.sh | sh
相关推荐
数行拙笔2 小时前
Redis---set类型
数据库·redis·缓存
William Dawson2 小时前
【国产化改造实战|Spring Boot对接华为云MRS Redis Kerberos认证终极踩坑指南】
spring boot·redis·华为云
宠友信息4 小时前
从重复请求到订单同步看内容社区源码的处理思路
java·spring boot·redis·后端·mysql·spring
2501_9151063217 小时前
TraceEagle 代理抓包教程 本机和手机的 HTTPS 抓包方法
网络协议·计算机网络·网络安全·ios·adb·https·udp
tellmewhoisi18 小时前
多版本共用redis的token有效期校验(过期重新登录)
java·redis·缓存
Wzx19801219 小时前
Redis&ES——Retriever的抽象实现
数据库·人工智能·redis·elasticsearch
吴声子夜歌20 小时前
Redis 3.x——哨兵API
redis·sentinel
白驹过隙不负青春1 天前
OpenResty 1.29.2.5 部署 + Nginx平滑升级运维文档
nginx·openresty
TlSfoward1 天前
TLSFOWARD抓包工具 TLS指纹
网络协议·http·百度·https