最近电脑重装了系统,所有环境都和从头开始安装了。

记录下以最简单的方式安装各种环境的操作,避免繁琐的额外步骤,持续更新中。

包括Win安装docker配置国内镜像源、docker安装rocketmq、MySQL、Redis、nacos等各类中间件。

目录

Windows安装docker

docker安装MySQL

docker安装Redis

docker安装nacos

nacos配置MySQL数据源

docker安装rocketmq

启动nameserver

启动broker

安装dashboard

遇到的一些问题


Windows安装docker

官网下载docker desktop:https://www.docker.com/

下载后双击安装即可。国内貌似登录不了了,也不需要登录,跳过即可。

添加配置国内镜像源,可选,默认国外镜像源可能无法访问

  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://docker.imgdb.de",
    "https://docker-0.unsee.tech",
    "https://docker.hlmirror.com"
  ]

docker安装MySQL

推荐使用终端命令进行操作。

下载镜像,默认最新版

docker pull mysql

启动容器,设置容器名称my_mysql,root密码为123456

docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name my_mysql mysql

只是简单的使用,就不需要设置挂载目录。

-d:detach,后台运行

-p:端口映射

-e:环境变量

docker安装Redis

下载镜像,默认最新版

docker pull redis

启动容器,设置容器名称my_redis,设置链接密码123456

docker run -d -p 6379:6379 --name my_redis redis redis-server --requirepass "123456"
 

docker安装nacos

下载镜像,默认最新版

docker pull nacos/nacos-server

默认使用Derby内嵌数据库,单机运行模式

docker run --name my_nacos_derby ^
-e MODE=standalone ^
-e NACOS_AUTH_TOKEN=YTZkYzIwNzg2Yzk4Mjg3ZmViY2JiODMyYWZhMGVmZDJhNmRjMjA3ODZjOTgyODdmZWJjYmI4MzJhZmEwZWZkMg== ^
-e NACOS_AUTH_IDENTITY_KEY=a6dc20786c98287febcbb832afa0efd2 ^
-e NACOS_AUTH_IDENTITY_VALUE=0d2366f384b6c702db8e9dd8b74534db ^
-p 8083:8080 ^
-p 8848:8848 ^
-p 9848:9848 ^
-d nacos/nacos-server


其中:token、key、value等可使用32位的随机字符串,token需要再base64编码得到
NACOS_AUTH_TOKEN: Nacos 用于生成JWT Token的密钥,使用长度大于32字符的字符串,再经过Base64编码。
NACOS_AUTH_IDENTITY_KEY: Nacos Server端之间 Inner API的身份标识的Key,必填。
NACOS_AUTH_IDENTITY_VALUE: Nacos Server端之间 Inner API的身份标识的Value,必填。
 

访问测试

http://127.0.0.1:8083/index.html

首次打开需初始化nacos密码,这里设置为nacos

nacos配置MySQL数据源

如果需要配置nacos数据源为MySQL

首先创建数据库,可取名nacos,初始化数据库脚本。

创建容器时指定mysql,并设置mysql连接信息

docker run --name my_nacos ^
-e MODE=standalone ^
-e SPRING_DATASOURCE_PLATFORM=mysql ^
-e MYSQL_SERVICE_HOST=host.docker.internal ^
-e MYSQL_SERVICE_PORT=3306 ^
-e MYSQL_SERVICE_DB_NAME=nacos ^
-e MYSQL_SERVICE_USER=root ^
-e MYSQL_SERVICE_PASSWORD=123456 ^
-e MYSQL_SERVICE_DB_PARAM="characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&allowPublicKeyRetrieval=true" ^
-e NACOS_AUTH_TOKEN=YTZkYzIwNzg2Yzk4Mjg3ZmViY2JiODMyYWZhMGVmZDJhNmRjMjA3ODZjOTgyODdmZWJjYmI4MzJhZmEwZWZkMg== ^
-e NACOS_AUTH_IDENTITY_KEY=a6dc20786c98287febcbb832afa0efd2 ^
-e NACOS_AUTH_IDENTITY_VALUE=0d2366f384b6c702db8e9dd8b74534db ^
-p 8083:8080 ^
-p 8848:8848 ^
-p 9848:9848 ^
-d nacos/nacos-server

访问测试、初始化用户密码

http://localhost:8083/index.html

GitHub查看最新数据库脚本

