当前位置: 首页 > news >正文

【NFTurbo】基于DockerCompose一键部署

基于DockerCompose一键部署

  • 1. 安装Docker与Dokcer Compose
  • 2. 配置Docker
  • 3. 安装docker-compose
  • 4. 配置镜像源
  • 5. 安装脚本
    • 5.1 打印脚本说明
    • 5.2 获取公网IP地址
    • 5.3 手动输入公网IP(如果无法自动获取)
    • 5.4 替换配置文件中的 IP 地址
    • 5.5 检查 Docker 是否正在运行
    • 5.6 清理旧数据(可选)
    • 5.7 启动 MySQL 和 Redis 服务
    • 5.8 等待 MySQL 和 Redis 启动
    • 5.9 查询所有服务
    • 5.10 查询所有端口的占用
    • 5.11 查看某个端口是否被占用

1. 安装Docker与Dokcer Compose

这里我的服务器使用的是CentOS7.6

[root@iv-ye20h65dz45i3z346rvs /]#  lsb_release -a
LSB Version:    :core-4.1-amd64:core-4.1-noarch # 表示当前系统支持的 LSB(Linux Standard Base)版本是 4.1,适用于 amd64(64 位架构)和 noarch(与架构无关的)系统。
Distributor ID: CentOS # Linux 发行版是 CentOS。
Description:    CentOS Linux release 7.6.1810 (Core) #CentOS 版本是 7.6.1810,且是“Core”版本,即没有附带图形界面的服务器版。
Release:        7.6.1810 # 显示了 CentOS 版本的具体号。
Codename:       Core  # 这是CentOS的代号,表明该版本为核心版本,没有图形界面。

lsb_release -a 命令用于显示 Linux 系统的详细版本信息。具体来说,执行这个命令会输出以下信息:

  • Distributor ID: 发行版的名称(例如 Ubuntu、CentOS、Debian)。
  • Description: 发行版的简短描述,包括版本信息。
  • Release: 发行版的版本号。
  • Codename: 发行版的代号(例如 Ubuntu 的 20.04 版本代号为 Focal Fossa)。

不同系统安装Dokcer的方法
https://help.aliyun.com/zh/ecs/use-cases/install-and-use-docker#940c78642dmq9

2. 配置Docker

运行以下命令,下载docker-ce的yum源

sudo wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

在这里插入图片描述

运行以下命令,安装Docker

sudo yum -y install docker-ce

在这里插入图片描述

执行以下命令,检查Docker是否安装成功

sudo docker -v

在这里插入图片描述

执行以下命令,启动Docker服务,并设置开机自启动。

sudo systemctl start docker
sudo systemctl enable docker

执行以下命令,查看Docker是否启动。
在这里插入图片描述

3. 安装docker-compose

运行以下命令,安装setuptools。

sudo pip3 install -U pip setuptools

运行以下命令,安装docker-compose。

sudo pip3 install docker-compose

运行以下命令,验证docker-compose是否安装成功。

docker-compose --version

如果回显返回docker-compose版本信息,表示docker-compose已安装成功。
在这里插入图片描述

4. 配置镜像源

{"registry-mirrors": ["https://docker.anyhub.us.kg/","https://hub.uuuadc.top/","https://dockerhub.jobcher.com/","https://dockerhub.icu/","https://docker.ckyl.me/","https://docker.awsl9527.cn/","https://q7ta64ip.mirror.aliyuncs.com","https://hx983jf6.mirror.aliyuncs.com","https://docker.mirrors.ustc.edu.cn","https://hub-mirror.c.163.com","https://docker.m.daocloud.io","https://mirror.baidubce.com","https://docker.nju.edu.cn","https://jockerhub.com","https://dockerhub.azk8s.cn","https://dockerproxy.com","https://mirror.baidubce.com","https://docker.nju.edu.cn","https://mirror.iscas.ac.cn","https://dockerpull.org","https://docker.1panel.dev","https://docker.fxxk.dedyn.io","https://docker.xn--6oq72ry9d5zx.cn","https://docker.zhai.cm","https://docker.5z5f.com","https://a.ussh.net","https://docker.cloudlayer.icu","https://hub.littlediary.cn","https://hub.crdz.gq","https://docker.unsee.tech","https://docker.kejilion.pro","https://registry.dockermirror.com","https://hub.rat.dev","https://dhub.kubesre.xyz","https://docker.nastool.de","https://docker.udayun.com","https://docker.rainbond.cc","https://hub.geekery.cn","https://docker.1panelproxy.com","https://atomhub.openatom.cn","https://docker.m.daocloud.io"]
}
# 使配置生效
systemctl daemon-reload# 重启Docker
systemctl restart docker

