1、linux下nacos安裝
1-1、下載安裝包
官網(wǎng)(https://nacos.io/zh-cn/docs/quick-start.html)
下載地址(https://github.com/alibaba/nacos/releases/)

1-2、解壓安裝包
將壓縮包放到相應的目錄下進行解壓,解壓:
tar -zxvf?nacos-server-2.0.0.tar.gz

1-3、編輯相應配置
vim /nacos/conf/application.properties

1-4、初始化數(shù)據(jù)庫
我是用Navicat客戶端連接數(shù)據(jù)庫,執(zhí)行/nacos/conf目錄下nacos-mysql.sql文件,進行數(shù)據(jù)庫初始化
進入bin目錄,cd?/nacos/bin
啟動nacos命令(-m?standalone 指定啟動模式為單機版):? ? ? ? ??
sh startup.sh -m standalone

查看日志?
tail -500f /nacos/logs/start.out

默認端口為8848,在application.aproperties中可以配置。
centos7給防火墻開發(fā)8848端口:
firewall-cmd --zone=public --add-port=8848/tcp --permanent?
重新載入防火墻:
firewall-cmd --reload
訪問nacos控制臺,http://192.168.232.128:8848/nacos?( http://ip:8848/nacos),用戶名密碼均為:nacos

關(guān)閉nacos命令,bin目錄下執(zhí)行
./shutdown.sh
2、seata安裝
2-1、軟件下載
下載地址?https://github.com/seata/seata/releases

tar -xvf seata-server-1.4.1.tar.gz
2-2、修改目錄下 conf/registry.conf 配置
vim conf/registry.conf
registry {
? # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
? type = "nacos"? ? // 這里修改成nacos
? loadBalance = "RandomLoadBalance"
? loadBalanceVirtualNodes = 10
? nacos {
? ? application = "seata-server"? ? // nacos注冊時的服務名
? ? serverAddr = "192.168.232.128"? ? // nacos地址
? ? group = "SEATA_GROUP"
? ? namespace = ""? ? // 默認public
? ? cluster = "default"
? ? username = "nacos"
? ? password = "nacos"
? }
}
config {
? # file、nacos 、apollo、zk、consul、etcd3
? type = "nacos"
? nacos {
? ? serverAddr = "192.168.232.128"
? ? namespace = ""
? ? group = "SEATA_GROUP"
? ? username = "nacos"
? ? password = "nacos"
? }
}
2-3、修改conf目錄下file.conf配置
vim conf/file.conf

2-4、修改conf目錄下registry.conf配置
vim conf/registry.conf


2-5、初始化表
創(chuàng)建seata數(shù)據(jù)庫
-- -------------------------------- The script used when storeMode is 'db' --------------------------------
-- the table to store GlobalSession data
CREATE TABLE IF NOT EXISTS `global_table`
(
? ? `xid`? ? ? ? ? ? ? ? ? ? ? VARCHAR(128) NOT NULL,
? ? `transaction_id`? ? ? ? ? ? BIGINT,
? ? `status`? ? ? ? ? ? ? ? ? ? TINYINT? ? ? NOT NULL,
? ? `application_id`? ? ? ? ? ? VARCHAR(32),
? ? `transaction_service_group` VARCHAR(32),
? ? `transaction_name`? ? ? ? ? VARCHAR(128),
? ? `timeout`? ? ? ? ? ? ? ? ? INT,
? ? `begin_time`? ? ? ? ? ? ? ? BIGINT,
? ? `application_data`? ? ? ? ? VARCHAR(2000),
? ? `gmt_create`? ? ? ? ? ? ? ? DATETIME,
? ? `gmt_modified`? ? ? ? ? ? ? DATETIME,
? ? PRIMARY KEY (`xid`),
? ? KEY `idx_gmt_modified_status` (`gmt_modified`, `status`),
? ? KEY `idx_transaction_id` (`transaction_id`)
) ENGINE = InnoDB
? DEFAULT CHARSET = utf8;
-- the table to store BranchSession data
CREATE TABLE IF NOT EXISTS `branch_table`
(
? ? `branch_id`? ? ? ? BIGINT? ? ? NOT NULL,
? ? `xid`? ? ? ? ? ? ? VARCHAR(128) NOT NULL,
? ? `transaction_id`? ? BIGINT,
? ? `resource_group_id` VARCHAR(32),
? ? `resource_id`? ? ? VARCHAR(256),
? ? `branch_type`? ? ? VARCHAR(8),
? ? `status`? ? ? ? ? ? TINYINT,
? ? `client_id`? ? ? ? VARCHAR(64),
? ? `application_data`? VARCHAR(2000),
? ? `gmt_create`? ? ? ? DATETIME(6),
? ? `gmt_modified`? ? ? DATETIME(6),
? ? PRIMARY KEY (`branch_id`),
? ? KEY `idx_xid` (`xid`)
) ENGINE = InnoDB
? DEFAULT CHARSET = utf8;
-- the table to store lock data
CREATE TABLE IF NOT EXISTS `lock_table`
(
? ? `row_key`? ? ? ? VARCHAR(128) NOT NULL,
? ? `xid`? ? ? ? ? ? VARCHAR(96),
? ? `transaction_id` BIGINT,
? ? `branch_id`? ? ? BIGINT? ? ? NOT NULL,
? ? `resource_id`? ? VARCHAR(256),
? ? `table_name`? ? VARCHAR(32),
? ? `pk`? ? ? ? ? ? VARCHAR(36),
? ? `gmt_create`? ? DATETIME,
? ? `gmt_modified`? DATETIME,
? ? PRIMARY KEY (`row_key`),
? ? KEY `idx_branch_id` (`branch_id`)
) ENGINE = InnoDB
? DEFAULT CHARSET = utf8;
CREATE TABLE `undo_log` (
? `id` bigint(20) NOT NULL AUTO_INCREMENT,
? `branch_id` bigint(20) NOT NULL,
? `xid` varchar(100) NOT NULL,
? `context` varchar(128) NOT NULL,
? `rollback_info` longblob NOT NULL,
? `log_status` int(11) NOT NULL,
? `log_created` datetime NOT NULL,
? `log_modified` datetime NOT NULL,
? `ext` varchar(100) DEFAULT NULL,
? PRIMARY KEY (`id`) USING BTREE,
? UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
2-6、在seata目錄下創(chuàng)建config.txt文件
touch config.txt

注意 service.vgroup_mapping.${your-service-gruop}=default,中間的 ${your-service-gruop} 為自己定義的服務組名稱,SpringBlade默認為service-name-group的格式。
若服務名為blade-demo,則這里配置的 ${your-service-gruop} 為blade-demo-group
比如截圖中的兩個服務,分別是gateway-fescar-service和api-admin-fescar-service,他們對應的配置如下

config.txt內(nèi)容根據(jù)seata版本獲取,地址:https://github.com/seata/seata/tree/1.4.1/script/config-center

2-7、創(chuàng)建導入腳本nacos-config.sh
在seata目錄下創(chuàng)建script文件夾
mkdir script
創(chuàng)建導入腳本nacos-config.sh
cd script
vim?nacos-config.sh
nacos-config.sh腳本內(nèi)容,根據(jù)seata版本自行下載,地址:?https://github.com/seata/seata/tree/1.4.1/script/config-center/nacos

給腳本賦予執(zhí)行權(quán)
chmod +x /nacos-config.sh
執(zhí)行腳本
sh nacos-config.sh
執(zhí)行成功可以看到配置列表

注意:
執(zhí)行.sh腳本時出現(xiàn)$’\r’: 未找到命令,
原因
是因為命令直接從windows 復制過來導致的
解決
yum install dos2unix
dos2unix **.sh 進行轉(zhuǎn)換
再次執(zhí)行即可
2-8、啟動seata
cd /seata/bin
sh seata-server.sh -h 192.168.232.128 -p 8091 &
注:ip地址為127.0.0.1時默認在nacos注入內(nèi)網(wǎng)ip,導致外網(wǎng)無法訪問
啟動成功如圖所示

3、springcloud配置nacos+seata
3-1、創(chuàng)建項目
pom.xml加入以賴
<properties>
? ? <java.version>1.8</java.version>
? ??<nacos.version>2.1.3.RELEASE</nacos.version>
????<spring.cloud.seata.version>2.1.0.RELEASE</spring.cloud.seata.version>
????<seata-all.version>1.4.1</seata-all.version>
????<druid.version>1.1.10</druid.version>
</properties>
</dependencyManagement>
????</dependencies>
?????????<dependency>
? ? ? ? ? ? <groupId>com.alibaba.cloud</groupId>
? ? ? ? ? ? <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
? ? ? ? ? ? <version>${nacos.version}</version>
? ? ? ? </dependency>
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>com.alibaba.cloud</groupId>
? ? ? ? ? ? <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
? ? ? ? ? ? <version>${nacos.version}</version>
? ? ? ? </dependency>
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>com.alibaba.cloud</groupId>
? ? ? ? ? ? <artifactId>spring-cloud-alibaba-seata</artifactId>
? ? ? ? ? ? <version>${spring.cloud.seata.version}</version>
? ? ? ? </dependency>
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>io.seata</groupId>
? ? ? ? ? ? <artifactId>seata-all</artifactId>
? ? ? ? ? ? <version>${seata-all.version}</version>
? ? ? ? </dependency>
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>com.alibaba</groupId>
? ? ? ? ? ? <artifactId>druid-spring-boot-starter</artifactId>
? ? ? ? ? ? <version>${druid.version}</version>
? ? ? ? </dependency>
? ? </dependencies>
</dependencyManagement>
配置項目application.yml
spring:
? cloud:
? ??alibaba:?
? ??????seata:?
? ??????????tx-service-group: apiadmin-service-group?
? ? nacos:
? ? ? discovery:
? ? ? ? server-addr: 192.168.232.128:8848
? ? ? ? group: SEATA_GROUP
? ??????ip: 192.168.232.128
nacos:
? group: SEATA_GROUP
? namespace: public
? # 配置中心地址
? server-addr: 127.0.0.1:8848
? seata:
? ? application: seata-server
? ? tx-service-group: my_test_tx_group
seata:
? enabled: true
? application-id: ${spring.application.name}? ? // 當前應用模塊名稱
? tx-service-group: ${nacos.seata.tx-service-group}
? enable-auto-data-source-proxy: true
? config:
? ? # 指明類型
? ? type: nacos
? ? nacos:
? ? ? server-addr: ${nacos.server-addr}
? ? ? namespace: ${nacos.namespace}
? ? ? group: ${nacos.group}
? ? ? username: "nacos"
? ? ? password: "nacos"
? registry:
? ? type: nacos
? ? nacos:
? ? ? application: ${nacos.seata.application}
? ? ? server-addr: ${nacos.server-addr}
? ? ? namespace: ${nacos.namespace}
? ? ? group: ${nacos.group}
? ? ? username: "nacos"
? ? ? password: "nacos"
4、docker-compose運行springcloud
4-1、docker-compose安裝
Linux
Linux 上我們可以從 Github 上下載它的二進制包來使用,最新發(fā)行的版本地址:https://github.com/docker/compose/releases。
運行以下命令以下載 Docker Compose 的當前穩(wěn)定版本:
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
要安裝其他版本的 Compose,請?zhí)鎿Q 1.24.1。
將可執(zhí)行權(quán)限應用于二進制文件:
sudo chmod +x /usr/local/bin/docker-compose
創(chuàng)建軟鏈:
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
測試是否安裝成功:
docker-compose --version
cker-compose version 1.24.1, build 4667896b
4-2、Dockerfile定義
FROM?java:8
RUNmkdir/microservice
WORKDIR?/microservice
ADD?/register-center-1.0.jar?/microservice/
EXPOSE8761
ENTRYPOINT?["java","-Djava.security.egd=file:/dev/./urandom","-jar","/microservice/register-center-1.0.jar"]
說明:
FROM java:8
? ? ? ? FROM 指定基于的基礎(chǔ)鏡像。必須在第一行,本例中是基于Java 8作為基礎(chǔ)鏡像的。
RUN mkdir /microservice
? ? ? ? RUN 執(zhí)行shell命令。本例中是用于創(chuàng)建microservice目錄。
WORKDIR /microservice
? ? ? ?WORKDIR 為后續(xù)的RUN、CMD、ENTRYPOINT指令配置工作目錄。
ADD /register-center-1.0.jar /microservice/
? ? ? ?ADD 復制指定位置的程序包到容器的指定位置。本例中是將位于該Dockerfile同一目錄下的springCloudEureka-1.0.jar復制到容器的/microservice/目錄下。
EXPOSE 8761
? ? ? ?EXPOSE 暴露容器的端口,供外部使用。本例中是只注冊中心服務springCloudEureka的端口,并確保對外能夠訪問。
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", ……]
? ? ? ? ENTRYPOINT 配置容器啟動后只需的命令。本例中是啟動Java程序。
4-3、docker-compose.yml定義
這個腳本中定義了一次性啟停上述三個服務,并實現(xiàn)服務間的通信,腳本內(nèi)容如下:
version:?'3'
services:
???#注冊中心
???#自定義的服務名稱
???register-center:?
????#鏡像名稱
????image:?register-center:v1
????#容器名稱
????container_name:?register-center
????#容器down掉后,會自動重啟
????restart:?always
????#掛載一個目錄或者一個已存在的數(shù)據(jù)卷容器。格式為宿主機目錄:容器內(nèi)目錄???
????volumes:
??????-?$PWD/register-center/register-center-1.0.jar:/microservice/
????#映射端口。格式為宿主機端口:容器端口
????ports:
??????-?"8761:8761"
????#容器啟動后,執(zhí)行的命令
????command:?java?-Djava.security.egd=file:/dev/./urandom?-jar?/microservice/register-center-1.0.jar
???#配置中心
???config-center:?
????image:?config-center:v1
????container_name:?config-center
????restart:?always
????volumes:
??????-?$PWD/config-center/config-center-1.0.jar:/microservice/
????ports:
??????-?"8888:8888"
????command:?java?-Djava.security.egd=file:/dev/./urandom?-jar?/microservice/config-center-1.0.jar
????depends_on:
??????-?register-center?
????links:
??????-?register-center:register-center
???#網(wǎng)關(guān)服務
???gateway:?
????image:?gateway:v1
????container_name:?gateway
????restart:?always
????volumes:
??????-?$PWD/gateway/gateway-1.0.jar:/microservice/
????ports:
??????-?"8111:8111"
????command:?java?-Djava.security.egd=file:/dev/./urandom?-jar?/microservice/gateway-1.0.jar
????depends_on:
??????-?register-center
??????-?config-center
????links:
??????-?register-center:register-center
??????-?config-center:config-center
4-4、編譯、運行
將各個打包好的服務jar包 、Dockerfile腳本、 docker-compose.yml上傳至docker服務器上,我是存放在如下結(jié)構(gòu)的目錄下,具體依個人習慣而定。

編譯鏡像
[docker@docker?register-center]$?docker?build?-t?gateway:v1?.? ? ? // 注意最后的 . 一定要加上
Sending?build?context?to?Docker?daemon?44.31MB
Step?1/6?:?FROM?java:8
?--->?d23bdf5b1b1b
Step?2/6?:?RUN?mkdir?/microservice
?--->?Running?in?fcf4af033ac5
?--->?c0cf16047e86
Removing?intermediate?container?fcf4af033ac5
Step?3/6?:?WORKDIR?/microservice
?--->?cc1fae4f23dc
Removing?intermediate?container?d6fd78d760a9
Step?4/6?:?ADD?/register-center-1.0.jar?/microservice/
?--->?ee8d0db56843
Removing?intermediate?container?dd5b20c5e72c
Step?5/6?:?EXPOSE?8761
?--->?Running?in?46ae28623bd1
?--->?d02692f9c49c
Removing?intermediate?container?46ae28623bd1
Step?6/6?:?ENTRYPOINT?java?-Djava.security.egd=file:/dev/./urandom?-jar?/microservice/register-center-1.0.jar
?--->?Running?in?cf63f2ca01af
?--->?51431eb470e5
Removing?intermediate?container?cf63f2ca01af
Successfully?built?51431eb470e5
Successfully?tagged?register-center:v1

運行
?在docker-compose.yml目錄下,執(zhí)行docker-compose up -d命令后臺啟動。
[root@localhost server-bomeiyi]# ll
總用量 4
-rw-r--r--. 1 root root 749 4月? 16 17:41 docker-compose.yml
drwxrwxrwx. 4 root root? 57 4月? 16 17:59 images
[root@localhost server-bomeiyi]# docker-compose up -d
docker-compose 命令
啟停命令
docker-compose up -d 全部后臺啟動
docker-compose stop xxx 停止某一個服務
docker-compose stop 停止所有服務
docker-compose start xxx啟動某一個服務
docker-compose restart xxx 重啟某一個服務
docker-compose stop xxx && docker-compose up -d --build xxx? ?// 停止某個服務并重新打包某個鏡像重新啟動某個服務
其他命令
docker-compose config 查看當前yml文件中的所有配置
docker-compose rm xxx 刪除某一個服務(容器)
docker-compose rm 刪除所有服務(容器)