https://github.com/alibaba/nacos/blob/master/distribution/conf/mysql-schema.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 COMMENT 'source user', 
  `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip', 
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name', 
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段', 
  `c_desc` varchar(256) DEFAULT NULL COMMENT 'configuration description', 
  `c_use` varchar(64) DEFAULT NULL COMMENT 'configuration usage', 
  `effect` varchar(64) DEFAULT NULL COMMENT '配置生效的描述', 
  `type` varchar(64) DEFAULT NULL COMMENT '配置的类型', 
  `c_schema` text COMMENT '配置的模式', 
  `encrypted_data_key` varchar(1024) NOT NULL DEFAULT '' COMMENT '密钥', 
  PRIMARY KEY (`id`), 
  UNIQUE KEY `uk_configinfo_datagrouptenant` (
    `data_id`, `group_id`, `tenant_id`
  )
) ENGINE = InnoDB DEFAULT CHARSET = utf8 COLLATE = utf8_bin COMMENT = 'config_info'; 

/******************************************/

/*   表名称 = config_info  since 2.5.0                */

/******************************************/
CREATE TABLE `config_info_gray` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'id', 
  `data_id` varchar(255) NOT NULL COMMENT 'data_id', 
  `group_id` varchar(128) NOT NULL COMMENT 'group_id', 
  `content` longtext NOT NULL COMMENT 'content', 
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5', 
  `src_user` text COMMENT 'src_user', 
  `src_ip` varchar(100) DEFAULT NULL COMMENT 'src_ip', 
  `gmt_create` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'gmt_create', 
  `gmt_modified` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'gmt_modified', 
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name', 
  `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id', 
  `gray_name` varchar(128) NOT NULL COMMENT 'gray_name', 
  `gray_rule` text NOT NULL COMMENT 'gray_rule', 
  `encrypted_data_key` varchar(256) NOT NULL DEFAULT '' COMMENT 'encrypted_data_key', 
  PRIMARY KEY (`id`), 
  UNIQUE KEY `uk_configinfogray_datagrouptenantgray` (
    `data_id`, `group_id`, `tenant_id`, 
    `gray_name`
  ), 
  KEY `idx_dataid_gmt_modified` (`data_id`, `gmt_modified`), 
  KEY `idx_gmt_modified` (`gmt_modified`)
) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8 COMMENT = 'config_info_gray'; 

/******************************************/

/*   表名称 = config_tags_relation         */

