📚 微服务组件单机环境搭建教程(WSL+Docker Compose)
上篇我们已经搭建了wsl集成docker desktop环境,实际上是可以把wsl当作服务器来操作的,今天就教大家使用上篇搭建的环境集成docker-compose搭建一套简单的微服务单机教程,过一阵子时间充足再出一期企业级微服务分布式架构搭建。(有自己服务器的同学连接服务器操作是一样的步骤)
🌟 前置准备
- 确保已按上篇教程完成 WSL 与 Docker Desktop 集成
- 安装 FinalShell 客户端(官网下载)
🔌 第一部分:SSH 连接 WSL 环境
1.1 进入 WSL 终端
# Windows 终端操作
win+R → 输入 cmd → 回车
wsl -d Ubuntu # 若未启动则用 wsl.exe -d Ubuntu
ip a | grep eth0 # 查看 IPv4 地址(示例:172.27.123.45)
1.2 配置 SSH 服务
sudo apt update
sudo apt install openssh-server -y
sudo systemctl start ssh
sudo systemctl enable ssh
sudo systemctl status ssh # 确认状态为 running
1.3 FinalShell 连接配置
- 连接类型:SSH
- 主机地址:
172.27.123.45(替换为刚查到的 IPv4 地址) - 用户名:
你的 WSL 用户名 - 认证方式:密码(或密钥)
🛠 第二部分:项目结构搭建
2.1 创建目录结构
cd /home/tomcat
mkdir -p docker-compose-project/{
mysql,nacos,redis,rocketmq/conf}
2.2 编写 Docker Compose 文件
cd docker-compose-project
vi docker-compose.yml
📄 docker-compose.yml 完整配置(点击展开)
services:
# MySQL 服务
mysql:
image: mysql:8.4
container_name: mysql
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: nacos_config
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/init.sql:/docker-entrypoint-initdb.d/init.sql
networks:
- app_network
healthcheck:
test:
- "CMD-SHELL"
- "mysqladmin ping -uroot -proot && mysql -uroot -proot -e 'USE nacos_config; SELECT 1 FROM config_info LIMIT 1;'"
interval: 3s
timeout: 5s
retries: 20
# Nacos 服务
nacos:
image: nacos/nacos-server:latest
container_name: nacos
ports:
- "8848:8848"
environment:
MODE: standalone
SPRING_DATASOURCE_PLATFORM: mysql
MYSQL_SERVICE_HOST: mysql
MYSQL_SERVICE_PORT: 3306
MYSQL_SERVICE_DB_NAME: nacos_config
MYSQL_SERVICE_USER: root
MYSQL_SERVICE_PASSWORD: root
# 新增数据库连接参数
MYSQL_SERVICE_DB_PARAM: "characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true"
# 强制指定时区(必须)
TZ: Asia/Shanghai
depends_on:
mysql:
condition: service_healthy
# 添加健康检查(关键)
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8848/nacos/health"]
interval: 10s
timeout: 5s
retries: 20
command:
- /bin/sh
- -c
- |
# 增加循环检测逻辑
while ! nc -z mysql 3306; do
echo "等待 MySQL 服务就绪..."
sleep 2
done
# 增加数据库连通性测试
while ! mysql -hmysql -P3306 -uroot -proot -e "USE nacos_config; SELECT 1;"; do
echo "等待数据库初始化完成..."
sleep 5
done
echo "----------- 启动 Nacos -----------"
bash /home/nacos/startup.sh -m standalone
networks:
- app_network
# Redis 单机
redis:
image: redis:latest
container_name: redis-server
ports:
- "6379:6379"
volumes:
- ./redis/data:/data
command: redis-server --appendonly yes
networks:
- app_network
# RocketMQ 消息队列
rocketmq-namesrv:
image: apache/rocketmq:5.1.4
container_name: rocketmq-namesrv
ports:
- "9876:9876"
command: sh mqnamesrv -n 0.0.0.0:9876
networks:
- app_network
rocketmq-broker:
image: apache/rocketmq:5.1.4
container_name: rocketmq-broker
ports:
- "10909:10909"
- "10911:10911"
environment:
NAMESRV_ADDR: rocketmq-namesrv:9876
command: # 统一使用列表格式
- sh
- -c
- "/home/rocketmq/rocketmq-5.1.4/bin/mqbroker -n rocketmq-namesrv:9876 -c /home/rocketmq/conf/broker.conf"
volumes:
- ./rocketmq/data:/home/rocketmq/store
- ./rocketmq/conf/broker.conf:/home/rocketmq/conf/broker.conf
depends_on:
- rocketmq-namesrv
networks:
- app_network
# RocketMQ Dashboard 服务
rocketmq-dashboard:
image: apacherocketmq/rocketmq-dashboard:latest
container_name: rocketmq-dashboard
ports:
- "9886:8080"
environment:
NAMESRV_ADDR: rocketmq-namesrv:9876
depends_on:
- rocketmq-namesrv
- rocketmq-broker
networks:
- app_network
networks:
app_network:
driver: bridge
📦 第三部分:初始化配置
3.1 创建 MySQL 初始化脚本
cd mysql
vi init.sql # 粘贴下方 SQL 内容(或从 Nacos GitHub 获取最新版本)
-- Nacos 官方完整 SQL 链接:
-- https://github.com/alibaba/nacos/blob/master/distribution/conf/mysql-schema.sql
CREATE DATABASE IF NOT EXISTS nacos_config;
USE nacos_config;
-- 在此处粘贴 Nacos 的 SQL 初始化脚本(来自 /*
/******************************************/
/* 表名称 = config_info */
/******************************************/
CREATE TABLE `config_info` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`data_id` varchar(255) NOT NULL COMMENT 'data_id',
`group_id` varchar(128) DEFAULT NULL COMMENT 'group_id',
`content` longtext NOT NULL COMMENT 'content',
`md5` varchar(32) DEFAULT NULL COMMENT 'md5',
`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
`src_user` text CO

最低0.47元/天 解锁文章
3832

被折叠的 条评论
为什么被折叠?



