全文目录,一步到位
- 1.前言简介
-
- [1.1 安装docker](#1.1 安装docker)
-
- [1.1.1 下载docker二进制编译版本](#1.1.1 下载docker二进制编译版本)
- [1.1.2 docker安装方式](#1.1.2 docker安装方式)
-
- [=> 1.1.2.1 解压](#=> 1.1.2.1 解压)
- [=> 1.1.2.2 创建service服务](#=> 1.1.2.2 创建service服务)
- [=> 1.1.2.3 开启docker服务](#=> 1.1.2.3 开启docker服务)
- [=> 1.1.2.4 设置daemon.json镜像库,包含离线镜像包](#=> 1.1.2.4 设置daemon.json镜像库,包含离线镜像包)
- [2. mysql8魔改成mysql5 兼容老项目](#2. mysql8魔改成mysql5 兼容老项目)
-
- [2.1 配置一套全新mysql5](#2.1 配置一套全新mysql5)
-
- [2.1.1 创建新的挂载目录](#2.1.1 创建新的挂载目录)
- [2.1.2 设置my.cnf文件](#2.1.2 设置my.cnf文件)
- [2.2 创建并启动mysql容器](#2.2 创建并启动mysql容器)
-
- [2.2.1 docker启动指令](#2.2.1 docker启动指令)
- [2.2.2 检查一下docker启动情况](#2.2.2 检查一下docker启动情况)
- [2.3 数据库层面测试兼容mysql5情况](#2.3 数据库层面测试兼容mysql5情况)
-
- [2.3.1 sql命令验证表格(第一步)](#2.3.1 sql命令验证表格(第一步))
- [2.3.2 sql表创建测试验证(第二步)](#2.3.2 sql表创建测试验证(第二步))
- [2.3.3 sql语句测试验证(第三步)](#2.3.3 sql语句测试验证(第三步))
- [3. nginx代理前端多个项目](#3. nginx代理前端多个项目)
-
- [3.0 业务场景](#3.0 业务场景)
- [3.1 docker安装nginx的地址如下:](#3.1 docker安装nginx的地址如下:)
- [3.2 nginx.conf 示例-docker版本的 不是改路径即可](#3.2 nginx.conf 示例-docker版本的 不是改路径即可)
- [3.3 注意事项](#3.3 注意事项)
- [4. rocketmq的源码安装(单)](#4. rocketmq的源码安装(单))
- [5. jdk的环境安装](#5. jdk的环境安装)
1.前言简介

这个架构吧 说实话 不太好用, 之前一直用x86的, 从docker的安装 到docker pull镜像, 到java环境安装 都是困难重重, 我会把用到的镜像 服务等 都放在网盘和csdn 供给大家离线使用\], docker compose这服务器架构的就算了 ***---来自一个 被`赶鸭子上架`的开发运维---*** > 部署服务如下 > > * docker > * mysql8 > * mysql5 > * redis6 > * rocketmq > * minio > * nginx ### 1.1 安装docker [麒麟官网文档地址:](https://document.kylinos.cn/document/documentDetaile?id=356&type=1&selectId=2296) yum下载了半天, 下不了 apt压根也用不了, 最后选择的二进制编译 \[ps: 如果有yum下载方式 欢迎指导
1.1.1 下载docker二进制编译版本
查看官网文档
下载地址一: 阿里云镜像站
下载地址二: docker地址

bash
mkdir -p /usr/local/src/docker/base
cd /usr/local/src/docker/base
wget http://mirrors.aliyun.com/docker-ce/linux/static/stable/aarch64/docker-26.1.4.tgz
1.1.2 docker安装方式
=> 1.1.2.1 解压
bash
tar -zxvf docker-26.1.4.tgz
mv docker/* /usr/bin/
=> 1.1.2.2 创建service服务
bash
vim /usr/lib/systemd/system/docker.service
bash
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
=> 1.1.2.3 开启docker服务
bash
添加权限:chmod +x /usr/lib/systemd/system/docker.service
服务重载:systemctl daemon-reload
启动docker:systemctl start docker
开机自启动:systemctl enable docker
这个我搜其他文章的时候看到的
-- 安装完发现docker提示没有权限:
OCI runtime create failed:container_linux.go:318:starting container process
bash
yum remove podman -y
=> 1.1.2.4 设置daemon.json镜像库,包含离线镜像包
这个架构的镜像太稀有了
如果需要常规的镜像 请看链接 下载即可
然后docker load -i 即可成功 2.2个g的镜像
我用夸克网盘分享了「docker_images.tar」,点击链接即可保存
链接:https://pan.quark.cn/s/d8d24a0bf689
提取码:hLyR
- redis 6
- mysql:8
- nginx:latest
- minio
- open-jdk:8
我在网上搜了一些镜像仓库地址, 实在用不了,就用docker load吧
bash
https://docker.1ms.run
https://docker.kejilion.pro
https://docker-registry.nmqu.com
https://docker.xuanyuan.me
https://dockerproxy.net
https://hub.rat.dev
https://hub1.nat.tf
https://hub2.nat.tf
https://hub3.nat.tf
https://hub4.nat.tf
https://mirror.iscas.ac.cn
https://docker-0.unsee.tech
https://docker.apiba.cn
https://docker.m.daocloud.io
https://docker.hpcloud.cloud
bash
systemctl restart docker
2. mysql8魔改成mysql5 兼容老项目
2.1 配置一套全新mysql5
2.1.1 创建新的挂载目录
mkdir -p /usr/local/src/docker/mysql5/conf/conf.d
cd /usr/local/src/docker/mysql5/conf/conf.d
2.1.2 设置my.cnf文件
vim my.cnf核心解释
- 核心兼容:默认认证插件改为mysql_native_password(适配MySQL 5)
- 兼容:关闭MySQL 8严格SQL模式,匹配MySQL 5默认行为
- 字符集兼容:统一为utf8mb4(向下兼容MySQL 5的utf8,支持emoji)
- 额外兼容配置
- 表名不区分大小写(MySQL 5默认配置,Linux下MySQL 8默认区分)
- 关闭域名解析,提升连接速度
- 匹配MySQL 5默认数据包大小
bash
[mysqld]
default_authentication_plugin=mysql_native_password
sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
lower_case_table_names=1
skip-name-resolve
max_allowed_packet=16M
2.2 创建并启动mysql容器
2.2.1 docker启动指令
端口开放53306
python
docker run -p 53306:3306 --name mysql5 \
-v /usr/local/src/docker/mysql5/logs:/var/log/mysql \
-v /usr/local/src/docker/mysql5/data:/var/lib/mysql \
-v /usr/local/src/docker/mysql5/mysql-files:/var/lib/mysql-files \
-v /usr/local/src/docker/mysql5/conf:/etc/mysql \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:8.0
2.2.2 检查一下docker启动情况
docker的基础操作
python
docker ps -a
docker logs -f mysql5
2.3 数据库层面测试兼容mysql5情况
2.3.1 sql命令验证表格(第一步)
| 验证项 | SQL 命令 | 预期结果(兼容 MySQL 5 标志) |
|---|---|---|
| 默认认证插件 | SHOW VARIABLES LIKE 'default_authentication_plugin'; |
Value 为mysql_native_password |
| SQL 模式(无严格模式) | SHOW VARIABLES LIKE 'sql_mode'; |
Value 为STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION(无严格模式选项) |
| 表名大小写不敏感 | SHOW VARIABLES LIKE 'lower_case_table_names'; |
Value 为1 |
| 字符集(向下兼容) | SHOW VARIABLES LIKE 'character_set_server'; |
Value 为utf8mb4 |
| 数据包大小 | SHOW VARIABLES LIKE 'max_allowed_packet'; |
Value 为16777216(即 16M,匹配 MySQL 5 默认值) |
2.3.2 sql表创建测试验证(第二步)
验证 MySQL 8 是否支持 MySQL 5 的书写风格,无语法报错
sql
-- 1. 创建模拟Ruoyi的数据库(大小写混合,验证lower_case_table_names=1)
CREATE DATABASE IF NOT EXISTS RuoYiTest DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-- 2. 切换到该数据库
USE RuoYiTest;
-- 3. 创建MySQL 5风格的数据表(混合大小写表名、InnoDB引擎、日期字段、自增主键)
CREATE TABLE IF NOT EXISTS Sys_User_Test (
id INT(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
user_name VARCHAR(50) NOT NULL COMMENT '用户名',
create_time DATETIME DEFAULT '2024-01-01 00:00:00' COMMENT '创建时间',
update_time DATETIME DEFAULT NULL COMMENT '更新时间',
status TINYINT(1) DEFAULT 0 COMMENT '状态(0正常,1禁用)',
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户测试表';
无语法报错,提示Query OK, 0 rows affected (0.0x sec)。
执行SHOW TABLES;,可看到表名被统一转为小写(sys_user_test),说明大小写不敏感配置生效(匹配 MySQL 5 行为)。
2.3.3 sql语句测试验证(第三步)
最好分步测试 没看见报错 并且执行成功 则正常
sql
-- 1. 插入正常数据
INSERT INTO Sys_User_Test (user_name, create_time, status)
VALUES ('admin_test', NOW(), 0);
-- 2. 插入MySQL 5风格零值日期(严格模式下会报错,兼容配置下应成功)
INSERT INTO Sys_User_Test (user_name, create_time, status)
VALUES ('test_zero_date', '0000-00-00 00:00:00', 1);
-- 3. 省略可选字段插入(依赖字段默认值)
INSERT INTO Sys_User_Test (user_name) VALUES ('test_omit_field');
-- 按状态分组,查询每组的第一条用户名(MySQL 5风格,无完整GROUP BY)
SELECT status, user_name FROM Sys_User_Test GROUP BY status;
-- 查看ruoyi用户的认证插件(确保为mysql_native_password)
-- lugin字段值为mysql_native_password,而非caching_sha2_password,确保旧版 JDBC 驱动可连接。
SELECT user, host, plugin FROM mysql.user WHERE user = 'root';
-- 更新数据(MySQL 5风格,使用单引号包裹数字字段,兼容)
UPDATE Sys_User_Test SET status='0' WHERE user_name = 'test_omit_field';
-- 删除数据(条件匹配,兼容)
DELETE FROM Sys_User_Test WHERE user_name = 'test_zero_date';
3. nginx代理前端多个项目
3.0 业务场景
只有一个https的域名
多个前端项目 多个后端项目
3.1 docker安装nginx的地址如下:
===> docker安装nginx支持ssl 实现https访问
3.2 nginx.conf 示例-docker版本的 不是改路径即可
bash
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
# pzy 里面路径不可轻易修改, 容器化部署 目录挂载 , 配置文件必须是容器路径 修改则修改宿主机文件信息即可
# 不明白可以看看docker基本操作, 如需要更改路径 需要重新创建容器,
# 具体可查看我的CSDN 里面有说明: pingzhuyan
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
include /etc/nginx/default.d/*.conf;
server {
listen 80;
#填写绑定证书的域名
server_name test.aaa.com;
#把http的域名请求转成https,相当于用户访问http也可以自动跳转到https,避免出现网页提示不安全
return 301 https://$host$request_uri;
#return 301 https://$host:9000$request_uri;
}
server {
listen 443 ssl;
server_name test.aaa.com;
#证书文件名称
ssl_certificate_key /etc/nginx/ssl/test.aaa.com.key;
#私钥文件名称 .crt和.pem都可以用
ssl_certificate /etc/nginx/ssl/test.aaa.com.pem;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
root /usr/share/nginx/html/his2;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
location /cloud {
add_header Cache-Control 'no-cache, must-revalidate, proxy-revalidate, max-age=0';
root /usr/share/nginx/html;
index index.html index.htm;
#autoindex on;
try_files $uri $uri/ /jdVcloud/index.html;
}
location /prod-api/ {
proxy_set_header Host 192.168.0.118;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://192.168.0.118:8082/;
client_max_body_size 100m;
}
location /prod-api-jd/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://192.168.0.118:8080/;
client_max_body_size 100m;
}
location /resource/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://192.168.0.64:9001/;
client_max_body_size 500m;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
3.3 注意事项
注意 前端路由 例如/cloud 地址 前端也需要对应这个路径 , 接口打扮对应上prod-api那 不然nginx会报错的
4. rocketmq的源码安装(单)
4.1 部署文档网页地址与下载地址
部署文档
https://blog.csdn.net/m0_49353216/article/details/155452686
https://cloud.tencent.com/developer/article/1894233
https://cloud.tencent.com/developer/article/2448817
官方文档地址: https://rocketmq.apache.org/zh/docs/deploymentOperations/01deploy
官方包下载地址 - 下载地址都是一个 巨慢
标准页面 => 网页地址
页面古老 => 网页地址
4.2 启动脚本 start.sh (AI生成)-测试可用
bash
#!/bin/bash
# RocketMQ启动脚本 - start.sh
# 定义RocketMQ安装根目录
ROCKETMQ_DIR="/usr/local/src/docker/rocketmq/rocketmq5.1.4/"
# 定义超时时间(秒)和检查间隔(秒)
MAX_WAIT=60
WAIT_INTERVAL=2
# 第一步:切换到RocketMQ目录
echo "【步骤1】进入RocketMQ安装目录: $ROCKETMQ_DIR"
cd "$ROCKETMQ_DIR" || {
echo "错误:切换目录失败,请检查目录是否存在!"
exit 1
}
# 第二步:启动NameServer
echo -e "\n【步骤2】启动NameServer..."
# 重定向日志到namesrv.log,避免nohup.out杂乱
nohup sh bin/mqnamesrv > namesrv.log 2>&1 &
# 等待NameServer启动成功(检查9876端口是否被监听)
elapsed=0
while ! netstat -tulpn 2>/dev/null | grep -q ":9876 "; do
echo "等待NameServer启动,已等待 $elapsed 秒..."
sleep $WAIT_INTERVAL
elapsed=$((elapsed + WAIT_INTERVAL))
if [ $elapsed -ge $MAX_WAIT ]; then
echo "错误:NameServer启动超时($MAX_WAIT 秒),请检查日志!"
exit 1
fi
done
echo "✅ NameServer启动成功!"
# 第三步:启动Broker
echo -e "\n【步骤3】启动Broker..."
nohup sh bin/mqbroker -n localhost:9876 > broker.log 2>&1 &
# 等待Broker启动成功(检查mqbroker进程是否存在)
elapsed=0
while ! ps aux 2>/dev/null | grep -v grep | grep -q "mqbroker"; do
echo "等待Broker启动,已等待 $elapsed 秒..."
sleep $WAIT_INTERVAL
elapsed=$((elapsed + WAIT_INTERVAL))
if [ $elapsed -ge $MAX_WAIT ]; then
echo "错误:Broker启动超时($MAX_WAIT 秒),请检查日志!"
exit 1
fi
done
echo "✅ Broker启动成功!"
# 最终提示
echo -e "\n========================"
echo "🎉 RocketMQ 5.1.4 全部启动成功!"
echo "========================"
4.3 关闭脚本 stop.sh (AI生成)
bash
#!/bin/bash
# RocketMQ停止脚本 - stop.sh
# 定义RocketMQ安装根目录
ROCKETMQ_DIR="/usr/local/src/docker/rocketmq/rocketmq5.1.4/"
# 定义超时时间(秒)和检查间隔(秒)
MAX_WAIT=30
WAIT_INTERVAL=2
# 第一步:切换到RocketMQ目录
echo "【步骤1】进入RocketMQ安装目录: $ROCKETMQ_DIR"
cd "$ROCKETMQ_DIR" || {
echo "错误:切换目录失败,请检查目录是否存在!"
exit 1
}
# 第二步:停止Broker
echo -e "\n【步骤2】停止Broker..."
sh bin/mqshutdown broker
# 等待Broker停止成功(检查mqbroker进程是否消失)
elapsed=0
while ps aux 2>/dev/null | grep -v grep | grep -q "mqbroker"; do
echo "等待Broker停止,已等待 $elapsed 秒..."
sleep $WAIT_INTERVAL
elapsed=$((elapsed + WAIT_INTERVAL))
if [ $elapsed -ge $MAX_WAIT ]; then
echo "警告:Broker停止超时,强制结束进程!"
pkill -9 mqbroker
break
fi
done
echo "✅ Broker停止成功!"
# 第三步:停止NameServer
echo -e "\n【步骤3】停止NameServer..."
sh bin/mqshutdown namesrv
# 等待NameServer停止成功(检查mqnamesrv进程是否消失)
elapsed=0
while ps aux 2>/dev/null | grep -v grep | grep -q "mqnamesrv"; do
echo "等待NameServer停止,已等待 $elapsed 秒..."
sleep $WAIT_INTERVAL
elapsed=$((elapsed + WAIT_INTERVAL))
if [ $elapsed -ge $MAX_WAIT ]; then
echo "警告:NameServer停止超时,强制结束进程!"
pkill -9 mqnamesrv
break
fi
done
echo "✅ NameServer停止成功!"
# 最终提示
echo -e "\n========================"
echo "🎉 RocketMQ 5.1.4 全部停止成功!"
echo "========================"
5. jdk的环境安装

oracle官网下载地址:https://www.oracle.com/java/technologies/downloads/#java8
csdn下载地址:https://download.csdn.net/download/pingzhuyan/92606385
然后执行的操作是: (
注意改名和存放地址)
bash
#安装jdk
cd /usr/local/src
tar -xvf jdk-8u51-linux-x64.tar.gz
vim /etc/profile
#设定jdk环境
export JAVA_HOME=/usr/local/src/jdk1.8
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib
#让环境变量生效:
source /etc/profile
作者pingzhuyan 感谢观看