刘耀文

刘耀文

java开发者
github

springcloud 環境構築 docker-compose モード

一份用于学习 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


読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。