5. 安装脚本

#!/bin/bashecho "=========================================="
echo "NFTurbo 环境核心依赖(MySQL、Redis、Nacos、XXL-JOB、RocketMQ、Seata)一键启动脚本"
echo "=========================================="# 获取公网IP地址
echo "🔍 正在获取公网IP地址..."
PUBLIC_IP=""# 尝试多个公网IP获取服务
for service in "ifconfig.me" "icanhazip.com" "ipinfo.io/ip" "ipecho.net/plain"; doecho "尝试从 $service 获取IP..."PUBLIC_IP=$(curl -s --connect-timeout 5 --max-time 10 "$service" 2>/dev/null | tr -d '\n\r')if [[ -n "$PUBLIC_IP" && "$PUBLIC_IP" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; thenecho "✅ 成功获取公网IP: $PUBLIC_IP"breakfi
done# 如果无法获取公网IP,让用户手动输入
if [[ -z "$PUBLIC_IP" || ! "$PUBLIC_IP" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; thenecho "❌ 无法自动获取公网IP"echo "请手动输入您的服务器公网IP地址:"read -p "请输入IP地址: " PUBLIC_IP# 验证IP地址格式while [[ ! "$PUBLIC_IP" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; doecho "❌ IP地址格式不正确,请重新输入:"read -p "请输入IP地址: " PUBLIC_IPdone
fiecho "🎯 使用IP地址: $PUBLIC_IP"# 替换配置文件中的占位符
echo "🔧 更新配置文件中的IP地址..."# 替换docker-compose.yml中的占位符
sed -i.bak "s/{{PUBLIC_IP}}/$PUBLIC_IP/g" docker-compose.yml# 替换RocketMQ broker配置中的占位符
sed -i.bak "s/{{PUBLIC_IP}}/$PUBLIC_IP/g" rocketMQ/data/broker/conf/broker.conf# 替换MySQL初始化脚本中的占位符
sed -i.bak "s/{{PUBLIC_IP}}/$PUBLIC_IP/g" mysql/init/01-nacos-mysql.sqlecho "✅ IP地址更新完成"# 检查Docker是否运行
if ! docker info > /dev/null 2>&1; thenecho "❌ Docker未运行,请先启动Docker"exit 1
fiecho "✅ Docker运行正常"# 清理旧数据(可选)
read -p "是否清理旧数据?(y/n): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; thenecho "清理旧数据..."sudo rm -rf mysql/data/* redis/data/* es/data/*echo "✅ 数据清理完成"
fi# 启动MySQL和Redis
echo "🚀 启动MySQL和Redis..."
docker compose up -d mysql redis# 等待MySQL启动
echo "⏳ 等待MySQL启动..."
sleep 10# 检查MySQL是否健康
echo "🔍 检查MySQL健康状态..."
for i in {1..30}; doif docker compose exec mysql mysqladmin ping -h localhost --silent; thenecho "✅ MySQL启动成功"breakfiecho "⏳ 等待MySQL启动... ($i/30)"sleep 10
done# 检查Redis是否健康
echo "🔍 检查Redis健康状态..."
for i in {1..10}; doif docker compose exec redis redis-cli ping > /dev/null 2>&1; thenecho "✅ Redis连接正常"breakfiif [ $i -eq 10 ]; thenecho "❌ Redis连接失败,请检查Redis服务状态"exit 1fiecho "⏳ 等待Redis连接... ($i/10)"sleep 2
done# 初始化Redis数据
echo "🔧 初始化Redis数据..."
./init-redis-data.sh# 启动Nacos
echo "🚀 启动Nacos..."
docker compose up -d nacos# 等待Nacos启动
echo "⏳ 等待Nacos启动..."
sleep 10# 启动其他服务
echo "🚀 启动其他服务..."
docker compose up -d# 等待服务启动z
echo "⏳ 等待服务启动..."
sleep 10echo "=========================================="
echo "🎉 所有服务启动完成!"
echo "=========================================="
echo "服务访问地址:"
echo "MySQL: http://ip:3306 (用户名/密码: nfturbo/NFTurbo666)"
echo "Redis: http://ip:6379 (密码: NFTurbo666)"
echo "Nacos: http://ip:8848/nacos (用户名/密码: nacos/nacos)"
echo "XXL-Job: http://ip8082/xxl-job-admin (用户名/密码: admin/123456)"
echo "RocketMQ Dashboard: http://ip:8080"
echo "=========================================="# 显示服务状态
echo "📊 服务状态:"
docker compose ps 

5.1 打印脚本说明

echo "=========================================="
echo "NFTurbo 环境核心依赖(MySQL、Redis、Nacos、XXL-JOB、RocketMQ、Seata)一键启动脚本"
echo "=========================================="

5.2 获取公网IP地址

echo "🔍 正在获取公网IP地址..."
PUBLIC_IP=""
for service in "ifconfig.me" "icanhazip.com" "ipinfo.io/ip" "ipecho.net/plain"; doecho "尝试从 $service 获取IP..."PUBLIC_IP=$(curl -s --connect-timeout 5 --max-time 10 "$service" 2>/dev/null | tr -d '\n\r')if [[ -n "$PUBLIC_IP" && "$PUBLIC_IP" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; thenecho "✅ 成功获取公网IP: $PUBLIC_IP"breakfi
done

该部分代码尝试从多个公网 IP 服务获取机器的公网 IP 地址。如果获取成功,则输出 IP 地址并跳出循环。如果所有尝试都失败,脚本将提示用户手动输入 IP 地址。

5.3 手动输入公网IP(如果无法自动获取)

if [[ -z "$PUBLIC_IP" || ! "$PUBLIC_IP" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; thenecho "❌ 无法自动获取公网IP"echo "请手动输入您的服务器公网IP地址:"read -p "请输入IP地址: " PUBLIC_IPwhile [[ ! "$PUBLIC_IP" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; doecho "❌ IP地址格式不正确,请重新输入:"read -p "请输入IP地址: " PUBLIC_IPdone
fi

5.4 替换配置文件中的 IP 地址

echo "🔧 更新配置文件中的IP地址..."
sed -i.bak "s/{{PUBLIC_IP}}/$PUBLIC_IP/g" docker-compose.yml
sed -i.bak "s/{{PUBLIC_IP}}/$PUBLIC_IP/g" rocketMQ/data/broker/conf/broker.conf
sed -i.bak "s/{{PUBLIC_IP}}/$PUBLIC_IP/g" mysql/init/01-nacos-mysql.sql
echo "✅ IP地址更新完成"

脚本将替换多个配置文件中的占位符 {{PUBLIC_IP}} 为实际获取到的公网 IP 地址。使用 sed 命令进行替换,并备份原文件。

5.5 检查 Docker 是否正在运行

if ! docker info > /dev/null 2>&1; thenecho "❌ Docker未运行,请先启动Docker"exit 1
fi
echo "✅ Docker运行正常"

这段代码检查 Docker 是否已经启动。如果 Docker 没有运行,则提示用户启动 Docker。

5.6 清理旧数据(可选)

read -p "是否清理旧数据?(y/n): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; thenecho "清理旧数据..."sudo rm -rf mysql/data/* redis/data/* es/data/*echo "✅ 数据清理完成"
fi

此部分代码询问用户是否要清理旧的数据(如 MySQL、Redis、Elasticsearch 等服务的数据)。如果用户确认,脚本会删除相关目录中的数据文件。

5.7 启动 MySQL 和 Redis 服务

echo "🚀 启动MySQL和Redis..."
docker compose up -d mysql redis

5.8 等待 MySQL 和 Redis 启动

# 等待MySQL启动
echo "⏳ 等待MySQL启动..."
sleep 10
# 检查MySQL是否健康
echo "🔍 检查MySQL健康状态..."
for i in {1..30}; doif docker compose exec mysql mysqladmin ping -h localhost --silent; thenecho "✅ MySQL启动成功"breakfiecho "⏳ 等待MySQL启动... ($i/30)"sleep 10
done

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5.9 查询所有服务

在这里插入图片描述

[root@iv-ye20h65dz45i3z346rvs /]# docker ps
CONTAINER ID   IMAGE                                      COMMAND                  CREATED       STATUS                 PORTS                                                                                                                            NAMES
5601964e9cf4   apacherocketmq/rocketmq-dashboard:latest   "sh -c 'java $JAVA_O…"   3 hours ago   Up 3 hours             0.0.0.0:8080->8080/tcp, :::8080->8080/tcp                                                                                        rocketmq-dashboard
c2a92e11947b   apache/rocketmq:5.2.0                      "./docker-entrypoint…"   3 hours ago   Up 3 hours             0.0.0.0:10909->10909/tcp, :::10909->10909/tcp, 9876/tcp, 0.0.0.0:10911-10912->10911-10912/tcp, :::10911-10912->10911-10912/tcp   rmqbroker
aeb3770cc3c6   apache/rocketmq:5.2.0                      "./docker-entrypoint…"   3 hours ago   Up 3 hours             10909/tcp, 0.0.0.0:9876->9876/tcp, :::9876->9876/tcp, 10911-10912/tcp                                                            rmqnamesrv
799332d61cf4   xuxueli/xxl-job-admin:2.4.1                "sh -c 'java -jar $J…"   3 hours ago   Up 3 hours             0.0.0.0:8082->8080/tcp, 0.0.0.0:23333->8080/tcp, :::8082->8080/tcp, :::23333->8080/tcp                                           xxl-job
eb21af4b3950   seataio/seata-server:2.0.0                 "/bin/bash /seata-se…"   3 hours ago   Up 3 hours             0.0.0.0:7091->7091/tcp, :::7091->7091/tcp, 0.0.0.0:8091->8091/tcp, :::8091->8091/tcp                                             seata-server
b967618b3e82   nacos/nacos-server:v2.5.1                  "sh bin/docker-start…"   3 hours ago   Up 3 hours             0.0.0.0:8848->8848/tcp, :::8848->8848/tcp, 0.0.0.0:9848->9848/tcp, :::9848->9848/tcp                                             nacos
ddd1c89bf6f9   redis:latest                               "docker-entrypoint.s…"   3 hours ago   Up 3 hours             0.0.0.0:6379->6379/tcp, :::6379->6379/tcp                                                                                        redis
fa31290e7d98   mysql:8.4.1                                "docker-entrypoint.s…"   3 hours ago   Up 3 hours (healthy)   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp                                                                             mysql-8

🧾 每列字段含义

字段说明
CONTAINER ID容器的唯一 ID(短格式)
IMAGE容器所用的镜像名称
COMMAND容器启动时执行的命令
CREATED容器创建的时间
STATUS当前状态(Up 表示运行中)
PORTS端口映射(主机端口 -> 容器端口)
NAMES容器名称(你运行时指定的 or 自动生成)

5.10 查询所有端口的占用

[root@iv-ye20h65dz45i3z346rvs /]# netstat -tuln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:10912           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:23333           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:8848            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:8082            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:7091            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:9876            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:9848            0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:8091            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:10909           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:10911           0.0.0.0:*               LISTEN     
tcp6       0      0 :::10912                :::*                    LISTEN     
tcp6       0      0 :::23333                :::*                    LISTEN     
tcp6       0      0 :::3306                 :::*                    LISTEN     
tcp6       0      0 :::6379                 :::*                    LISTEN     
tcp6       0      0 :::8080                 :::*                    LISTEN     
tcp6       0      0 :::8848                 :::*                    LISTEN     
tcp6       0      0 :::8082                 :::*                    LISTEN     
tcp6       0      0 :::7091                 :::*                    LISTEN     
tcp6       0      0 :::9876                 :::*                    LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 :::9848                 :::*                    LISTEN     
tcp6       0      0 ::1:25                  :::*                    LISTEN     
tcp6       0      0 :::8091                 :::*                    LISTEN     
tcp6       0      0 :::10909                :::*                    LISTEN     
tcp6       0      0 :::10911                :::*                    LISTEN     
udp        0      0 0.0.0.0:68              0.0.0.0:*                          
udp        0      0 127.0.0.1:323           0.0.0.0:*                          
udp6       0      0 ::1:323                 :::*      

关键端口解释

字段含义说明
Proto协议类型(如 TCP、UDP、TCP6、UDP6)
Recv-Q接收队列(排队接收的数据字节数)
Send-Q发送队列(排队发送的数据字节数)
Local Address本地监听的 IP:端口
Foreign Address对端地址(监听时一般为 *,表示任何客户端)
State状态,LISTEN 表示正在监听(TCP 特有)
端口协议含义
8080TCP常见 Web 服务端口,Spring Boot / Tomcat 默认端口
3306TCPMySQL 数据库
6379TCPRedis 默认端口
8848TCPNacos 默认端口
9876TCPRocketMQ NameServer
10911, 10909, 10912TCPRocketMQ Broker 相关端口
68UDPDHCP 客户端
323UDPNTP 服务用于时间同步
25TCP本地邮件传输协议(SMTP)监听 localhost
22TCPSSH 登录服务
8091, 8082, 7091, 23333TCP自定义服务端口(例如 Java 项目、微服务、监控面板等)
netstat -tuln
  • -t:显示 TCP 连接。
  • -u:显示 UDP 连接。
  • -l:只显示在监听状态的端口。
  • -n:显示数字格式的地址和端口(避免进行 DNS 查找)。

5.11 查看某个端口是否被占用

netstat -tuln | grep :8080
[root@iv-ye20h65dz45i3z346rvs /]# netstat -tuln | grep :8080
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN     
tcp6       0      0 :::8080                 :::*                    LISTEN   

逐字段解释

字段含义说明
tcp / tcp6表示该端口使用的是 TCP 协议(tcp6 表示支持 IPv6)
0 0当前连接的接收/发送队列长度(都为 0 表示无等待连接)
0.0.0.0:8080监听 IPv4 上的所有网卡地址的 8080 端口
:::8080监听 IPv6 上的所有网卡地址的 8080 端口
0.0.0.0:*:::*允许来自任意地址、任意端口的连接请求
LISTEN表示当前处于监听状态(服务已启动,正在等待客户端连接)

说明总结:
✅ 当前系统上有服务(你的 Java 项目)在 监听 8080 端口。
✅ 使用的是 TCP 协议(见首列是 tcp 和 tcp6)。
✅ 监听地址为 0.0.0.0 和 ::(IPv6),表示接受来自任何 IP 的请求。

http://www.dtcms.com/a/322022.html

相关文章:

  • Redis中String数据结构为什么以长度44为embstr和raw实现的分界线?
  • 【大模型实战篇】部署GPT-OSS-120B踩得坑(vllm / ollama等推理框架)
  • 数据库索引创建的核心原则与最佳实践
  • JAVA 分布式锁的5种实现方式
  • 【C++高阶五】mapset对红黑树的封装
  • 【昇腾】Atlas 500 A2 智能小站制卡从M.2 SATA盘启动Ubuntu22.04系统,重新上电卡死没进系统问题处理_20250808
  • 图片识别表格工具v3.0绿色版,PNG/JPG秒变可编辑Excel
  • Redis初步介绍和分布式系统介绍
  • 项目一系列-第4章 在线接口文档 代码模板改造
  • 临床医学 RANDOM SURVIVAL FORESTS(randomSurvivalForest)-2 python 例子
  • shell脚本使用
  • 软件销售跟进思路
  • 期货和期权对冲后能盈利吗?
  • 大力水手4——AI驱动的多帧生成与神经网络渲染
  • MySQL NULL 值处理详细说明
  • 《天天酷跑》:用Pygame打造经典跑酷游戏的开发与玩法全解析
  • 库函数NTC采样温度的方法(STC8)
  • react的form.resetFields()
  • cuda编程之内核执行配置参数
  • 智慧交通场景下 mAP↑28%:陌讯多模态融合算法实战解析
  • Linux入门到精通,第二周自我总结
  • 书生浦语第五期-L1G3-LMDeploy 课程
  • 配电线路故障定位在线监测装置的技术解析与应用价值
  • C语言编译流程讲解
  • 第七篇:动画基础:requestAnimationFrame循环
  • 解决多线程安全性问题的方法
  • 可编辑51页PPT | 某鞋服品牌集团数字化转型项目建议书
  • 相机Camera日志实例分析之十:相机Camx【萌拍调节AE/AF拍照】单帧流程日志详解
  • 基于MATLAB实现的毫米波大规模MIMO系统中继混合预编码设计
  • [windows]torchsig 1.1.0 gr-spectrumdetect模块安装