/******************************************/
CREATE TABLE `config_tags_relation` (
  `id` bigint(20) NOT NULL COMMENT 'id', 
  `tag_name` varchar(128) NOT NULL COMMENT 'tag_name', 
  `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type', 
  `data_id` varchar(255) NOT NULL COMMENT 'data_id', 
  `group_id` varchar(128) NOT NULL COMMENT 'group_id', 
  `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id', 
  `nid` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'nid, 自增长标识', 
  PRIMARY KEY (`nid`), 
  UNIQUE KEY `uk_configtagrelation_configidtag` (`id`, `tag_name`, `tag_type`), 
  KEY `idx_tenant_id` (`tenant_id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8 COLLATE = utf8_bin COMMENT = 'config_tag_relation'; 
/******************************************/

/*   表名称 = group_capacity               */

/******************************************/
CREATE TABLE `group_capacity` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', 
  `group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群', 
  `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值', 
  `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量', 
  `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值', 
  `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值', 
  `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值', 
  `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量', 
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', 
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', 
  PRIMARY KEY (`id`), 
  UNIQUE KEY `uk_group_id` (`group_id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8 COLLATE = utf8_bin COMMENT = '集群、各Group容量信息表'; 
/******************************************/

/*   表名称 = his_config_info              */

/******************************************/
CREATE TABLE `his_config_info` (
  `id` bigint(20) unsigned NOT NULL COMMENT 'id', 
  `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'nid, 自增标识', 
  `data_id` varchar(255) NOT NULL COMMENT 'data_id', 
  `group_id` varchar(128) NOT NULL COMMENT 'group_id', 
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name', 
  `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 COMMENT 'source user', 
  `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip', 
  `op_type` char(10) DEFAULT NULL COMMENT 'operation type', 
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段', 
  `encrypted_data_key` varchar(1024) NOT NULL DEFAULT '' COMMENT '密钥', 
  `publish_type` varchar(50) DEFAULT 'formal' COMMENT 'publish type gray or formal', 
  `gray_name` varchar(50) DEFAULT NULL COMMENT 'gray name', 
  `ext_info` longtext DEFAULT NULL COMMENT 'ext info', 
  PRIMARY KEY (`nid`), 
  KEY `idx_gmt_create` (`gmt_create`), 
  KEY `idx_gmt_modified` (`gmt_modified`), 
  KEY `idx_did` (`data_id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8 COLLATE = utf8_bin COMMENT = '多租户改造'; 

/******************************************/

/*   表名称 = tenant_capacity              */

/******************************************/
CREATE TABLE `tenant_capacity` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', 
  `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID', 
  `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值', 
  `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量', 
  `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值', 
  `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数', 
  `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值', 
  `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量', 
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', 
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', 
  PRIMARY KEY (`id`), 
  UNIQUE KEY `uk_tenant_id` (`tenant_id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8 COLLATE = utf8_bin COMMENT = '租户容量信息表'; 

CREATE TABLE `tenant_info` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', 
  `kp` varchar(128) NOT NULL COMMENT 'kp', 
  `tenant_id` varchar(128) default '' COMMENT 'tenant_id', 
  `tenant_name` varchar(128) default '' COMMENT 'tenant_name', 
  `tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc', 
  `create_source` varchar(32) DEFAULT NULL COMMENT 'create_source', 
  `gmt_create` bigint(20) NOT NULL COMMENT '创建时间', 
  `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间', 
  PRIMARY KEY (`id`), 
  UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`, `tenant_id`), 
  KEY `idx_tenant_id` (`tenant_id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8 COLLATE = utf8_bin COMMENT = 'tenant_info'; 

CREATE TABLE `users` (
  `username` varchar(50) NOT NULL PRIMARY KEY COMMENT 'username', 
  `password` varchar(500) NOT NULL COMMENT 'password', 
  `enabled` boolean NOT NULL COMMENT 'enabled'
); 

CREATE TABLE `roles` (
  `username` varchar(50) NOT NULL COMMENT 'username', 
  `role` varchar(50) NOT NULL COMMENT 'role', 
  UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE
); 

CREATE TABLE `permissions` (
  `role` varchar(50) NOT NULL COMMENT 'role', 
  `resource` varchar(128) NOT NULL COMMENT 'resource', 
  `action` varchar(8) NOT NULL COMMENT 'action', 
  UNIQUE INDEX `uk_role_permission` (`role`, `resource`, `action`) USING BTREE
);

docker安装rocketmq

官网:https://rocketmq.apache.org/zh/docs/

下拉镜像:配置文件路径指定了版本号,所以下拉指定版本

docker pul apache/rocketmq:5.3.2

创建共享网络,便于通信

docker network create rmq_network

启动nameserver

docker run -d -p 9876:9876 --name my_rmq_server --network rmq_network apache/rocketmq:5.3.2 sh mqnamesrv

代码中连接使用9876

rocketmq.name-server=localhost:9876

启动broker

本地某个目录下创建broker配置文件broker.conf:

namesrvAddr = host.docker.internal:9876
brokerClusterName = DefaultCluster
# 节点名称
brokerName = broker-a
# 0 means master other means slave
brokerId = 0
brokerIP1 = host.docker.internal
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
# delete commit log at 04:00
deleteWhen = 04
fileReservedTime = 72
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true

启动broker,指定配置文件映射(本地配置文件路径D:\\Cache\\Docker\\rocketmq\\broker.conf)

docker run -d -p 10912:10912 -p 10911:10911 -p 10909:10909 --name my_rmq_broker ^
--network rmq_network ^
-v D:\\Cache\\Docker\\rocketmq\\broker.conf:/home/rocketmq/rocketmq-5.3.2/conf/broker.conf ^
apache/rocketmq:5.3.2 sh mqbroker -c /home/rocketmq/rocketmq-5.3.2/conf/broker.conf

安装dashboard

docker run -d -p 8099:8080 --name my_rmq_dashboard --network rmq_network -e "JAVA_OPTS=-Drocketmq.namesrv.addr=host.docker.internal:9876" apacherocketmq/rocketmq-dashboard

访问dashboard,查看各种信息:

http://localhost:8099/

遇到的一些问题

docker运行容器时,报错access permissions.

PS C:\Users\Andy> docker run -d -p 8848:8848 -p 9848:9848 -e MODE=standalone --name my_nacos nacos/nacos-server
bd069c9c57002b7685004c10063d0acb202e1b0038902ac57de37f920f50b824
docker: Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:9848 -> 127.0.0.1:0: listen tcp 0.0.0.0:9848: bind: An attempt was made to access a socket in a way forbidden by its access permissions.

解决:重启winnat服务

net stop winnat
net start winnat

Windows11 运行多行命令

使用反斜线 \ 拼接的方式会一行行运行,可改为使用 ^ 拼接的方式

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