1.总体步骤<br><br>
- 搜索镜像:docker search ...
- 拉取镜像:docker pull ...
- 查看镜像:docker images
- 创建容器:docker run -it ...
- 停止容器:docker stop ...
- 移除容器:docker rm -f ...
2. 安装tomcat<br><br>- 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<br><br>- 1.docker pull nginx
- 2.mkdir ~/nginx
- 3.cd ~/nginx
- 4.docker run -d --name=c_nginx -p 80:80 nginx #创建nginx容器
复制代码
配置负载均衡<br><br>- 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;<br><br>error_log /var/log/nginx/error.log notice;
- pid /var/run/nginx.pid;<br><br>
- events {
- worker_connections 1024;
- }<br><br>
- http {
- include /etc/nginx/mime.types;
- default_type application/octet-stream;<br><br> log_format main '$remote_addr - $remote_user [$time_local] "$request" '
- '$status $body_bytes_sent "$http_referer" '
- '"$http_user_agent" "$http_x_forwarded_for"';<br><br> access_log /var/log/nginx/access.log main;<br><br> sendfile on;
-
- keepalive_timeout 65;<br><br> # 此处配置负载均衡
- upstream springcloud{
- server 192.168.253.133:8080;
- server 192.168.253.130:8081;
- }<br><br> 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;<br><br> location / {
- proxy_pass http://springcloud; # 配置负载均衡
- root /usr/share/nginx/html;
- index index.html index.htm;
- }<br><br> 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<br><br>- $ 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> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | +--------------------+ 5 rows in set (0.09 sec)
5.安装redis<br><br>- 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 命令的基本操作<br><br>一、 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<br><br>在 /redis/redis.conf 目录下新建文件 redis.conf
6. 安装RabbitMQ<br><br>- 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 项目<br><br>
- 创建项目时,将启用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 .
复制代码
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
复制代码
访问宿主机数据库<br><br>在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容器<br><br>注意,数据库连接字符串要用宿主机的IP地址,如:- server=192.168.52.147;uid=root;pwd=123456;database=test;sslmode=none
复制代码
192.168.52.147 这个就是我宿主机的IP地址(虚拟机)
8. 安装ELK<br><br> "日志主要包括系统日志和应用程序日志,运维和开发人员可以通过日志了解服务器中软硬件的信息,检查应用程序或系统的故障,了解故障出现的原因,以便解决问题。分析日志可以更清楚的了解服务器的状态和系统安全状况,从而可以维护服务器稳定运行。
但是日志通常都是存储在各自的服务器中。如果管理数十台服务器, 查阅日志需要依次登陆不同的服务器,查看过程就会很繁琐从而导致工作效率低下。虽然可以使用 rsyslog 服务将日志汇总。但是统计一些日志中的数据或者检索也是很麻烦的,一般使用grep、awk、wc、sort等Linux命令来统计和检索。如果对数量巨大的日志进行统计检索,人工的效率还是十分低下。
通过我们对日志进行收集、汇总到一起,完整的日志数据具有非常重要的作用:
- 信息查找。通过检索日志信息,查找相应的报错,可以快速的解决BUG。
- 数据分析。如果是截断整理格式化后的日志信息,可以进一步对日志进行数据分析和统计,可以选出头条,热点,或者爆款。
- 系统维护。对日志信息分析可以了解服务器的负荷和运行状态。可以针对性的对服务器进行优化。
二、ELK简介<br><br> 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 的第一选择。
版本说明:<br><br>Elasticsearch、Logstash、Kibana、Filebeat安装的版本号必须全部一致,不然会出现kibana无法显示web页面。
安装步骤<br><br>1. ElasticSearch<br><br>- 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 <br><br> 为什么要安装ElasticSearch-Head呢,原因是需要有一个管理界面进行查看ElasticSearch相关信息 - $ docker pull mobz/elasticsearch-head:5
- $ docker run -d --name es_head -p 9100:9100 mobz/elasticsearch-head:5
复制代码

3. 安装logstash<br><br>数据收集处理引擎。支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储以供后续使用。
(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<br><br>(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 启动有点慢,需要多等一会儿。
http://192.168.253.137:5601
9. 安装Consul<br><br>拉取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。
访问:http://localhost:8500
10. 安装 RocketMQ <br><br>首先,我们需要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<br><br>
- 安装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 安装<br><br>Sentry 是一款异常日志监控报警组件,非常强大
Sentry 安装的硬性条件
- Linux 系统 (4核,4G内存)
- Docker 版本 docker-ce-19.03.9 及以上(可以卸载,然后重新安装新的)
- Docker Compose 1.27.2 及以上
本人试过直接用Docker 镜像安装,过程会出现各种各样的问题,依赖的组件也多,我们选择直接用git 下载源码进行安装
- 安装git
- 克隆项目(github有可能下载失败,gitee下载没问题)
- git clone https://gitee.com/jie51886/onpremise.git
复制代码
- 查看下载目录(onpremise 是克隆代码)
- ls
- anaconda-ks.cfg onpremise
- # 进入到这个目录中
- cd onpremise
复制代码
- 到onpremise 目录中进行安装
这个过程需要的时间比较长(下载镜像,生成容器等等操作),注意完事之后会询问你是否创建管理员邮箱账号,记得一定要填写!!
- 启动
- 验证访问:http://你的虚拟机IP:9000(记得暴露9000的端口或者关闭防火qiang)
如果一不小心将DSN忘记了,如果寻找DSN:?
Projects -> 选择你刚创建的项目 -> 点进去 -> 左上角点击设置小图标 -> 点击client keys(dsn)
配套视频链接:全网首发java/.net双案例Docker精品课程,Docker 进阶教程(双语言双案例助力教学)-已完结_哔哩哔哩_bilibili <br><br>免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |