linux运维-KylinV10的aarch64架构-docker微服务运维部署(全篇)

全文目录,一步到位

  • 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的源码安装(单))
    • [4.1 部署文档网页地址与下载地址](#4.1 部署文档网页地址与下载地址)
    • [4.2 启动脚本 start.sh (AI生成)-测试可用](#4.2 启动脚本 start.sh (AI生成)-测试可用)
    • [4.3 关闭脚本 stop.sh (AI生成)](#4.3 关闭脚本 stop.sh (AI生成))
  • [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

核心解释

    1. 核心兼容:默认认证插件改为mysql_native_password(适配MySQL 5)
    1. 兼容:关闭MySQL 8严格SQL模式,匹配MySQL 5默认行为
    1. 字符集兼容:统一为utf8mb4(向下兼容MySQL 5的utf8,支持emoji)
    1. 额外兼容配置
    • 表名不区分大小写(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的源码安装(单)

csdn下载地址:

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 感谢观看

相关推荐
前方一片光明2 小时前
Linux——麒麟v10国产化系统升级openssh到10.0版本全过程
linux·运维·服务器
Trouvaille ~2 小时前
【Linux】Linux线程概念与控制(四):glibc源码剖析与实现原理
linux·运维·服务器·c++·操作系统·glibc·线程控制
YuTaoShao2 小时前
【LeetCode 每日一题】3602. 十六进制和三十六进制转化——(解法二)手写进制转换
linux·python·leetcode
上海运维Q先生2 小时前
[漏洞修复]openssh-9.9p2 漏洞升级修复补丁
linux·运维·服务器
skywalk81632 小时前
clonos web界面使用cbsd创建一个bhyve ubuntu server虚拟机(未成功)
linux·运维·服务器·freebsd
allen sue2 小时前
Moltbot(Clawdbot)
人工智能·docker
程序猿编码2 小时前
深入浅出Linux内核级防火墙:IP/端口黑白名单的高性能实现
linux·c语言·c++·tcp/ip·内核
RisunJan2 小时前
Linux命令-lnstat(显示 Linux 网络统计信息)
linux·运维·网络
嵌入式郑工2 小时前
# RK3576 平台 RTC 时钟调试全过程
linux·驱动开发·ubuntu