七、Docker常用安装
-
搜索镜像:docker search ...
-
拉取镜像:docker pull ...
-
查看镜像:docker images
-
创建容器:docker run -it ...
-
停止容器:docker stop ...
-
移除容器:docker rm -f ...
2. 安装tomcat
1. docker search tomcat:8.5.32 输出结果: NAME DESCRIPTION STARS OFFICIAL AUTOMATED tomcat Apache Tomcat is an open source implementati… 3106 [OK] 2.docker pull tomcat 3.mkdir ~/tomcat 4.cd ~/tomcat 5.docker images 6.docker run -id --name=tomcat_8081 \ -p 8081:8080 \ -v $PWD:/usr/local/tomcat/webapps \ tomcat:8.5.32 参数说明: $PWD:代表宿主机的当前路径 -p 8080:8080 将容器8080端口映射到主机的8080端口 -v $PWD:/usr/local/tomcat/webapps:将主机中的当前目录挂载到容器的webapps
若想将项目部署至根目录下,需要在tomcat文件夹中创建ROOT文件夹,将项目文件全部拷贝至ROOT文件夹中即可。
3.安装nginx
1.docker pull nginx 2.mkdir ~/nginx 3.cd ~/nginx 4.docker run -d --name=c_nginx -p 80:80 nginx #创建nginx容器
配置负载均衡
1. docker cp c_nginx:/etc/nginx/nginx.conf nginx.conf # 将nginx.conf配置文件复制出来
2. docker cp c_nginx:/etc/nginx/conf.d/default.conf default.conf # 将default.conf 配置文件复制出来
nginx.conf 文件内容修改如下:
user nginx; worker_processes auto; error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; keepalive_timeout 65; # 此处配置负载均衡 upstream springcloud{ server 192.168.253.133:8080; server 192.168.253.130:8081; } include /etc/nginx/conf.d/*.conf; }
添加 upstream springcloud
(这个名称随便写) 下面配置的就是两个web应用所在的的ip地址以及端口号 ,注意web地址一定要用真实的IP,就算是本地测试,也不能使用127.0.0.1或者localhost
default.conf 内容修改如下:
server { listen 80; listen [::]:80; server_name localhost; location / { proxy_pass http://springcloud; # 配置负载均衡 root /usr/share/nginx/html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
proxy_pass http://springcloud; 这个地址就是nginx.conf 中upstream 后面的名称,不要写错了
当前也可以直接使用容器卷:
docker run -d --name c_nginx -p 80:80 -v $PWD/default.conf:/etc/nginx/default.conf -v $PWD/nginx.conf:/etc/nginx/nginx.conf --net 你的网络名称 --restart=always nginx
接下来需要将nginx.conf与default.conf 这两个重新复制回容器中
3. docker cp nginx.conf c_nginx:/etc/nginx/nginx.conf 4. docker cp default.conf c_nginx:/etc/nginx/conf.d/default.conf 5. docker restart c_nginx # 重启nginx 容器
接下来就可以通过nginx 服务器IP访问了,大功告成!!
4. 安装mysql
$ docker pull mysql:5.7 $ mkdir ~/mysql $ cd ~/mysql $ docker run -d \ -p 3306:3306 --name c_mysql \ -v $PWD/conf:/etc/mysql/conf.d \ -v $PWD/logs:/logs \ -v $PWD/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
命令说明: -p 3306:3306:将主机的3306端口映射到docker容器的3306端口。 --name c_mysql:运行服务名字 -v $PWD/conf:/etc/mysql/conf.d :将主机/root/mysql录下的conf/my.cnf 挂载到容器的 /etc/mysql/conf.d -v $PWD/logs:/logs:将主机/root/mysql目录下的 logs 目录挂载到容器的 /logs。 -v $PWD/data:/var/lib/mysql :将主机/root/mysql目录下的data目录挂载到容器的 /var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。 mysql:5.7: 后台程序运行mysql5.7
运行以下命令可进入mysql命令窗口:
docker exec -it c_mysql /bin/bash
登录mysql:
mysql -uroot -p123456
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | +--------------------+ 5 rows in set (0.09 sec)
5.安装redis
1.docker pull redis:7.0.5 2.mkdir ~/redis 3.cd ~/redis 4.docker run -d -p 6379:6379 --name=redis \ --privileged=true \ --restart=always \ -v $PWD/conf/redis.conf:/etc/redis/redis.conf \ -v $PWD/data:/data redis:7.0.5 \ redis-server /etc/redis/redis.conf --appendonly yes --privileged=true:表示给容器root权限,否则无法使用appenonly redis-server:表示使用右侧路径中的配置文件启动。 --appendonly yes : 指定以aof形式启动
5.1 redis-cli 命令的基本操作
一、 redis-cli 连接 redis:
语法:docker exec -it 窗口名或者窗口ID redis-cli [-h ip地址] [-p 端口号]
docker exec -it c_redis redis-cli -h 127.0.0.1 -p 6379
-
-h 用于指定 ip
-
-p 用于指定端口
-
-a 用于指定认证密码
5.2 配置redis
在 /redis/redis.conf 目录下新建文件 redis.conf
vim /redis/redis.conf/redis.conf bind 0.0.0.0 protected-mode yes port 6379 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize no pidfile /var/run/redis_6379.pid loglevel notice logfile "" databases 16 always-show-logo no set-proc-title yes proc-title-template "{title} {listen-addr} {server-mode}" stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb rdb-del-sync-files no dir /data requirepass 123456 replica-serve-stale-data yes replica-read-only yes repl-diskless-sync no repl-diskless-sync-delay 5 repl-diskless-load disabled repl-disable-tcp-nodelay no replica-priority 100 acllog-max-len 128 lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no lazyfree-lazy-user-del no lazyfree-lazy-user-flush no oom-score-adj no oom-score-adj-values 0 200 800 disable-thp yes appendonly yes appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes aof-use-rdb-preamble yes lua-time-limit 5000 slowlog-log-slower-than 10000 slowlog-max-len 128 latency-monitor-threshold 0 notify-keyspace-events "" hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-size -2 list-compress-depth 0 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 hll-sparse-max-bytes 3000 stream-node-max-bytes 4096 stream-node-max-entries 100 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit replica 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 dynamic-hz yes aof-rewrite-incremental-fsync yes rdb-save-incremental-fsync yes jemalloc-bg-thread yes 通过客户端工具设置 也可以通过客户端工具设置配置信息 127.0.0.1:6379> info server -- 查看配置信息 # Server redis_version:7.0.5 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:6dfaa38315e9cd59 redis_mode:standalone os:Linux 3.10.0-1160.71.1.el7.x86_64 x86_64 arch_bits:64 monotonic_clock:POSIX clock_gettime multiplexing_api:epoll atomicvar_api:c11-builtin gcc_version:10.2.1 process_id:1 process_supervised:no run_id:557c1683ceef823d0c6a9c72c0d52bf64b224f8b tcp_port:6379 server_time_usec:1678350087814787 uptime_in_seconds:614 uptime_in_days:0 hz:10 configured_hz:10 lru_clock:628487 executable:/data/redis-server config_file:/etc/redis/redis.conf io_threads_active:0 127.0.0.1:6379> config set requirepass 123456 --设置密码 OK 127.0.0.1:6379> config get requirepass 1) "requirepass" 2) "123456" 127.0.0.1:6379> config set bind 0.0.0.0 -- 设置绑定主机 OK 127.0.0.1:6379> config get bind 1) "bind" 2) "0.0.0.0"
6. 安装RabbitMQ
-
下载带web管理客户端的镜像:
docker pull rabbitmq:management
-
创建容器并运行(15672是管理界面的端口,5672是服务的端口。这里顺便将管理系统的用户名和密码设置为admin admin)
-
docker run -d --name=rabbit --restart=always -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 rabbitmq:management
若未设置,RABBITMQ_DEFAULT_USER,RABBITMQ_DEFAULT_PASS 时,默认账号密码都为:guest
-
打开浏览器,输入网址:http://localhost:15672 ,输入账号与密码即可登录rabbitmq 客户端管理界面
7. 部署.NetCore 项目
-
创建项目时,将启用docker 选中(后期也能动态添加dockerFile)
-
编写完代码时,编译生成
-
构造镜像
Dockerfile 样本:
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base COPY . /unit8 WORKDIR /unit8 EXPOSE 8888 ENTRYPOINT ["dotnet", "Step4.Unit8.dll","--urls","http://0.0.0.0:8888"]
在解决方案文件夹中点击打开powershell :docker build -t 镜像名:版本号 -f Dockerfile路径 .
注意后面一个 .,这是一个大坑
docker build -t unit8:1.0 -f ./DockerFile .
-
压缩镜像,方便传输至linux系统
Docker save -o 路径/文件名
Docker save -o D:/unit8.tar
-
将压缩后的镜像文件上传至linux系统
-
解压导入镜像文件
Docker load --input 文件
docker load --input unit8.tar
-
Docker images -a 查看镜像是否生成
-
生成容器
Docker run -it -p 端口号:80 --name 容器名 镜像名:版本号
docker run -it -p 9050:8888 --name=unit8 unit8:1.0 /bin/bash
访问宿主机数据库
在MySQL中执行以下语句进行授权:
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; mysql>flush privileges; // 其中各字符的含义: // *.* 对任意数据库任意表有效 // "root" "123456" 是数据库用户名和密码 // '%' 允许访问数据库的IP地址,%意思是任意IP,也可以指定IP // flush privileges 刷新权限信息
访问MySQL容器
注意,数据库连接字符串要用宿主机的IP地址,如:
server=192.168.52.147;uid=root;pwd=123456;database=test;sslmode=none
192.168.52.147 这个就是我宿主机的IP地址(虚拟机)
8. 安装ELK
"日志主要包括系统日志和应用程序日志,运维和开发人员可以通过日志了解服务器中软硬件的信息,检查应用程序或系统的故障,了解故障出现的原因,以便解决问题。分析日志可以更清楚的了解服务器的状态和系统安全状况,从而可以维护服务器稳定运行。
但是日志通常都是存储在各自的服务器中。如果管理数十台服务器, 查阅日志需要依次登陆不同的服务器,查看过程就会很繁琐从而导致工作效率低下。虽然可以使用 rsyslog 服务将日志汇总。但是统计一些日志中的数据或者检索也是很麻烦的,一般使用grep、awk、wc、sort等Linux命令来统计和检索。如果对数量巨大的日志进行统计检索,人工的效率还是十分低下。
通过我们对日志进行收集、汇总到一起,完整的日志数据具有非常重要的作用:
-
信息查找。通过检索日志信息,查找相应的报错,可以快速的解决BUG。
-
数据分析。如果是截断整理格式化后的日志信息,可以进一步对日志进行数据分析和统计,可以选出头条,热点,或者爆款。
-
系统维护。对日志信息分析可以了解服务器的负荷和运行状态。可以针对性的对服务器进行优化。
二、ELK简介
ELK实时日志收集分析系统可以完美的解决以上问题。ELK作为一款开源软件可以免费使用,也有强大的团队和社区对它实时更新。
ELK主要由ElasticSearch、Logstash和Kibana三个开源工具组成,还有其他专门由于收集数据的轻量型数据采集器Beats。
Elasticsearch :分布式搜索引擎。具有高可伸缩、高可靠、易管理等特点。可以用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 是用Java 基于 Lucene 开发,现在使用最广的开源搜索引擎之一,Wikipedia 、StackOverflow、Github 等都基于它来构建自己的搜索引擎。
在elasticsearch中,所有节点的数据是均等的。
Logstash :数据收集处理引擎。支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储以供后续使用。
Kibana :可视化化平台。它能够搜索、展示存储在 Elasticsearch 中索引数据。使用它可以很方便的用图表、表格、地图展示和分析数据。
Filebeat:轻量级数据收集引擎。相对于Logstash所占用的系统资源来说,Filebeat 所占用的系统资源几乎是微乎及微。它是基于原先 Logstash-fowarder 的源码改造出来。换句话说:Filebeat就是新版的 Logstash-fowarder,也会是 ELK Stack 在 Agent 的第一选择。
版本说明:
Elasticsearch、Logstash、Kibana、Filebeat安装的版本号必须全部一致,不然会出现kibana无法显示web页面。
安装步骤
1. ElasticSearch
docker pull elasticsearch:7.7.1
准备好三个目录:config, logs,data用于挂载数据。
cd /root/es
mkdir {config,logs,data}
在/root/es/config 下准备好一个配置文件elasticsearch.yml:
cluster.name: "docker-cluster" network.host: 0.0.0.0 http.port: 9200 # 配置跨域 http.cors.enabled: true http.cors.allow-origin: "*"
给/root/es 目录赋予root 用户权限
# 查看root用户的uid,语法: id 用户名,例如: $ id root uid=0(root) gid=0(root) 组=0(root) # 如果是其他用户的话,可以将用户加入至root组来:usermod -G root 用户名 $ usermod -G root renwoxing uid=1000(renwoxing) gid=1000(renwoxing) 组=1000(renwoxing),0(root) # 给es 目录赋予权限 ,我的用户 uid 是1000 $ chown -R 1000 /root/es 创建容器: docker run -d --name es -p 9200:9200 -p 9300:9300 \ --restart=always --privileged=true \ -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e "discovery.type=single-node" \ -v $PWD/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ -v $PWD/data:/usr/share/elasticsearch/data \ -v $PWD/logs:/usr/share/elasticsearch/logs \ elasticsearch:7.7.1 -d:后台启动 --name:容器名称 -p:端口映射 -e:设置环境变量 discovery.type=single-node:单机运行 如果启动不了,可以加大内存设置:-e ES_JAVA_OPTS="-Xms512m -Xmx512m" 9200端口:为浏览器访问的 http 协议 RESTful 端口 9300 端口为 Elasticsearch 集群间组件的通信端口 此时打开浏览器:http://localhost:9200/,可以响应如下数据: { "name": "5bd8a096e91d", "cluster_name": "docker-cluster", "cluster_uuid": "cnEAk45MSjyudH2gYh6Qbw", "version": { "number": "7.7.1", "build_flavor": "default", "build_type": "docker", "build_hash": "ad56dce891c901a492bb1ee393f12dfff473a423", "build_date": "2020-05-28T16:30:01.040088Z", "build_snapshot": false, "lucene_version": "8.5.1", "minimum_wire_compatibility_version": "6.8.0", "minimum_index_compatibility_version": "6.0.0-beta1" }, "tagline": "You Know, for Search" }
2. ElasticSearch-Head
为什么要安装ElasticSearch-Head
呢,原因是需要有一个管理界面进行查看ElasticSearch
相关信息
$ docker pull mobz/elasticsearch-head:5
$ docker run -d --name es_head -p 9100:9100 mobz/elasticsearch-head:5
3. 安装logstash
数据收集处理引擎。支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储以供后续使用。
(1) 在/root/logstash/conf 路径下提前准备好一个配置文件logstash.yml 文件:
$ mkdir logstash $ cd logstash $ vim logstash.yml http.host: "0.0.0.0" xpack.monitoring.elasticsearch.url: http://192.168.253.137:9200 xpack.monitoring.elasticsearch.username: elastic xpack.monitoring.elasticsearch.password: changme path.config: /data/docker/logstash/conf.d/*.conf path.logs: /var/log/logstash
(2) 编辑syslog.conf文件,此处先配置logstash直接采集本地数据发送至es
$ vim /root/logstash/conf.d/syslog.conf input { syslog { type => "system-syslog" port => 5044 } } output { elasticsearch { hosts => ["192.168.253.137:9200"] # 定义es服务器的ip index => "system-syslog-%{+YYYY.MM}" # 定义索引 } }
(3) 编辑本地rsyslog配置增加:
vim /etc/rsyslog.conf #增加一行,指向logstash
*.* @@192.168.253.137:5044
(4) 配置修改后重启服务
systemctl restart rsyslog
(5) 安装logstash
$ docker pull logstash:7.7.1 $ docker run -d --name logstash -p 5044:5044 \ --restart=always --privileged=true \ -v $PWD/conf/logstash.yml:/usr/share/logstash/config/logstash.yml \ -v $PWD/conf.d:/data/docker/logstash/conf.d logstash:7.7.1
PS:此处有个注意点,启动会提示找不到 /usr/share/logstash/config/logstash.yml 文件,注意需要添加--privileged=true参数
3. 安装 Kabana
(1) 下载镜像
docker pull kibana:7.7.1
(2) 安装kibana
$ docker run --name kibana -p 5601:5601 -d -e ELASTICSEARCH_URL=http://192.168.253.137:9200 kibana:7.7.1
(3) 修改kibana 容器的配置 /config/kibana.yml
server.name: kibana server.host: "0" elasticsearch.hosts: [ "http://172.17.0.4:9200" ] #这个IP是es 容器内部的IP地址,docker inspect es 可以查看到 monitoring.ui.container.elasticsearch.enabled: true
kibana 启动有点慢,需要多等一会儿。
9. 安装Consul
拉取Consul镜像
$ docker pull consul # 默认拉取latest
$ docker pull consul:1.6.1 # 拉取指定版本
安装并运行
-
docker run -d -p 8500:8500 --restart=always --name=consul consul:1.6.1 agent -server -bootstrap -ui -node=1 -client='0.0.0.0'
agent: 表示启动 Agent 进程。
-
server:表示启动 Consul Server 模式
-
client:表示启动 Consul Cilent 模式。
-
bootstrap:表示这个节点是 Server-Leader ,每个数据中心只能运行一台服务器。技术角度上讲 Leader 是通过 Raft 算法选举的,但是集群第一次启动时需要一个引导 Leader,在引导群集后,建议不要使用此标志。
-
ui:表示启动 Web UI 管理器,默认开放端口 8500,所以上面使用 Docker 命令把 8500 端口对外开放。
-
node:节点的名称,集群中必须是唯一的,默认是该节点的主机名。
-
client:consul服务侦听地址,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1所以不对外提供服务,如果你要对外提供服务改成0.0.0.0
-
join:表示加入到某一个集群中去。 如:-json=192.168.0.11。
10. 安装 RocketMQ
首先,我们需要Docker-Compose环境。
首先我们需要创建docker-compose.yml
配置文件。文件内容如下
version: '3.5' services: rmqnamesrv: image: foxiswho/rocketmq:server-4.4.0 container_name: rmqnamesrv ports: - 9876:9876 volumes: - ./logs:/opt/logs - ./store:/opt/store networks: rmq: aliases: - rmqnamesrv rmqbroker: image: foxiswho/rocketmq:broker-4.4.0 container_name: rmqbroker ports: - 10909:10909 - 10911:10911 volumes: - ./logs:/opt/logs - ./store:/opt/store - ./conf/broker.conf:/etc/rocketmq/broker.conf environment: NAMESRV_ADDR: "rmqnamesrv:9876" JAVA_OPTS: " -Duser.home=/opt" JAVA_OPT_EXT: "-server -Xms128m -Xmx128m -Xmn128m" command: mqbroker -c /etc/rocketmq/broker.conf depends_on: - rmqnamesrv networks: rmq: aliases: - rmqbroker rmqconsole: image: styletang/rocketmq-console-ng:1.0.0 container_name: rmqconsole ports: - 8080:8080 environment: JAVA_OPTS: "-Drocketmq.namesrv.addr=rmqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" depends_on: - rmqnamesrv networks: rmq: aliases: - rmqconsole networks: rmq: name: rmq driver: bridge
然后在与docker-compose.yml
同级下面相应的建立三个文件夹conf
、logs
、store
。然后在conf
文件夹下面建立broker.conf
配置文件,所有文件的目录位置如下所示。
docker-compose.yml
conf
- broker.conf
logs
store
然后在编写broker.conf
配置文件里面的内容
# Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You 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. # 所属集群名字 brokerClusterName=DefaultCluster # broker 名字,注意此处不同的配置文件填写的不一样,如果在 broker-a.properties 使用: broker-a, # 在 broker-b.properties 使用: broker-b brokerName=broker-a # 0 表示 Master,> 0 表示 Slave brokerId=0 # nameServer地址,分号分割 # namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876 # 启动IP,如果 docker 报 com.alibaba.rocketmq.remoting.exception.RemotingConnectException: connect to <192.168.0.120:10909> failed # 解决方式1 加上一句 producer.setVipChannelEnabled(false);,解决方式2 brokerIP1 设置宿主机IP,不要使用docker 内部IP brokerIP1=10.255.52.130 # 在发送消息时,自动创建服务器不存在的topic,默认创建的队列数 defaultTopicQueueNums=4 # 是否允许 Broker 自动创建 Topic,建议线下开启,线上关闭 !!!这里仔细看是 false,false,false autoCreateTopicEnable=true # 是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭 autoCreateSubscriptionGroup=true # Broker 对外服务的监听端口 listenPort=10911 # 删除文件时间点,默认凌晨4点 deleteWhen=04 # 文件保留时间,默认48小时 fileReservedTime=120 # commitLog 每个文件的大小默认1G mapedFileSizeCommitLog=1073741824 # ConsumeQueue 每个文件默认存 30W 条,根据业务情况调整 mapedFileSizeConsumeQueue=300000 # destroyMapedFileIntervalForcibly=120000 # redeleteHangedFileInterval=120000 # 检测物理文件磁盘空间 diskMaxUsedSpaceRatio=88 # 存储路径 # storePathRootDir=/home/ztztdata/rocketmq-all-4.1.0-incubating/store # commitLog 存储路径 # storePathCommitLog=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/commitlog # 消费队列存储 # storePathConsumeQueue=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/consumequeue # 消息索引存储路径 # storePathIndex=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/index # checkpoint 文件存储路径 # storeCheckpoint=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/checkpoint # abort 文件存储路径 # abortFile=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/abort # 限制的消息大小 maxMessageSize=65536 # flushCommitLogLeastPages=4 # flushConsumeQueueLeastPages=2 # flushCommitLogThoroughInterval=10000 # flushConsumeQueueThoroughInterval=60000 # Broker 的角色 # - ASYNC_MASTER 异步复制Master # - SYNC_MASTER 同步双写Master # - SLAVE brokerRole=ASYNC_MASTER # 刷盘方式 # - ASYNC_FLUSH 异步刷盘 # - SYNC_FLUSH 同步刷盘 flushDiskType=ASYNC_FLUSH # 发消息线程池数量 # sendMessageThreadPoolNums=128 # 拉消息线程池数量 # pullMessageThreadPoolNums=128
配置文件中的内容我们只需要改动一点即可,即brokerIP1
这个属性,我们将其更改为我们本机的ip,可以利用ipconfig
进行查看。
修改完以后我们直接在docker-compose.yml
文件所在的位置输入命令docker-compose up
即可启动。启动成功以后在浏览器中输入http://localhost:8080/
即可看到管理页面,就表示我们搭建成功了
11. 安装Nacos
-
安装git
yum install -y git
-
安装docker compose
# 1. 从github上下载docker-compose二进制文件安装 curl -L https://github.com/docker/compose/releases/download/1.27.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose # 2. 添加可执行权限 sudo chmod +x /usr/local/bin/docker-compose # 3. 测试安装结果 docker-compose --version # 卸载(别卸载哈) rm /usr/local/bin/docker-compose
-
Clone 项目
git clone https://github.com/nacos-group/nacos-docker.git cd nacos-docker
-
修改application.properties文件
位置:./nacos-docker/example/init.d/application.properties
主要修改以下几个属性:
-
db.url.0 : MySQL 连接地址
-
db.user.0:MySQL 用户名
-
db.password.0: MySQL 密码
-
-
创建Nacos 数据库,用于保存Nacos中产生的数据
/******************************************/ /* 数据库全名 = 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(255) 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, PRIMARY KEY (`id`), UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 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(255) 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 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 '租户字段', PRIMARY KEY (`id`), UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 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 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 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 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 '租户字段', 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 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 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 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');
-
在 ./nacos-docker/example 目录下新建 nacos.yaml 文件,配置内容如下:
version: "3.8" services: nacos: image: nacos/nacos-server container_name: nacos env_file: - ../env/custom-application-config.env volumes: - ./standalone-logs/:/home/nacos/logs - ./init.d/application.properties:/home/nacos/conf/application.properties ports: - "8848:8848" - "9848:9848" environment: JVM_XMS: 512m JVM_XMX: 512m restart: on-failure
-
JVM_XMS: 就是初始分配堆内存配置-Xms,默认 :2g
-
JVM_XMX:就是堆内存最大配置-Xmx,默认 :2g
-
JVM_XMN:就是堆内存中年轻代内存大小配置-Xmn,默认 :1g
-
JVM_MS:就是元数据空间-XX:MetaspaceSize,默认 :128m
-
JVM_MMS:就是元数据空间-XX:MaxMetaspaceSize,默认 :320m
-
-
单机模式 创建容器
docker-compose -f example/nacos.yaml up
访问:http://你的IP地址:8848/nacos
默认登录账号:nacos
,密码:nacos
12. Sentry 安装
Sentry 是一款异常日志监控报警组件,非常强大
Sentry 安装的硬性条件
-
Linux 系统 (4核,4G内存)
-
Docker 版本 docker-ce-19.03.9 及以上(可以卸载,然后重新安装新的)
-
Docker Compose 1.27.2 及以上
本人试过直接用Docker 镜像安装,过程会出现各种各样的问题,依赖的组件也多,我们选择直接用git 下载源码进行安装
-
安装git
yum install -y git
-
克隆项目(github有可能下载失败,gitee下载没问题)
git clone https://gitee.com/jie51886/onpremise.git
-
查看下载目录(onpremise 是克隆代码)
ls anaconda-ks.cfg onpremise # 进入到这个目录中 cd onpremise
-
到onpremise 目录中进行安装
./install.sh
这个过程需要的时间比较长(下载镜像,生成容器等等操作),注意完事之后会询问你是否创建管理员邮箱账号,记得一定要填写!!
-
启动
docker-compose up -d
-
验证访问:
http://你的虚拟机IP:9000
(记得暴露9000的端口或者关闭防火qiang)
如果一不小心将DSN忘记了,如果寻找DSN:?
Projects -> 选择你刚创建的项目 -> 点进去 -> 左上角点击设置小图标 -> 点击client keys(dsn)