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
相关推荐
半个落月15 小时前
Next.js 16 笔记应用实战:Redis 数据链路与组件两版拆分详解
前端·redis·next.js
烬羽16 小时前
Dockerfile 是"做奶茶的配方"?用 todos 全栈项目看懂 Docker 构建与发布
nginx·docker·nestjs
2501_9160074716 小时前
免费抓包工具 Windows 和 Mac 怎么选?根据平台来选择工具
网络协议·计算机网络·网络安全·ios·adb·https·udp
一条泥憨鱼16 小时前
【从0开始学习计算机网络】| DNS 污染、劫持与 CDN:你的网页是怎么被“掉包“的
学习·计算机网络·安全·http·https·dns
meilindehuzi_a16 小时前
从浏览器输入 URL 到页面显示:DNS、Nginx、后端与 CDN 全链路解析
运维·nginx
家有娇妻张兔兔16 小时前
Redis 报错 “MISCONF Redis is configured to save RDB snapshots“?一文讲透根因与根除方案
数据库·redis·故障排查·misconf
一嘴一个橘子17 小时前
SpringDataRedis 操作 redis
java·redis
NGINX开源社区17 小时前
使用 F5 NGINX Gateway Fabric 实现 AI 交付标准化
nginx·gateway·fabric
敲上瘾18 小时前
Redis持久化存储机制:从RDB到AOF再到混合持久化的配置与实践
linux·数据库·redis·缓存
草根站起来18 小时前
将网站改成HTTPS需要几步?
网络协议·http·https