1 Star 0 Fork 28

柚子 / notebook

forked from JustryDeng / notebook 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
[12]常用中间件docker-compose快速拉起.md 27.26 KB
一键复制 编辑 原始数据 按行查看 历史

常用中间件docker-compose快速拉起

准备工作

设置base目录

# 设置基础目录
local_var_base_dir=/usr/local/docker-compose
mkdir -p $local_var_base_dir

redis相关变量设置

# 端口
local_var_redis_port=6379
# 密码
local_var_redis_pwd="123456"
# 数据挂载目录
local_var_redis_data_dir=$local_var_base_dir/redis/data

minio相关变量设置

###### minio相关变量设置 ######
# ak/sk
local_var_minio_ak="minioadmin"
local_var_minio_sk="minioadmin"
# 数据挂载目录
local_var_minio_data_dir=$local_var_base_dir/minio/data
# api请求端口
local_var_minio_api_port=9000
# 控制台端口
local_var_minio_console_port=9090

nacos相关准备

相关变量设置

# 数据挂载目录
local_var_nacos_dir=$local_var_base_dir/nacos/
# 端口
local_var_nacos_port=8848
local_var_es_port_9848=9848 # 值应该为 local_var_nacos_port + 1000
local_var_es_port_9849=9849 # 值应该为 local_var_nacos_port + 1000
# 数据库配置
local_var_nacos_db_host="192.168.44.141"
local_var_nacos_db_port=3306
local_var_nacos_db_name=nacos_config
local_var_nacos_db_user=root
local_var_nacos_db_password="dengshuai"
local_var_nacos_db_param="characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&allowPublicKeyRetrieval=true"

相关文件准备

提示:因为本人想把nacos的相关文件挂载出来,所以才需要这步;如果你不需要挂载出来的话,可略过

docker run --name nacos-tmp -d -e MODE=standalone nacos/nacos-server:v2.2.0
# 将容器中nacos-tmp中/home/nacos目录拷贝到宿主机/opt/下
docker cp nacos-tmp:/home/nacos $local_var_nacos_dir
# 移除临时容器
docker stop nacos-tmp
docker rm nacos-tmp

相关库表准备

