我是基于ChatGPT-turbo-3.5实现的AI助手,在此网站上负责整理和概括文章

Error: 400 Bad Request

# 安装 Mysql

# docker-compose安装Mysql

  • 首先创建个目录用来存放docker-compse文件

    [root@node1 ~]# mkdir /usr/docker/env -p
    [root@node1 ~]# cd /usr/docker/env/
  • 编写docker-compose

    [root@node1 ~]# mkdir /usr/docker/env/mysql -p
    [root@node1 ~]# cd /usr/docker/env/mysql
    [root@node1 ~]# vim docker-compose.yml
  • yaml文件

    version : '3'
    services:
      mysql57:
          # 容器名(以后的控制都通过这个)
        container_name: mysql57
          # 重启策略
        restart: always
        image: mysql:5.7
        ports:
          - "3306:3306"
        volumes:
           # 挂挂载配置文件
           #  - ./db/:/docker-entrypoint-initdb.d
          # 挂挂载配置文件
          - ./conf:/etc/mysql/conf.d
          # 挂载日志
          - ./logs:/logs
          # 挂载数据
          - ./data:/var/lib/mysql
        command: [
              'mysqld',
              '--innodb-buffer-pool-size=80M',
              '--character-set-server=utf8mb4',
              '--collation-server=utf8mb4_unicode_ci',
              '--default-time-zone=+8:00',
              '--lower-case-table-names=1'
            ]
        environment:
          # root 密码
          MYSQL_ROOT_PASSWORD: 123456
  • 启动

    docker-compose up -d mysql57

# 安装 mysql 5.7 版本

  1. 拉取镜像

    $ docker pull mysql:5.7
  2. 新建需要挂载文件夹

    $ mkdir -p ~/docker-data/mysql/data
    $ mkdir -p ~/docker-data/mysql/conf.d
    chmod 777 -R ~/docker-data/mysql
  3. conf.d目录创建my.cnf

    $ vi ~/docker-data/mysql/conf.d/my.cnf
    [mysqld]
    # skip-grant-tables作为启动参数的作用: MYSQL服务器不加载权限判断,任何用户都能访问数据库。
    skip-grant-tables
    # 设置北京时区
    default-time_zone = '+8:00'
  4. 运行并挂载在本机

    $ docker run --name mysql5.7 -p 3306:3306 \
    --restart=always --privileged=true \
    -v ~/docker-data/mysql/data:/var/lib/mysql \
    -v ~/docker-data/mysql/conf.d:/etc/mysql/conf.d \
    -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
    
    # -v: 主机和容器的目录映射关系,":"前为主机目录,之后为容器目录
    # --restart=always:  当Docker 重启时,容器会自动启动。
    # --privileged=true: 容器内的root拥有真正root权限,否则容器内root只是外部普通用户权限
  5. 修改密码为空

    $ docker exec -it mysql5.7 bash
    $ mysql -uroot -p
    # 不用输密码直接回车,进入mysql命令
    mysql> use mysql
    mysql> select user,authentication_string,host from user; # 查看账号、密码、可连接的host
    #修改密码
    mysql> update user set authentication_string='123456' where user='root';  #修改密码
    mysql> flush privileges;  #刷新权限
    > mysql> select user,authentication_string,host from user; # 查看账号、密码、可连接的host
    > root需要有两个host -- localhost、% 并且密码不为空,没有 % 的话无法外网访问
    > mysql> CREATE USER 'root'@'%' IDENTIFIED BY '123456'; # 没有的话进行新建
    
    
    CREATE USER 'root'@'%' IDENTIFIED BY '123456';
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
  6. 注释掉my.cnf中,文件中的skip-grant-tables,重启mysql服务

    $ docker ps
    $ docker stop CONTAINER ID
    $ docker start CONTAINER ID
  7. 修改root密码

    mysql> use mysql
    mysql> alter user 'root'@'localhost' IDENTIFIED BY '123456';
    mysql> alter user 'root'@'%' IDENTIFIED BY '123456';
    mysql> flush privileges;

# 安装 mysql 8 版本

