一份用于学习 springcloud 的快速搭建服务备忘录
yamal ファイル#
version: "3"
services:
# nacos 環境:単一
# 1、データベーステーブルを準備する 参照 >nacosデータベーステーブル
# 2、起動環境を準備する 参照 >nacos-standlone-mysql.env
# 3、公式チュートリアル:https://nacos.io/docs/next/manual/admin/deployment/deployment-standalone/
nacos:
image: nacos/nacos-server:latest
container_name: nacosnacos-standlone-mysql.env
env_file:
# ここで環境をマウントする
- /home/liu/nacos-docker/env/nacos-standlone-mysql.env
volumes:
- /home/liu/nacos-logs/standalone-logs/:/home/nacos/logs
- /home/liu/wait-it.sh:/home/liu/wait-it.sh
ports:
- "8848:8848"
- "9848:9848"
- "9849:9849"
restart: always
# mysqlサービスの起動を待つ。このファイルを事前に準備する必要がある。githubにある。外部sqlサービスを使用する場合は必要ないが、nacos-standlone-mysql.envの設定を変更する必要がある
command: bash -c "chmod +x /home/liu/wait-it.sh && /home/liu/wait-it.sh mysql:3306 --timeout=30 --echo 'mysql is up'"
depends_on:
- mysql
networks:
- cloud-net
# mysql はnacosサービス
mysql: # サービス名
image: mysql:latest # または他のmysqlバージョン
container_name: mysql8 # コンテナ名
environment:
- MYSQL_ROOT_PASSWORD=mysql_liu
# - TZ=Asia/Shanghai # コンテナのタイムゾーンを設定する。ここでは下記のマウント方式でホストのタイムゾーンと時間を同期しているので、ここでは無視する
volumes:
- mysql:/var/lib/mysql
- /home/docker/mysql8/log:/var/log/mysql
- /home/docker/mysql8/conf.d:/etc/mysql/conf.d
- /etc/localtime:/etc/localtime:ro
networks:
- cloud-net
ports:
- 3306:3306
# ホストポートとコンテナポートのマッピング関係を指定する。ホスト:コンテナ
restart: always # コンテナはdocker起動時に自動起動する
# 分散トランザクション
# 1、resourceをコピーする docker cp コンテナ名:/seata-server/resources 自分のlinuxサービスのパス例:/home/liu/seata/resources
# 2、applicationを設定する、テンプレート:https://github.com/apache/incubator-seata/blob/develop/server/src/main/resources/application.example.yml
# 3、設定したnacosにseata設定を追加する 例は:下記の >seataServer.properties
# 4、公式チュートリアル:https://seata.apache.org/zh-cn/docs/ops/deploy-by-docker-compose
seata-server:
image: seataio/seata-server:1.5.2
container_name: seata
ports:
- "7091:7091"
- "8091:8091"
environment:
- STORE_MODE=db
# SEATA_IPをhostとしてseata serverを登録する
- SEATA_IP=192.168.208.128
- SEATA_PORT=8091
volumes:
- "/usr/share/zoneinfo/Asia/Shanghai:/etc/localtime" # システムのタイムゾーンを設定する
- "/usr/share/zoneinfo/Asia/Shanghai:/etc/timezone" # タイムゾーンを設定する
# docker cpコマンドでリソースファイルを相対パス`./seata-server/resources`にコピーしたと仮定する
# 問題がある場合は上記の[注意事項]および[カスタム設定ファイルの使用]を参照してください
- "/home/liu/seata/resources:/seata-server/resources"
depends_on:
- nacos
restart: always
networks:
- cloud-net
# 1、起動後に遅延キューのプラグインを設定する docker exec -it rabbitmq rabbitmq-plugins enable rabbitmq_delayed_message_exchange
# 2、公式チュートリアル:https://hub.docker.com/_/rabbitmq/
rabbitmq:
image: rabbitmq:3.8-management
container_name: rabbitmq
hostname: my-rabbit
ports:
- "5672:5672"
- "15672:15672"
networks:
- cloud-net
environment:
RABBITMQ_DEFAULT_USER: user
RABBITMQ_DEFAULT_PASS: password
volumes:
- mq_plugins:/plugins
# 公式チュートリアル: https://www.elastic.co/guide/en/elasticsearch/reference/current/run-elasticsearch-locally.html
kibana:
image: docker.elastic.co/kibana/kibana:7.12.1
container_name: kibana
networks:
- cloud-net
ports:
- "5601:5601"
environment:
ELASTICSEARCH_URL: http://es:9200
ELASTICSEARCH_HOSTS: http://es:9200
ELASTICSEARCH_USERNAME: user
ELASTICSEARCH_PASSWORD: password
xpack.security.enabled: "false"
xpack.license.self_generated.type: trial
depends_on:
- es
es:
image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1
container_name: es
networks:
- cloud-net
ports:
- "9200:9200"
environment:
ELASTIC_PASSWORD: password
discovery.type: "single-node"
xpack.security.http.ssl.enabled: "false"
xpack.license.self_generated.type: trial
volumes:
- esdata:/usr/share/elasticsearch/data # Elasticsearchデータの永続化
networks:
cloud-net:
volumes:
esdata: # 永続ストレージボリュームを定義する
mysql:
mq_plugins: # RabbitMQプラグインを保存するための永続ストレージボリュームを定義する
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 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` text NOT NULL 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_aggr */
/******************************************/
CREATE TABLE `config_info_aggr` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`data_id` varchar(255) NOT NULL COMMENT 'data_id',
`group_id` varchar(128) NOT NULL COMMENT 'group_id',
`datum_id` varchar(255) NOT NULL COMMENT 'datum_id',
`content` longtext NOT NULL COMMENT '内容',
`gmt_modified` datetime NOT NULL COMMENT '修正時間',
`app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
`tenant_id` varchar(128) DEFAULT '' COMMENT 'テナントフィールド',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='テナントフィールドを追加';
/******************************************/
/* 表名称 = config_info_beta */
/******************************************/
CREATE TABLE `config_info_beta` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`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',
`beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',
`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',
`tenant_id` varchar(128) DEFAULT '' COMMENT 'テナントフィールド',
`encrypted_data_key` text NOT NULL COMMENT 'キー',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';
/******************************************/
/* 表名称 = config_info_tag */
/******************************************/
CREATE TABLE `config_info_tag` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`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',
`tag_id` varchar(128) NOT NULL COMMENT 'tag_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',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';
/******************************************/
/* 表名称 = 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` text NOT NULL COMMENT 'キー',
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
);
INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);
INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');
ENV 環境#
PREFER_HOST_MODE=hostname
MODE=standalone
SPRING_DATASOURCE_PLATFORM=mysql
MYSQL_SERVICE_HOST=192.168.208.128
MYSQL_SERVICE_DB_NAME=nacos
MYSQL_SERVICE_PORT=3306
MYSQL_SERVICE_USER=root
MYSQL_SERVICE_PASSWORD=mysql_liu
MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
seata 設定#
seata TC 起動の application.yaml ファイル [nacos]#
server:
port: 7091
spring:
application:
name: seata-server
logging:
config: classpath:logback-spring.xml
file:
path: ${user.home}/logs/seata
extend:
logstash-appender:
destination: 127.0.0.1:4560
kafka-appender:
bootstrap-servers: 127.0.0.1:9092
topic: logback_to_logstash
console:
user:
username: seata
password: seata
seata:
config:
# support: nacos, consul, apollo, zk, etcd3
type: nacos
nacos:
server-addr: nacos_ip:nacos_port
namespace: seata-server
group: SEATA_GROUP
username: nacos
password: nacos
data-id: seataServer.properties
registry:
# support: nacos, eureka, redis, zk, consul, etcd3, sofa
type: nacos
nacos:
application: seata-server
server-addr: nacos_ip:nacos_port
group: SEATA_GROUP
namespace: seata-server
# tcクラスター名
cluster: default
username: nacos
password: nacos
# server:
# service-port: 8091 #設定しない場合、デフォルトは '${server.port} + 1000'
security:
secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
tokenValidityInMilliseconds: 1800000
ignore:
urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/api/v1/auth/login
nacos 設定ファイル seataServer.properties#
store.mode=db
#-----db-----
store.db.datasource=druid
store.db.dbType=mysql
# MySQLのバージョンに応じてdriverClassNameを調整する必要がある
# mysql8及びそれ以上のバージョンに対応するdriver:com.mysql.cj.jdbc.Driver
# mysql8未満のバージョンのdriver:com.mysql.jdbc.Driver
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/seata-server?useUnicode=true&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
store.db.user= ユーザー名
store.db.password=パスワード
# データベース初期接続数
store.db.minConn=1
# データベース最大接続数
store.db.maxConn=20
# 接続取得時の最大待機時間 デフォルト5000、単位ミリ秒
store.db.maxWait=5000
# グローバルトランザクションテーブル名 デフォルトglobal_table
store.db.globalTable=global_table
# ブランチトランザクションテーブル名 デフォルトbranch_table
store.db.branchTable=branch_table
# グローバルロックテーブル名 デフォルトlock_table
store.db.lockTable=lock_table
# グローバルトランザクションを一度に最大で取得する件数 デフォルト100
store.db.queryLimit=100
# undo保持日数 デフォルト7日,log_status=1(附録3)および未正常にクリアされたundo
server.undo.logSaveDays=7
# undoクリアスレッド間隔時間 デフォルト86400000、単位ミリ秒
server.undo.logDeletePeriod=86400000
# 二段階コミットリトライの超時長 単位ms,s,m,h,d,対応するミリ秒,秒,分,時間,日,デフォルトミリ秒。デフォルト値-1は無限リトライを示す
# 公式: timeout>=now-globalTransactionBeginTime,trueは超時の場合はリトライしない
# 注: 超時時間に達した後はリトライは行わず、データ不整合のリスクがある。業務がデータを調整できる場合を除き、慎重に使用すること
server.maxCommitRetryTimeout=-1
# 二段階ロールバックリトライの超時長
server.maxRollbackRetryTimeout=-1
# 二段階コミット未完了状態のグローバルトランザクションリトライコミットスレッド間隔時間 デフォルト1000、単位ミリ秒
server.recovery.committingRetryPeriod=1000
# 二段階非同期コミット状態リトライコミットスレッド間隔時間 デフォルト1000、単位ミリ秒
server.recovery.asynCommittingRetryPeriod=1000
# 二段階ロールバック状態リトライロールバックスレッド間隔時間 デフォルト1000、単位ミリ秒
server.recovery.rollbackingRetryPeriod=1000
# 超時状態検出リトライスレッド間隔時間 デフォルト1000、単位ミリ秒、超時を検出した場合はグローバルトランザクションをロールバックセッション管理者に置く
server.recovery.timeoutRetryPeriod=1000
この文は Mix Space によって xLog に同期更新されました
元のリンクは https://me.liuyaowen.club/posts/default/20240816and3