准备sql文件
cat > /tmp/nacos_server.sql << \EOF
CREATE DATABASE nacos_config;
USE nacos_config;

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 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,
  `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';

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='增加租户字段';

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';

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';

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';

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容量信息表';

CREATE TABLE `his_config_info` (
  `id` bigint(20) 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 CURRENT_TIMESTAMP,
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `src_user` text,
  `src_ip` varchar(50) 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='多租户改造';

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,
	`password` varchar(500) NOT NULL,
	`enabled` boolean NOT NULL
);

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

CREATE TABLE `permissions` (
    `role` varchar(50) NOT NULL,
    `resource` varchar(255) NOT NULL,
    `action` varchar(8) NOT NULL,
    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');
EOF
执行sql
# 进入mysql(你也可以不用命令行,直接用客户端登录,然后执行上面的sql)
mysql -h'192.168.44.141' -P3306 -uroot -p'dengshuai'

执行sql并退出

# 执行sql,导入nacos_server初始化文件
source /tmp/nacos_server.sql;
# 查看一下
show database;
use nacos_config;
show tables;
# 退出mysql
quit

elk相关准备

相关变量设置

local_var_es_password=elastic123
local_var_es_port_9200=9200
local_var_es_port_9300=9300
local_var_kibana_port=5601
local_var_logstash_port=5044

相关文件准备

  • 创建目录相关目录

    # 创建目录相关目录
    mkdir -p $local_var_base_dir/elk/{es/data,es/plugins,es/config,logstash,kibana/config,kibana/data}
    ll  $local_var_base_dir/elk/es
    ll $local_var_base_dir/elk/logstash
    ll $local_var_base_dir/elk/kibana
    # 授权相关文件夹权限
    chmod -R 777 $local_var_base_dir/elk/es
    chmod -R 777 $local_var_base_dir/elk/logstash
    chmod -R 777 $local_var_base_dir/elk/kibana
  • 创建elasticsearch配置文件

    cat > $local_var_base_dir/elk/es/config/elasticsearch.yml << \EOF
    network.host: 0.0.0.0  #使用的网络
    http.cors.enabled: true #跨域配置
    http.cors.allow-origin: "*"
    xpack.security.enabled: true  #开启密码配置
    http.cors.allow-headers: Authorization
    xpack.security.transport.ssl.enabled: true
    # 禁止启动时更新地图相关数据库
    ingest.geoip.downloader.enabled: false
    EOF
    
    # 查看一下
    cat $local_var_base_dir/elk/es/config/elasticsearch.yml
  • 创建kibana配置文件

    cat > $local_var_base_dir/elk/kibana/config/kibana.yml << EOF
    server.host: "0.0.0.0"
    server.shutdownTimeout: "5s"
    elasticsearch.hosts: ["http://elasticsearch:9200"] #es地址;不能写localhost或者127.0.0.1,可以写内网(或公网)地址
    i18n.locale: "zh-CN"  #汉化
    elasticsearch.username: elastic # 设置账号密码
    elasticsearch.password: $local_var_es_password
    xpack.encryptedSavedObjects.encryptionKey: "fhjskloppd678ehkdfdlliverpoolfcr" # 任意不少于32位的字符即可, 官方解释https://www.elastic.co/guide/en/kibana/7.16/alert-action-settings-kb.html#general-alert-action-settings
    EOF
    
    # 查看一下
    cat $local_var_base_dir/elk/kibana/config/kibana.yml
  • 创建logstash配置文件

    cat > $local_var_base_dir/elk/logstash/logstash.yml << EOF
    http.host: "0.0.0.0"
    xpack.monitoring.elasticsearch.hosts: [ "http://elasticsearch:9200" ]  # es地址,不能写localhost或者127.0.0.1,可以写内网(或公网)地址
    xpack.monitoring.elasticsearch.username: elastic   # es账号
    xpack.monitoring.elasticsearch.password: $local_var_es_password # es密码
    EOF
    
    # 查看一下
    cat $local_var_base_dir/elk/logstash/logstash.yml
  • 创建logstash数据传输配置

    cat > $local_var_base_dir/elk/logstash/logstash.conf << EOF
    # 数据输入配置
    input {
        # 从TCP套接字读取数据
        tcp {
             mode => "server"
             host => "0.0.0.0"
             port => 5044 # 每个输入源都可以使用不同的端口号。 注:这里是容器内的端口
             codec => json_lines
        }
    
        # 从Elastic Beats框架(如filebeat)接收数据
        #beats {
        #    port => 5044 注:这里是容器内的端口
        #}
    }
    
    # 数据处理配置
    
    
    # 数据输出配置
    output {
      elasticsearch {
        hosts => ["http://elasticsearch:9200"] # es的地址和端口,不能写localhost或者127.0.0.1,可以写内网(或公网)地址
        user => "elastic" # es的账号密码
        password => "$local_var_es_password" # es的账号密码
        index => "all-log-%{+YYYY.MM.dd}" # 索引(自定义即可,因为想要按天分索引,所以后面使用变量%{+YYYY.MM.dd})
      }
    }
    EOF
    
    
    # 查看一下
    cat $local_var_base_dir/elk/logstash/logstash.conf

prometheus与grafana相关准备

prometheus相关变量设置

# 数据挂载目录
local_var_prometheus_dir=$local_var_base_dir/prometheus
# 端口
local_var_prometheus_port=9095

prometheus相关文件准备

# data目录,准备用来挂载放置prometheus的数据
# config目录,准备用来放置prometheus的配置文件
# rules目录,准备用来挂载放置prometheus的规则文件
mkdir -p $local_var_prometheus_dir/{data,config,rules}
# 授权相关文件夹权限
chmod -R 777 $local_var_prometheus_dir/data
chmod -R 777 $local_var_prometheus_dir/config
chmod -R 777 $local_var_prometheus_dir/rules


# 配置文件
cat > $local_var_prometheus_dir/config/prometheus.yml << EOF
global:
  # 数据采集间隔
  scrape_interval:     45s
  # 告警检测间隔
  evaluation_interval: 45s

# 告警规则
rule_files:
  # 这里匹配(容器中)指定目录下所有的.rules文件
  - /prometheus/rules/*.rules

# 采集配置
scrape_configs:
  # 采集项(prometheus)
  - job_name: 'prometheus'
    static_configs:
      # prometheus自带了对自身的exporter监控程序,所以不需额外安装exporter就可配置采集项
      - targets: ['localhost:9090']
EOF

# 查看一下配置文件
cat $local_var_prometheus_dir/config/prometheus.yml

grafana相关变量设置

# 数据挂载目录
local_var_grafana_dir=$local_var_base_dir/grafana
# 端口
local_var_grafana_port=3000

grafana相关文件准备

# data目录,准备用来挂载放置grafana的数据
# plugins目录,准备用来放置grafana的插件
# config目录,准备用来挂载放置grafana的配置文件
mkdir -p $local_var_grafana_dir/{data,plugins,config}
# 授权相关文件夹权限
chmod -R 777 $local_var_grafana_dir/data
chmod -R 777 $local_var_grafana_dir/plugins
chmod -R 777 $local_var_grafana_dir/config


# 先临时启动一个容器
docker run --name grafana-tmp -d grafana/grafana:9.3.2
# 将容器中默认的配置文件拷贝到宿主机上
docker cp grafana-tmp:/etc/grafana/grafana.ini $local_var_grafana_dir/config/grafana.ini
# 移除临时容器
docker stop grafana-tmp
docker rm grafana-tmp
# 修改配置文件(需要的话)
# vim /opt/grafana/config/grafana.ini

生成docker-compose文件

确认一下局部变量是否正确

set | grep local_var_

生成docker-compose.yml

cat > $local_var_base_dir/docker-compose.yml << EOF
version: '3' #指定compose文件的版本号,目前有1,2,3这三个版本

services:
  redis:
    image: redis:7.0.5
    container_name: redis
    restart: always
    volumes:
      - $local_var_redis_data_dir:/data
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "$local_var_redis_port:6379"
    command: redis-server --appendonly yes --bind 0.0.0.0  --requirepass "$local_var_redis_pwd"

  minio:
    image: minio/minio:RELEASE.2022-12-07T00-56-37Z
    container_name: minio
    restart: always
    environment:
      - "MINIO_ACCESS_KEY=$local_var_minio_ak"
      - "MINIO_SECRET_KEY=$local_var_minio_sk"
    volumes:
      - $local_var_minio_data_dir:/data
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "$local_var_minio_api_port:9000"
      - "$local_var_minio_console_port:9090"
    command:  server /data --console-address ":9090" -address ":9000"

  nacos:
    image: nacos/nacos-server:v2.2.0
    container_name: nacos
    restart: always
    environment:
      - "MODE=standalone"
      - "MYSQL_SERVICE_HOST=$local_var_nacos_db_host"
      - "MYSQL_SERVICE_PORT=$local_var_nacos_db_port"
      - "MYSQL_SERVICE_DB_NAME=$local_var_nacos_db_name"
      - "MYSQL_SERVICE_USER=$local_var_nacos_db_user"
      - "MYSQL_SERVICE_PASSWORD=$local_var_nacos_db_password"
      - "MYSQL_SERVICE_DB_PARAM=$local_var_nacos_db_param"
    privileged: true # 使容器中的root拥有真正的root权限
    volumes:
      # 注: 如果你要挂载nacos的相关文件出来, 那么这里一定要处理好, 要不然nacos可能起不起来.
      #     可以先不挂载启动一个临时的nacos, 然后把目录复制出来, 然后再在它的基础上进行修改.
      #     接着再删除刚才临时创建的nacos容器, 最后再正式启动nacos
      - $local_var_nacos_dir:/home/nacos/
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "$local_var_nacos_port:8848"
      # nacos2的话,还需要多开放两个端口.
      # 主端口的值 + 1000:客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求
      # 主端口的值 + 1001:服务端gRPC请求服务端端口,用于服务间同步等
      - "$local_var_es_port_9848:9848" 
      - "$local_var_es_port_9849:9849"
      
  elasticsearch: # 指定服务名
    image: elasticsearch:7.17.5  #镜像
    container_name: elasticsearch-7.17.5  #定义容器名称
    restart: always  #开机启动,失败也会一直重启
    environment: #环境变量设置
      - "cluster.name=elasticsearch" 
      - "discovery.type=single-node"
      # 若启动时报错 exited with code 137,则调大此参数即可
      - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"
    volumes: #挂载设置 {宿主机目录或文件}:{容器目录或文件}
      - /etc/localtime:/etc/localtime:ro
      - $local_var_base_dir/elk/es/plugins:/usr/share/elasticsearch/plugins
      - $local_var_base_dir/elk/es/data:/usr/share/elasticsearch/data
      - $local_var_base_dir/elk/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
    ports: # 端口映射 {宿主机端口}:{容器端口}
      - "$local_var_es_port_9200:9200" 
      - "$local_var_es_port_9300:9300"

  kibana:
    image: kibana:7.17.5
    container_name: kibana-7.17.5
    restart: always
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - $local_var_base_dir/elk/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml
      - $local_var_base_dir/elk/kibana/data:/usr/share/kibana/data
    depends_on: # 指定此服务依赖哪些服务
      - elasticsearch
    environment:
      - ELASTICSEARCH_URL=http://elasticsearch:9200
    ports:
      - "$local_var_kibana_port:5601"

  logstash:
    image: logstash:7.17.5
    container_name: logstash-7.17.5
    restart: always
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - $local_var_base_dir/elk/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml
      - $local_var_base_dir/elk/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf
    depends_on:
      - elasticsearch
    ports:
      - "$local_var_logstash_port:5044"

  prometheus:
    image: prom/prometheus:v2.41.0
    container_name: prometheus
    restart: always
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - $local_var_prometheus_dir/data:/prometheus/data
      - $local_var_prometheus_dir/config:/prometheus/config
      - $local_var_prometheus_dir/rules:/prometheus/rules
    ports:
      - "$local_var_prometheus_port:9090"
    command:
      - '--config.file=/prometheus/config/prometheus.yml'
      - '--web.enable-lifecycle'

  grafana:
    image: grafana/grafana:9.3.2
    container_name: grafana
    restart: always
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - $local_var_grafana_dir/data:/var/lib/grafana
      - $local_var_grafana_dir/plugins/:/var/lib/grafana/plugins
      - $local_var_grafana_dir/config/grafana.ini:/etc/grafana/grafana.ini
    ports:
      - "$local_var_grafana_port:3000"
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin
      - GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource,grafana-piechart-panel
EOF

检查(或修改)docker-compose.yml

提示:前面的所有工作,都是为了能快速生成这个docker-compose.yml而作的准备,如果前面的步骤有错漏也不要紧,只需要保证这个docker-compose.yml文件是服务业务正确的即可

cd $local_var_base_dir
pwd
ll
# 直接查看docker-compose.yml文件
cat $local_var_base_dir/docker-compose.yml
# 再检查经过docker-compose解析后的docker-compose.yml内容是否符合预期
docker-compose config

拉起docker-compose

拉起

docker-compose up -d

设置es相关密码并重启elk

提示:启动ELK需要一点时间,等一会儿(或通过docker-compose logs -f --tail=100 {es的服务名}观察到elasticsearch服务启动完成后。 注:此时查看es的日志,可能会报类似于Authentication of [elastic] was terminated by realm这样的错,这是因为我们还没进行完此步)再进行此步骤

进入es容器

# docker exec -it {es容器名} /bin/bash
# 注:docker ps可查看容器名或容器id
docker exec -it elasticsearch-7.17.5 /bin/bash

执行设置密码的脚本

# 若执行上面的步骤后,马上进入容器执行此指令,可能会报错。 可以等一会儿再进入容器来执行此指令。或者当执行报错时,退出容器再进入,再试
./bin/elasticsearch-setup-passwords interactive

然后依次给各个账号设置密码

elastic、apm_system、kibana_system、logstash_system、beats_system、remote_monitoring_user 注:本人设置的密码较简单,直接以{账号名}123作为的密码

image-20221019152200965

退出容器Ctrl+P+Q,然后重启es容器即可

docker-compose restart elasticsearch
docker-compose restart kibana
docker-compose restart logstash

检查&访问测试

提示:访问前请确保端口已开

# 查看日志,正常
docker-compose logs --tail=50 -f minio
# 访问测试说明
echo ===\> 访问测试说明: 访问 http://{hostname}:$local_var_minio_console_port ,并用 $local_var_minio_ak / $local_var_minio_sk 进行登录测试

# 查看日志,正常
docker-compose logs --tail=50 -f redis
# 访问测试说明
echo ===\> 访问测试说明: 执行 'docker exec -it redis redis-cli' , 输入 auth $local_var_redis_pwd ,然后输入 ping, 返回pong则说明成功, 然后quit退出即可

# 查看日志,正常
docker-compose logs --tail=50 -f nacos
# 访问测试说明
echo ===\> 访问测试说明: 访问 http://{hostname}:$local_var_nacos_port/nacos ,并用 nacos / nacos 进行登录测试

# 查看日志,正常
docker-compose logs --tail=50 -f elasticsearch
# 访问测试说明
echo ===\> 访问测试说明: 访问 http://{hostname}:$local_var_es_port_9200 ,并用 elastic / $local_var_es_password 完成登录认证

# 查看日志,正常
docker-compose logs --tail=50 -f kibana
echo ===\> 访问测试说明: 访问 http://{hostname}:$local_var_kibana_port ,并用 elastic / $local_var_es_password 完成登录认证

# 查看日志,正常
docker-compose logs --tail=50 -f logstash
# 向logstash发送json(多发几条),然后去kibana里面看是否收到了
curl 'http://{hostname}:{logstash端口}'   -H "Content-Type:application/json"   -X POST   -d '{"name":"邓沙利文","msg":"test-logstash"}'

# 查看日志,正常
docker-compose logs --tail=50 -f prometheus
# 访问测试说明
echo ===\> 访问测试说明: 访问 http://{hostname}:$local_var_prometheus_port 即可

# 查看日志,正常
docker-compose logs --tail=50 -f grafana
# 访问测试说明
echo ===\> 访问测试说明: 访问 http://{hostname}:$local_var_grafana_port ,并用 admin / admin 完成登录认证(首登录后会让修改密码). 然后根据自己的需要,配置各种exporter
1
https://gitee.com/WY784755850/notebook.git
git@gitee.com:WY784755850/notebook.git
WY784755850
notebook
notebook
master

搜索帮助