步骤与mysql 5.7的流程相似

  1. 拉取镜像

    $ docker pull mysql:8
  2. 新建需要挂载文件夹

    $ mkdir -p ~/docker-data/mysql8/data ~/docker-data/mysql8/conf.d
    chmod 777  ~/docker-data/mysql8/data 
    chmod 777  ~/docker-data/mysql8/conf.d
  3. conf.d目录创建my.cnf

    $ vi ~/docker-data/mysql8/conf.d/my.cnf
    [mysqld]
    port = 3306
    # 设置mysql的安装目录
    #basedir=C:/dev/mysql-5.7.38
    # 设置mysql数据库的数据的存放目录(自动生成,不然可能报错)
    #datadir=C:/dev/mysql-5.7.38/data
    # 允许最大连接数
    max_connections=10000
    # 允许最大连接人数
    #max_user_connections=1000
    # 服务端使用的字符集默认为8比特编码的latin1字符集
    character-set-server=utf8mb4
    # 创建新表时将使用的默认存储引擎
    default-storage-engine=INNODB
    # 连接时间
    wait_timeout=31536000
    interactive_timeout=31536000
    log_bin_trust_function_creators=1
    transaction_isolation=READ-COMMITTED
    sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"
    # 不区分大小写
    lower_case_table_names=1
    group_concat_max_len=102400
    innodb_buffer_pool_size=500M
    [client]
    user=root
    port = 3306
    # 设置mysql客户端默认字符集
    default-character-set=utf8mb4
  4. 运行并挂载在本机

    docker run --name mysql8 -p 3306:3306 \
    --restart=always --privileged=true \
    -v ~/docker-data/mysql8/data:/var/lib/mysql \
    -v ~/docker-data/mysql8/conf.d:/etc/mysql/conf.d \
    -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8
  5. 修改密码为空

    $ docker exec -it mysql8 bash
    $ mysql -uroot -p
    # 输入MYSQL_ROOT_PASSWORD密码直接回车,进入mysql命令
    mysql> use mysql
    mysql> select user,authentication_string,host from user; # 查看账号、密码、可连接的host
    mysql> update user set authentication_string='' where user='root';  #修改密码
    mysql> flush privileges;  #刷新权限
    
  6. 注释掉my.cnf中,文件中的skip-grant-tables,重启mysql服务

    $ docker ps
    $ docker stop mysql8
    $ docker start mysql8
    > MYSQL 8.0内新增加`mysql_native_password`函数,通过更改这个函数密码来进行`远程连接`
    > mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
    > 没有 `root - %` 添加即可。
    > mysql> CREATE USER 'root'@'%' IDENTIFIED BY '123456';
  7. 修改root密码

    mysql> use mysql
    mysql> alter user 'root'@'localhost' IDENTIFIED BY '123456';
    mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
    mysql> flush privileges;

# 连接到mysql

  1. 进入docker本地连接mysql客户端

    [sun@fulsun ~]$ docker exec -it mysql bash
    root@3363dbdeeb55:/# mysql -uroot -p12345
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql>
    
  2. 安装Navicat远程连接mysql

  3. 使用远程连接软件时,容器的3306端口和主机的3306端口映射到一起,所以我们应该访问:

    host: 127.0.0.1
    port: 3306
    user: root
    password: 123456

  4. 如果你的容器运行正常,但是无法访问到MySQL,一般有以下几个可能的原因:

    • Linux下可能是防火墙阻拦

      # 开放端口:
      $ systemctl status firewalld
      $ firewall-cmd  --zone=public --add-port=3306/tcp -permanent
      $ firewall-cmd  --reload
      # 临时关闭防火墙:
      $ sudo systemctl stop firewalld
      # 关闭防火墙开机启动:
      $ sudo systemctl disable firewalld
      
    • 需要进入docker本地客户端设置远程访问账号

      $ sudo docker exec -it mysql bash
      $ mysql -uroot -p123456
      mysql> grant all privileges on *.* to root@'%' identified by "password";
      

      原理:

      # mysql使用mysql数据库中的user表来管理权限,修改user表就可以修改权限(只有root账号可以修改)
      
      mysql> use mysql;
      Database changed
      
      mysql> select host,user,authentication_string from user;
      +-----------+---------------+-------------------------------------------+
      | host      | user          | authentication_string                     |
      +-----------+---------------+-------------------------------------------+
      | localhost | root          | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
      | localhost | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
      | localhost | mysql.sys     | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
      | %         | root          | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
      +-----------+---------------+-------------------------------------------+
      4 rows in set (0.00 sec)
      
      # *.* 赋予全局层级权限
      mysql> grant all privileges  on *.* to root@'%' identified by "password";
      Query OK, 0 rows affected (0.00 sec)
      
      mysql> flush privileges;
      Query OK, 0 rows affected (0.00 sec)
      

# MySQL57

# 简单使用

# 运行MySQL容器:
docker run --name mysql57 -e MYSQL_ROOT_PASSWORD=<your_password> -d mysql:5.7.42-debian

# 连接到 MySQL 容器:
docker exec -it mysql57 mysql -uroot -p

# 挂载目录使用

如果删除容器,则容器中的所有数据都会丢失。可以通过挂载宿主机的目录来指定数据位置,并自定义 MySQL 配置。

mkdir -p /opt/mysql/conf/
mkdir -p /opt/mysql/data

# 参考my.cnf 配置
vim /opt/mysql/conf/my.cnf

# 运行mysql
docker run --name mysql57 --restart=always \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /opt/mysql/data:/var/lib/mysql \
-v /opt/mysql/conf/:/etc/mysql/mysql.conf.d/ \
-p 3306:3306 --restart=always \
-d mysql:5.7

# 开机启动
docker update --restart=always mysql57

# my.cnf

MySQL 配置文件在/etc/mysql/mysql.conf.d/mysqld.cnf

[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
default-character-set=utf8
[mysql]
no-auto-rehash
default-character-set = utf8
prompt = MySQL <\u> [\d] >
[mysqld]
character-set-server = utf8
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
tmpdir          = /var/lib/mysql
secure-file-priv= NULL
symbolic-links=0
skip-name-resolve
# 主服务器唯一ID
server-id=1
max_connections = 3000
max_connect_errors = 6000
# 设置在网络传输中一次消息传输量的最大值 系统默认值 为1MB,最大值是1GB
max_allowed_packet = 32M
sort_buffer_size = 2M
join_buffer_size = 2M
# 服务器线程缓存
thread_cache_size = 300
# 高并发,写入量大的系统,建议把该功能禁掉
# query_cache_size = 64M
transaction_isolation = READ-COMMITTED
# tmp_table_size = 256M
innodb_buffer_pool_size = 2048M
innodb_flush_log_at_trx_commit = 2
#否允许创建未签名的二进制日志函数
log_bin_trust_function_creators=1
sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"
lower_case_table_names=1
group_concat_max_len=102400

# RocketMQ

# 安装rocketmq

  1. 下载镜像

    docker pull rocketmqinc/rocketmq:4.4.0
  2. 安装NameServer

    mkdir /opt/rocketmq
    
    docker run -d --name rmqnamesrv -p 9876:9876 \
    -v /opt/rocketmq/data/namesrv/logs:/root/logs \
    -v /opt/rocketmq/data/namesrv/store:/root/store \
    -e "MAX_POSSIBLE_HEAP=100000000" \
    -e "MAX_HEAP_SIZE=256M" \
    -e "HEAP_NEWSIZE=128M" \
    rocketmqinc/rocketmq:4.4.0 sh mqnamesrv
  3. 安装broker

    1,在绝对路径/opt/rocketmq/conf 新建 broker.conf文件
       mkdir -p /opt/rocketmq/conf/
    
    2,新建 touch broker.conf文件
       vim /opt/rocketmq/conf/broker.conf
    
    3,复制下面内容到文件中 broker.conf
    # 所属集群名称,如果节点较多可以配置多个
    brokerClusterName = DefaultCluster
    brokerName = broker-a
    #0 表示 Master,>0 表示 Slave
    brokerId = 0
    #Broker 对外服务的监听端口 可以在命令时指定端口这里可以去掉
    #listenPort=10911
    #删除文件时间点,默认凌晨 4点
    deleteWhen = 04
    fileReservedTime = 48
    #异步复制Master
    brokerRole = ASYNC_MASTER
    #异步刷盘
    flushDiskType = ASYNC_FLUSH
    #broker监听的ip nameServer地址。宿主机ip
    brokerIP1 = 172.20.96.1
    # 磁盘使用达到95%之后,生产者再写入消息会报错 CODE: 14 DESC: service not available now, maybe disk full
    diskMaxUsedSpaceRatio=95
  4. 启动broker

    docker run -d \
    -p 10911:10911 -p 10909:10909 \
    -v /opt/rocketmq/data/broker/logs:/root/logs \
    -v /opt/rocketmq/rocketmq/data/broker/store:/root/store \
    -v /opt/rocketmq/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf \
    --name rmqbroker  \
    --link rmqnamesrv:namesrv \
    -e "NAMESRV_ADDR=namesrv:9876"  \
    -e "MAX_POSSIBLE_HEAP=200000000"  \
    -e "JAVA_OPT=${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -XX:PermSize=128m -XX:MaxPermSize=128m"  \
    rocketmqinc/rocketmq:4.4.0  \
    sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf

# 安装控制台-admin

  1. 拉取镜像

    docker pull styletang/rocketmq-console-ng
  2. 启动rocketmq 控制台

    docker run -d --name rmq-dashboard  --link rmqnamesrv:namesrv -e "JAVA_OPTS=-Drocketmq.namesrv.addr=172.20.96.1:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 19876:8080 -t styletang/rocketmq-console-ng

# RabbitMQ

  • 使用官方

    # 查找镜像
    docker search rabbitmq
    # 安装镜像
    docker pull rabbitmq
    # 运行rabbitmq 创建镜像
    docker run --name rabbitmq \
    -d --hostname localhost \
    -p 15672:15672 \
    -p 5672:5672 \
    rabbitmq:latest
  • 拉取镜像:

    docker pull rabbitmq:management
  • 启动rabbitMQ

    docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management
  • 复杂版(设置账户密码,hostname)

    docker run -d -p 15672:15672  -p  5672:5672  -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin --name rabbitmq --hostname=rabbitmqhostone  rabbitmq:management

# Redis

  • 6.0

    sudo mkdir -p /mydata/redis/{conf,data}
    wget http://download.redis.io/redis-stable/redis.conf -O /mydata/redis/conf/redis.conf
    [root@node1 ~]# docker run -p 6379:6379 --name redis6 -v /mydata/redis/data:/data -v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf -d redis:6.0.8 redis-server /etc/redis/redis.conf
    注:可以使用以下命令查看正在运行的容器:
    
    [root@node1 ~]# docker exec -it redis6 /bin/bash
    root@8765a0c3657c:/data# redis-cli
    127.0.0.1:6379> ping
    PONG

# 部署Redis集群

# 创建网卡
docker network create redis --subnet 172.38.0.0/16

# 通过脚本创建六个redis配置
for port in $(seq 1 6);\
do \
mkdir -p /mydata/redis/node-${port}/conf
touch /mydata/redis/node-${port}/conf/redis.conf
cat << EOF >> /mydata/redis/node-${port}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.38.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done

# 通过脚本运行六个redis
for port in $(seq 1 6); do \
docker run -p 637${port}:6379 -p 1667${port}:16379 --name redis-${port} \
-v /mydata/redis/node-${port}/data:/data \
-v /mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.1${port} \
redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
done

# 访问 redis
docker exec -it redis-1 /bin/sh #redis默认没有bash
redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6379 172.38.0.15:6379 172.38.0.16:6379 --cluster-replicas 1

# 使用集群模式登录进行操作
/data # redis-cli  -c
127.0.0.1:6379> set name "good"
-> Redirected to slot [5798] located at 172.38.0.12:6379
OK

# Nginx

  • Docker安装

    mkdir -p ~/docker-data/nginx/web
    mkdir -p ~/docker-data/nginx/conf
    mkdir -p ~/docker-data/nginx/logs
    # 启动一个容器
    docker run -itd --name nginx -p 80:80  nginx
    # 拷贝容器内 Nginx 默认配置文件到本地当前目录下的 conf 目录($PWD 当前全路径)
    docker cp nginx:/etc/nginx ~/docker-data/nginx/conf
    
    # docker rm -f nginx
    
    docker run -itd --name nginx -p 4000:80 \
    -v /home/sun/docker-data/nginx/web:/var/www/html \
    -v /home/sun/docker-data/nginx/conf/nginx:/etc/nginx \
    -v /home/sun/docker-data/nginx/logs:/var/log/nginx nginx
  • 示例配置文件内容如下

    server{
        #监听的端口号
        listen 80;
        #要监听的服务器地址,域名也可行,根据实际情况修改
        server_name 154.111.111.111;
        client_max_body_size 20m;
        access_log /var/log/nginx/host.access.log main;
         #开启gzip功能(这段可选,如果web界面资源有压缩格式文件可开启)
      	gzip on; 
      	#开启gzip静态压缩功能
      	gzip_static on; 
      	#gzip缓存大小
      	gzip_buffers 4 16k;
      	#gzip http版本
      	gzip_http_version 1.1;
      	#gzip 压缩级别 1-10 r
      	gzip_comp_level 5;
      	#gzip 压缩类型
      	gzip_types text/plain application/javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
      	#配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持
      	gzip_disable   "MSIE [1-6]\.";
        #前端,根据实际情况修改
    	location / {
    		# 项目地址,这里指的是nginx容器的地址
            root   /var/www/html/luckysj;
    		try_files $uri $uri/ /index.html?s=$uri&$args;
    		# 默认访问的资源
            index index.html index.htm index.php;
            
        }
        
        # 错误网页配置
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }
  • 重启nginx容器,使配置生效

    # 测试nginx配置
    docker exec 容器id nginx -t
    # 重新加载nginx配置
    docker exec 容器id  nginx -s reload 
    
    # 重启
    docker restart nginx

# 安装 redis

  1. 拉取官方的redis镜像指定版本

    $ docker pull redis:5.0.5
  2. 新建文件夹用于redis外部挂载

    $ mkdir -p /docker-data/redis/data  /docker-data/redis/conf
  3. 修改启动默认配置,官方 redis.conf 配置文件
    注意需要修改四个地方:

    sudo wget -P /docker-data/redis/conf http://download.redis.io/redis-stable/redis.conf
    # vim /docker-data/redis/conf/redis.conf
    bind 127.0.0.1 #注释掉这部分,用来限制redis只能本地访问
    protected-mode no #默认yes表示开启保护模式,用来限制redis只能本地访问
    appendonly yes #持久化
    requirepass password #密码
  4. 启动redis

    $ docker run --name redis -d -p 6379:6379 \
    --restart=always --privileged=true \
    -v /docker-data/redis/conf/redis.conf:/etc/redis/redis.conf \
    -v /docker-data/redis/data:/data \
    redis redis-server /etc/redis/redis.conf
  5. 查看redis是否正常启动,如果没有问题就可以使用远程连接redis

      $ docker ps
      $ docker exec -it redis redis-cli
      # auth passoword
      # select index

# 安装Minio

  • 单机部署
    $ mkdir -p ~/docker-data/minio/data  /docker-data/minio/conf
    $ docker run -p 9000:9000 --name minio -v /docker-data/minio/data:/data -v /docker-data/minio/conf:/root/.minio minio/minio server /data
  • 存在问题: 浏览器无法访问minio控制台,因为没有对外暴露控制台端口,对外暴露minio控制台的端口,通过--console-address ":5000"指定控制台端口为静态端口:
    docker run -p 9000:9000 -p 50000:50000 --name minio  -v /docker-data/minio/data:/data -v /docker-data/minio/conf:/root/.minio minio/minio server --console-address ":50000" /data
  • Minio自定义用户名密码:
    docker run -d -p 9000:9000 -p 50000:50000 --name minio \
     -e "MINIO_ROOT_USER=admin" \
     -e "MINIO_ROOT_PASSWORD=12345678" \
     -v /docker-data/minio/data:/data \
     -v /docker-data/minio/conf:/root/.minio \
    minio/minio server --console-address ":50000" /data

# RabbitMQ

  • 拉取镜像:

    docker pull rabbitmq:management
  • 启动rabbitMQ

    docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management
  • 复杂版(设置账户密码,hostname)

    docker run -d -p 15672:15672  -p  5672:5672  -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin --name rabbitmq --hostname=rabbitmqhostone  rabbitmq:management

# Consul

$ mkdir -p ~/docker-data/consul/data

# 单机部署

在本地开发环境或者规模不大的分布式系统中,我们可以使用单机部署方式,命令如下:

docker run -id --name=consul  \
-p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8500:8500 -p 8600:8600  \
-v ~/docker-data/consul/data:/consul/data  \
consul agent -server -ui -node=n1 -bootstrap-expect=1 -client=0.0.0.0 -advertise=服务器外网地址

# 可见上述除了挂载数据卷之外,我们还暴露了几个端口,它们的作用如下:
8300 TCP协议,用于Consul集群中各个节点相互连结通信的端口
8301 TCP或者UDP协议,用于Consul节点之间相互使用Gossip协议健康检查等交互
8302 TCP或者UDP协议,用于单个或多个数据中心之间的服务器节点的信息同步
8500 HTTP协议,用于API接口或者我们上述的网页管理界面访问
8600 TCP或者UDP协议,作为DNS服务器,用于通过节点名查询节点信息
所以如果是在服务器上面部署,记得配置好防火墙放行上述端口。在Spring Cloud模块集成Consul服务发现时,需要配置8500端口。

agent 表示启动一个Agent进程
-server 表示该节点类型为Server节点(下面会讲解集群中的节点类型)
-ui 开启网页可视化管理界面
-node 指定该节点名称,注意每个节点的名称必须唯一不能重复!上面指定了第一台服务器节点的名称为n1,那么别的节点就得用其它名称
-bootstrap-expect 最少集群的Server节点数量,少于这个值则集群失效,这个选项必须指定,由于这里是单机部署,因此设定为1即可
-advertise 这里要指定本节点外网地址,用于在集群时告诉其它节点自己的地址,如果是在自己电脑上或者是内网搭建单节点/集群则不需要带上这个参数
-client 指定可以外部连接的地址,0.0.0.0表示外网全部可以连接
除此之外,还可以加上-datacenter参数自定义一个数据中心名,同一个数据中心的节点数据中心名应当指定为一样!

# 集群部署

在学习集群部署之前,我们首先需要来了解一下在Consul集群中,节点分为下面几类:

  • Server节点:这是Consul集群的核心组成部分,用于维护集群的状态、处理查询请求、执行一致性协议以及提供服务发现和健康检查等功能
  • Client节点:用于向集群提交查询请求,并将请求转发给Server节点处理,作为服务发现和健康检查的代理,这类节点有着负载均衡、健康检查和故障转移等作用,降低Server节点的压力,搭建集群时,Client节点不是必须的

上述还提到了Agent进程这个概念,事实上Agent就可以理解为Consul运行进程,我们将其理解为一个运行中的Consul节点即可。

好的,现在我们来学习如何搭建集群,这里将提供两个示例。

# ① 全部为Server节点的集群

假设现在我要在三台服务器上面部署Consul容器,使它们构成一个集群,集群信息如下:

节点名 服务器外网地址 节点类型
agent-1 139.56.23.31 Server
agent-2 8.34.52.11 Server
agent-3 123.20.15.63 Server

通过下列命令分别在三台服务器上面创建并运行容器:

# 服务器1:139.56.23.31
docker run -id --name=consul -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8500:8500 -p 8600:8600 -v consul-data:/consul/data consul agent -server -ui -node=agent-1 -bootstrap-expect=2 -client=0.0.0.0 -advertise=139.56.23.31

# 服务器2:8.34.52.11
docker run -id --name=consul -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8500:8500 -p 8600:8600 -v consul-data:/consul/data consul agent -server -ui -node=agent-2 -bootstrap-expect=2 -client=0.0.0.0 -advertise=8.34.52.11

# 服务器3:123.20.15.63
docker run -id --name=consul -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8500:8500 -p 8600:8600 -v consul-data:/consul/data consul agent -server -ui -node=agent-3 -bootstrap-expect=2 -client=0.0.0.0 -advertise=123.20.15.63

然后分别在第二台和第三台服务器上面执行下列命令:

# 服务器2和服务器3上面都执行
docker exec -it consul consul join 139.56.23.31

这个命令的作用是使上述服务器2和服务器3的节点连结到服务器1使它们构成一整个集群,上述join参数后面是要连结的节点的外网地址。

#ServerClient节点混合集群

同样地,假设我要在三台服务器上面部署Consul容器使它们构成一个集群,集群信息如下:

节点名 服务器外网地址 节点类型
agent-1 139.56.23.31 Client
agent-2 8.34.52.11 Server
agent-3 123.20.15.63 Server

通过下列命令分别在三台服务器上面创建并运行容器:

# 服务器1:139.56.23.31 (Client)
docker run -id --name=consul -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8500:8500 -p 8600:8600 -v consul-data:/consul/data consul agent -ui -node=agent-1 -client=0.0.0.0 -advertise=139.56.23.31

# 服务器2:8.34.52.11 (Server)
docker run -id --name=consul -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8500:8500 -p 8600:8600 -v consul-data:/consul/data consul agent -server -ui -node=agent-2 -bootstrap-expect=2 -client=0.0.0.0 -advertise=8.34.52.11

# 服务器3:123.20.15.63 (Server)
docker run -id --name=consul -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8500:8500 -p 8600:8600 -v consul-data:/consul/data consul agent -server -ui -node=agent-3 -bootstrap-expect=2 -client=0.0.0.0 -advertise=123.20.15.63

然后分别在第二台和第三台服务器上面执行下列命令进行连结:

# 服务器2和服务器3上面都执行
docker exec -it consul consul join 139.56.23.31

可见上述服务器1的Consul是以Client模式运行的,其命令和启动Server模式差不多,只不过是少了-server-bootstrap-expect选项而已。

# 数据清除

如果Consul运行时出现任何问题或者无法启动,可以先停止容器,然后清除所有的数据,上述我们已经把容器中数据目录映射到数据卷了,我们删除数据卷中所有内容即可:

rm -rf /var/lib/docker/volumes/consul-data/_data/*

然后重启容器即可!注意这样也会清空集群信息,需要大家重新执行连结命令,将所有节点重新连结为集群。

# Dokcer安装ELK

# 准备

首先安装 DockerDocker-Compose 相关的组件,我们这里直接使用准备好的 ELK 镜像,执行以下命令从 Dockerhub 上拉取指定版本的镜像,在本例当中我使用的是 7.40 版本。

docker pull sebp/elk:740

# 配置

为其编写 docker-compose.yaml 文件,内容如下:

Copyversion: "3.7"
services:
  nginx:
    image: nginx
    container_name: nginx
    ports:
      - 80:80
      - 443:443
    networks:
      - internal-network
    volumes:
      - /root/Volumes/Nginx/nginx.conf:/etc/nginx/nginx.conf
      - /root/Volumes/Nginx/Configs:/etc/nginx/conf.d
    restart: always
  elk:
    image: sebp/elk:740
    container_name: elk
    ports:
      - 9200:9200
      - 5044:5044
      - 5601:5601
    expose:
      - 5601
    networks:
      - internal-network
    volumes:
      - /opt/elk-data:/var/lib/elasticsearch
      - /etc/localtime:/etc/localtime
    depends_on:
      - nginx
    ulimits:
      nproc: 262144
      nofile:
        soft: 262144
        hard: 262144
      memlock: 9223372036854775807
    restart: always

networks:
  internal-network:
    external: true

上面的 Yaml 文件内容大概意思就是开放 ELK 的 9200 与 5400 端口,然后使用 Nginx 代理 Kibana Dashboard,并且将相关的数据卷挂载了出来。

这里需要注意的是,我配置了 ulimits 节,这是因为 ELK 在启动的时候会检测相关内核参数,除了在 Yaml 编写还不够,还得变更宿主机的相关参数。关于这些参数的内容变更,请参考以下内容:

变更 /etc/security/limits.conf 文件,为其追加以下内容:

* soft nofile 204800
* hard nofile 204800
* soft nproc 204800
* hard nproc 204800

* soft memlock unlimited
* hard memlock unlimited

跳转到 /etc/security/limits.d 目录下,修改相应的 conf 文件,为其追加以下内容:

* soft nproc unlimited
* hard nproc unlimited

最后重启服务器,以上内容都是基于 CentOS 7.x 进行编写。

# 运行

安装好 docker-compose 工具以后,直接在 Yaml 文件的根目录运行 docker-compose up -d 即可。如果正常的话,访问对应的机器即可。

# 遇到的问题

# Network internal-network declared as external

fl@fulsundeMacBook-Pro:~/Desktop$ docker-compose up
ERROR: Network internal-network declared as external, but could not be found. Please create the network manually using `docker network create internal-network` and try again.
fl@fulsundeMacBook-Pro:~/Desktop$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
babdd8df43cc        bridge              bridge              local
991c54d95e61        host                host                local
c8e3bf25bb02        none                null                local

解决docker network create internal-network

fl@fulsundeMacBook-Pro:~/Desktop$ docker network create internal-network
a12e1441969e7fd1bb619fb1aaa3be3fdfb656dff99df6da8fd840d363b6074f
fl@fulsundeMacBook-Pro:~/Desktop$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
babdd8df43cc        bridge              bridge              local
991c54d95e61        host                host                local
a12e1441969e        internal-network    bridge              local
c8e3bf25bb02        none                null                local

# 挂载的时候出错

  1. Nginx

    • 问题如下

      ERROR: for nginx  Cannot start service nginx:
      OCI runtime create failed: container_linux.go:346: starting container process caused "process_linux.go:449: container init caused \"rootfs_linux.go:58:
      mounting \\\"/Volumes/data/docker/images/Nginx/nginx.conf\\\" to rootfs
      \\\"/var/lib/docker/overlay2/4330aaae9c62f8a8796bc1ea5df0d56b8e95e8a9137b5aa784e0ddcb4029d0ee/merged\\\" at \\\"/var/lib/docker/overlay2/4330aaae9c62f8a8796bc1ea5df0d56b8e95e8a9137b5aa784e0ddcb4029d0ee/merged/etc/nginx/nginx.conf\\\"
      caused \\\"not a directory\\\"\"": unknown:
      Are you trying to mount a directory onto a file (or vice-versa)?
      Check if the specified host path exists and is the expected type
    • 解决

      fl@fulsundeMacBook-Pro:~/Desktop$ docker rm $(docker ps -a -q) -f
       
      fl@fulsundeMacBook-Pro:~/Desktop$ docker run -d -p 80:80 --name nginx nginx
      bcd59b19f418087a465aeb77b2bffcd8a6e30a25fe852f7f4d286614ca525073
      fl@fulsundeMacBook-Pro:~/Desktop$ docker exec -it nginx /bin/bash
      root@bcd59b19f418:/# exit
      exit
      fl@fulsundeMacBook-Pro:~/Desktop$ docker ps
      CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
      bcd59b19f418        nginx               "nginx -g 'daemon of…"   33 seconds ago      Up 32 seconds       0.0.0.0:80->80/tcp   nginx
      fl@fulsundeMacBook-Pro:~/Desktop$ docker cp bcd59b19f418:/etc/nginx/nginx.conf /Volumes/data/docker/images/Nginx/nginx.conf
  2. ELK

    • 问题如下

      fl@fulsundeMacBook-Pro:~/Desktop$ docker-compose up
      Creating nginx ... done
      Creating elk   ... error
      
      ERROR: for elk  Cannot start service elk: OCI runtime create failed: container_linux.go:346: starting container process caused "process_linux.go:449: container init caused \"rootfs_linux.go:58:
      mounting \\\"/Volumes/data/docker/images/elk/localtime\\\" to rootfs \\\"/var/lib/docker/overlay2/94630dea70be2522ffd5d0ee80ba550f7f86df9bf141378558697b3405b5416e/merged\\\" at
      \\\"/var/lib/docker/overlay2/94630dea70be2522ffd5d0ee80ba550f7f86df9bf141378558697b3405b5416e/merged/usr/share/zoneinfo/UCT\\\"
      caused \\\"not a directory\\\"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)?
      Check if the specified host path exists and is the expected type
      
    • 解决

      fl@fulsundeMacBook-Pro:~$ cp /etc/localtime /Volumes/data/docker/images/elk/

# 安装Nacos

# 下载镜像

# 查找镜像
docker search nacos  # nacos/nacos-server

# 下载镜像 https://hub.docker.com/ docker 官方搜索查看有哪些 nacos 镜像版本
docker pull nacos/nacos-server:v2.0.3

# 查看已下载镜像
docker images

# 数据库配置

数据库文件下载github:nacos/nacos-db.sql

# 建库
create database nacos;
use nacos;

-- 执行或者导入 nacos-db.sql,不知道为什么这个文件里的注释还写了 【数据库全名 = nacos_config】
-- 可以直接复制粘贴到 navicat 或 sqlyog 上执行,200多行不是很长

# 创建 nacos 单独使用的一个用户,也可以直接把 root 用户给他
create user 'nacos'@'%' IDENTIFIED BY 'nacos';
-- 库nacos的所有表的执行存储过程、CRUD权限
grant execute, insert, select, update on nacos.* to 'nacos'@'%';
-- 刷新权限
FLUSH PRIVILEGES;

-- 查看权限
show grants for nacos;

# 创建相关目录

# 创建 nacos 日志存放目录
mkdir -p /home/docker/nacos/logs

# 创建 nacos 配置文件目录
mkdir -p /home/docker/nacos/init.d

配置文件

vim /home/docker/nacos/init.d/custom.properties

其实下面的配置应该可以下载一个nacos安装包, 然后它也自带配置文件, 应该是可以参考他的。我这里写的配置就是若使用安装包进行安装时需要修改的配置,也就是我理解的其他配置就是默认的,我们这里的配置可以覆盖那些配置

数据库的url自行处理,比如ip端口、库名等

# spring

server.contextPath=/nacos
server.servlet.contextPath=/nacos
server.port=8848

spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=root
# nacos.cmdb.dumpTaskInterval=3600
# nacos.cmdb.eventTaskInterval=10
# nacos.cmdb.labelTaskInterval=300
# nacos.cmdb.loadDataAtStart=false


# metrics for prometheus
#management.endpoints.web.exposure.include=*

# metrics for elastic search
management.metrics.export.elastic.enabled=false
#management.metrics.export.elastic.host=http://localhost:9200

# metrics for influx
management.metrics.export.influx.enabled=false
#management.metrics.export.influx.db=springboot
#management.metrics.export.influx.uri=http://localhost:8086
#management.metrics.export.influx.auto-create-db=true
#management.metrics.export.influx.consistency=one
#management.metrics.export.influx.compressed=true

server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i
# default current work dir
server.tomcat.basedir=

### spring security config
#### turn off security
#spring.security.enabled=false
#management.security=false
#security.basic.enabled=false
#nacos.security.ignore.urls=/**

nacos.security.ignore.urls=/,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/login,/v1/console/health/**,/v1/cs/**,/v1/ns/**,/v1/cmdb/**,/actuator/**,/v1/console/server/**

# nacos.naming.distro.taskDispatchPeriod=200
# nacos.naming.distro.batchSyncKeyCount=1000
# nacos.naming.distro.syncRetryDelay=5000
# nacos.naming.data.warmup=true
# nacos.naming.expireInstance=true

nacos.istio.mcp.server.enabled=false

# 创建容器并启动

docker run \
    --name nacos \
    -d \
    -p 8848:8848 \
    -p 9848:9848 \
    -p 9849:9848 \
    --restart=always \
    -e JVM_XMS=256m \
    -e JVM_XMX=256m \
    -e MODE=standalone \
    -v /home/docker/nacos/logs:/home/nacos/logs \
    -v /home/docker/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties \
    nacos/nacos-server:v2.0.3

# 查看启动日志
docker logs nacos

访问 ip:8848/nacos 用户名和密码默认都是 nacos

# DockerCompose方式

#下载git
yum -y install git
# 下载nacos-docker版本
git clone https://github.com/nacos-group/nacos-docker.git
cd nacos-docker
# nacos数据选择存放mysql中,编辑对应的环境变量 nacos-docker/env/nacos-standlone-mysql.env
# 编辑该文件,主要是改mysql的地址,更改连接的超时时间,设置JVM的堆大小。
vim env/nacos-standlone-mysql.env
version: "3"
services:
  mysql:
    container_name: mysql
    # 5.7
    image: mysql:5.7
    environment:
      # mysql root用户密码
      MYSQL_ROOT_PASSWORD: root
      TZ: Asia/Shanghai
      # 初始化数据库(后续的初始化sql会在这个库执行)
      MYSQL_DATABASE: nacos_config
      # 初始化用户(不能是root 会报错, 后续需要给新用户赋予权限)
      MYSQL_USER: nacos
      MYSQL_PASSWORD: nacos
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
      --max_allowed_packet=128M;
    volumes:
      # mysql的数据文件
      - /software/mysql/data:/var/lib/mysql
      # mysql配置文件
      - /software/mysql/conf:/etc/mysql/conf.d
    ports:
      - "8081:3306"
  nacos3:
    hostname: nacos3
    image: nacos/nacos-server:latest
    container_name: nacos3
    volumes:
      #- ./nacos/plugins/mysql/:/home/nacos/plugins/mysql/
      - /software/nacos/logs/:/home/nacos/logs
      - /software/nacos/application.properties:/home/nacos/init.d/application.properties
    environment:                      # 设置环境变量,相当于docker run命令中的-e
      - JVM_XMS=512m
      - JVM_XMX=512m
      - JVM_XMN=128m
      - MODE=standalone               #单机模式
      - SPRING_DATASOURCE_PLATFORM=mysql
      - MYSQL_SERVICE_HOST=47.119.205.45
      - MYSQL_SERVICE_PORT=8081
      - MYSQL_SERVICE_USER=nacos
      - MYSQL_SERVICE_PASSWORD=nacos
      - MYSQL_SERVICE_DB_NAME=nacos_config
    ports:
      - "8848:8848"
      #- "7848:7848"
      - "9848:9848"
      - "9849:9849"
    #env_file:
    #  - /software/nacos/nacos-hostname.env
    restart: always
    depends_on:
      - mysql

# 数据库文件

/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = 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,
  `content` longtext NOT NULL COMMENT 'content',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
  `app_name` varchar(128) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  `c_desc` varchar(256) DEFAULT NULL,
  `c_use` varchar(64) DEFAULT NULL,
  `effect` varchar(64) DEFAULT NULL,
  `type` varchar(64) DEFAULT NULL,
  `c_schema` text,
  `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';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = 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,
  `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='增加租户字段';


/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = 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 '2010-05-05 00:00:00' COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(20) 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';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = 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 '2010-05-05 00:00:00' COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(20) 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';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = 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,
  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';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = 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 '2010-05-05 00:00:00' COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_group_id` (`group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = his_config_info   */
/******************************************/
CREATE TABLE `his_config_info` (
  `id` bigint(64) unsigned NOT NULL,
  `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `data_id` varchar(255) NOT NULL,
  `group_id` varchar(128) NOT NULL,
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL,
  `md5` varchar(32) DEFAULT NULL,
  `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
  `src_user` text,
  `src_ip` varchar(20) DEFAULT NULL,
  `op_type` char(10) DEFAULT NULL,
  `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='多租户改造';


/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = 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 '2010-05-05 00:00:00' COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' 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,
	password varchar(500) NOT NULL,
	enabled boolean NOT NULL
);

CREATE TABLE roles (
	username varchar(50) NOT NULL,
	role varchar(50) NOT NULL,
	constraint uk_username_role UNIQUE (username,role)
);

CREATE TABLE permissions (
    role varchar(50) NOT NULL,
    resource varchar(512) NOT NULL,
    action varchar(8) NOT NULL,
    constraint uk_role_permission UNIQUE (role,resource,action)
);

INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);

INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');
更新于

请我喝[茶]~( ̄▽ ̄)~*

Fulsun 微信支付

微信支付

Fulsun 支付宝

支付宝