部署基于efk+logstash+kafka构建日志收集平台并对nginx日志进行分析

news2024/11/16 7:37:36

文章目录

    • 1.1 安装zookeeper集群
    • 1.2 安装kafka集群
    • 1.3 部署filebeat服务
    • 1.4 部署logstash
    • 1.5 部署es和kibana服务
    • 1.6 配置kibana ui界面
    • 1.7 对nginx进行日志分析

Filebeat采集日志kafka topic存起来日志->logstash去kafka获取日志,进行格式转换->elasticsearch->kibana

1.1 安装zookeeper集群

准备三台机器安装zookeeper高可用集群
zoo1: 192.168.40.190
zoo2: 192.168.40.191
zoo3: 192.168.40.192

虚拟机Ubuntu - 修改IP地址

1、zookeeper简介
zookeeper就是动物园管理员,他是用来管hadoop(大象)、Hive(蜜蜂)、pig(小
猪)、kafka消息系统的管理员, Apache Hbase 和 Apache Solr 的分布式集群都用到了 zookeeper;Zookeeper是一个分布式的、开源的程序协调服务,是 hadoop 项目下的一个子项目。他提供的主要功能包括:配置管理、名字服务、分布式锁、集群管理。
Zookeeper主要作用在于:

  • 节点选举
    ===>Master节点,主节点挂了之后,从节点就会接手工作 ,并且,保证这个节点是唯一的,这就是首脑模式,从而保证集群的高可用
  • 统一配置文件管理
    只需要部署一台服务器
    则可以把相同的配置文件,同步更新到其他所有服务器,比如,修改了Hadoop,Kafka,redis统一配置等
  • 发布与订阅消息
    ==>类似于消息队列,发布者把数据存在znode节点上,订阅者会读取这个数据
  • 集群管理
    • 集群中保证数据的一致性
    • Zookeeper的选举机制===>过半机制
    • 安装的台数:奇数台(否则无法过半机制)
    • 多得好处在于可靠性高,但是过的话会导致通信延时长

zookeeper角色:
leader领导者
follower跟随着
observer观察者
leader:负责发起选举和决议的,更新系统状态
follower:接收客户端的请求,给客户端返回结果,在选主的过程参与投票
observe:接收客户端的连接,同步leader状态,不参与选主

在192.168.40.190上修改主机名:
[root@localhost ~]# hostnamectl set-hostname zoo1 && bash

在192.168.40.191上修改主机名:
[root@localhost ~]# hostnamectl set-hostname zoo2 && bash

在192.168.40.192上修改主机名:
[root@localhost ~]# hostnamectl set-hostname zoo3 && bash

1.2 Zookeeper 配置

  • 解压文件:

[root@zoo3 ~]#mkdir /opt
[root@zoo3 ~]#tar zxvf apache-zookeeper-3.8.0-bin.tar.gz -C /opt/
[root@zoo3 ~]#mv /opt/apache-zookeeper-3.8.0-bin/ /opt/zookeeper

[root@zoo1 ~]#mkdir /opt
[root@zoo1 ~]#tar zxvf apache-zookeeper-3.8.0-bin.tar.gz -C /opt/
[root@zoo1 ~]#mv /opt/apache-zookeeper-3.8.0-bin/ /opt/zookeeper
在这里插入图片描述

[root@zoo2 ~]#mkdir /opt
[root@zoo2 ~]#tar zxvf apache-zookeeper-3.8.0-bin.tar.gz -C /opt/
[root@zoo2 ~]#mv /opt/apache-zookeeper-3.8.0-bin/ /opt/zookeeper

  • 在/opt/zookeeper/目录下创建数据文件目录和日志文件目录:

[root@zoo3 ~]# mkdir /opt/zookeeper/zkData
[root@zoo3 ~]# mkdir /opt/zookeeper/zkLog

[root@zoo1 ~]# mkdir /opt/zookeeper/zkData
[root@zoo1 ~]# mkdir /opt/zookeeper/zkLog
在这里插入图片描述

[root@zoo2 ~]# mkdir /opt/zookeeper/zkData
[root@zoo2 ~]# mkdir /opt/zookeeper/zkLog

  • 复制配置文件并修改:

[root@zoo3 ~]# cd /opt/zookeeper/conf/
[root@zoo3 conf]# cp zoo_sample.cfg zoo.cfg
[root@zoo3 conf]# mkdir -p /opt/zookeeper/zkLog
[root@zoo3 conf]# vim zoo.cfg
在原有配置基础上修改内容如下:
dataDir=/opt/zookeeper
dataLogDir=/opt/zookeeper/zkLog
server.1=192.168.40.190:2188:3888
server.2=192.168.40.191:2188:3888
server.3=192.168.40.192:2188:3888
在这里插入图片描述

[root@zoo1 ~]# cd /opt/zookeeper/conf/
[root@zoo1 conf]# cp zoo_sample.cfg zoo.cfg
[root@zoo1conf]# mkdir -p /opt/zookeeper/zkLog
[root@zoo1 conf]# vim zoo.cfg
在原有配置基础上修改内容如下:
dataDir=/opt/zookeeper
dataLogDir=/opt/zookeeper/zkLog
server.1=192.168.40.190:2188:3888
server.2=192.168.40.191:2188:3888
server.3=192.168.40.192:2188:3888

[root@zoo2 ~]# cd /opt/zookeeper/conf/
[root@zoo2 conf]# cp zoo_sample.cfg zoo.cfg
[root@zoo2 conf]# mkdir -p /opt/zookeeper/zkLog
[root@zoo2 conf]# vim zoo.cfg
在原有配置基础上修改内容如下:
dataDir=/opt/zookeeper
dataLogDir=/opt/zookeeper/zkLog
server.1=192.168.40.190:2188:3888
server.2=192.168.40.191:2188:3888
server.3=192.168.40.192:2188:3888

  • 启动zookeeper:

  • 安装jdk
    在这里插入图片描述

  • 启动zookeeper:
    [root@zoo1 conf]# cd /opt/zookeeper/
    [root@zoo1 zookeeper]# echo 1 > myid
    [root@zoo1 ~]#cd /opt/zookeeper/bin && nohup ./zkServer.sh start …/conf/zoo.cfg &

权限问题:Permission denied:sudo chmod 777 -R /opt/zookeeper

启动zookeeper:
[root@zoo2 ~]#yum install java -y
[root@zoo2 conf]# cd /opt/zookeeper/
[root@zoo2 zookeeper]# echo 2 > myid
[root@zoo2 ~]#cd /opt/zookeeper/bin && nohup ./zkServer.sh start …/conf/zoo.cfg &
[root@zoo3 ~]#yum install java -y
[root@zoo3 conf]# cd /opt/zookeeper/
[root@zoo3 zookeeper]# echo 3 > myid
[root@zoo3 ~]#cd /opt/zookeeper/bin && nohup ./zkServer.sh start …/conf/zoo.cfg &

测试zookeeper:
[root@zoo3 ~]# cd /opt/zookeeper/bin/
[root@zoo3 ~]#./zkCli.sh -server 127.0.0.1:2181
#创建节点,以及和它关联的字符串
[zk: 127.0.0.1:2181(CONNECTED) 1] create /test “lucky”
#获取刚才创建的节点信息
[zk: 127.0.0.1:2181(CONNECTED) 2] get /test
“lucky”
#修改节点信息
[zk: 127.0.0.1:2181(CONNECTED) 4] set /test “luckylucky”
[zk: 127.0.0.1:2181(CONNECTED) 5] get /test
“luckylucky”

1.2 安装kafka集群

1、kafka介绍:Kafka 是一种高吞吐量的分布式发布订阅消息系统,即使是非常普通的硬件Kafka也可以支持每秒数百万的消息。采用生产者消费者模型

2、相关术语:
Broker:Kafka集群包含一个或多个服务器,这种服务器被称为broker
Topic:每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处)
Partition:Partition是物理上的概念,每个Topic包含一个或多个Partition.
Producer:负责发布消息到Kafka broker
Consumer:消息消费者,向Kafka broker读取消息的客户端。

3、安装kafka单节点

在zoo3上部署kafka服务

解压压缩包到指定目录:
[root@zoo3 ~]# tar -xzf kafka_2.13-3.1.0.tgz
[root@zoo3 ~]#cd kafka_2.13-3.1.0

修改config目录下vi server.propertie文件:
[root@zoo3]# cd /root/kafka_2.13-3.1.0/config
[root@zoo3 config]# vim server.properties
listeners=PLAINTEXT://192.168.40.192:9092
zookeeper.connect=192.168.40.190:2181,192.168.40.192:2181,192.168.40.191:2181

备注:
zookeeper.connect是指定zookeper集群地址
listeners=PLAINTEXT://192.168.40.192:9092 这个ip写的是部署kafka机器的ip

启动kafka:
[root@zoo3 config]# cd /root/kafka_2.13-3.1.0/bin && ./kafka-server-start.sh -daemon …/config/server.properties

zookeeper在kafka中的作用:管理broker、consumer,创建Broker后,向zookeeper注册新的broker信息,实现在服务器正常运行下的水平拓展。

登录zookeeper客户端,查看/brokers/ids
[root@zoo3 ~]# cd /opt/zookeeper/bin/
[root@zoo3 ~]#./zkCli.sh -server 127.0.0.1:2181
[zk: 127.0.0.1:2181(CONNECTED) 1] ls /brokers/ids
显示如下:
[0]

生产者和消费者测试
(1)创建主题,主题名是 quickstart-events
[root@zoo3 config]# cd /root/kafka_2.13-3.1.0/bin
[root@zoo3 bin] ./kafka-topics.sh --create --topic quickstart-events --bootstrap-server 192.168.40.192:9092

(2)查看topic
[root@zoo3 bin]# ./kafka-topics.sh --describe --topic quickstart-events --bootstrap-server 192.168.40.192:9092

(3)topic写入消息
[root@zoo3 bin]# ./kafka-console-producer.sh --topic quickstart-events --bootstrap-server 192.168.40.192:9092

hello
welcome

(4)打开新的终端,从topic读取信息
[root@zoo3]# cd /root/kafka_2.13-3.1.0/bin
[root@zoo3 bin]# ./kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server 192.168.40.192:9092
显示如下:

4.安装kafka高可用集群
假如现在有两台服务器192.168.40.192,192.168.40.190
kafka的安装与配置如上,两台服务器唯一不同的地方就是配置文件中的broker.id和listeners监听的主机ip
[root@zoo3 ~]# scp -r kafka_2.13-3.1.0 192.168.40.190:/root/
修改192.168.40.190机器config目录下server.propertie文件
[root@zoo1 ~]# cd kafka_2.13-3.1.0/config/
[root@zoo1 config]# vim server.properties
broker.id=1
listeners=PLAINTEXT://192.168.40.190:9092

启动kafka
[root@zoo1]# cd /root/kafka_2.13-3.1.0/bin && ./kafka-server-start.sh -daemon …/config/server.properties

登录zookeeper客户端,查看/brokers/ids
[root@zoo3 ~]# cd /opt/zookeeper/bin/
[root@zoo3 ~]#./zkCli.sh -server 127.0.0.1:2181
[zk: 127.0.0.1:2181(CONNECTED) 1] ls /brokers/ids
显示如下:
[0,1]

把zoo2加入到kafka集群:
[root@zoo3 ~]# scp -r kafka_2.13-3.1.0 192.168.40.191:/root/
修改192.168.40.190机器config目录下server.propertie文件
[root@zoo2 ~]# cd kafka_2.13-3.1.0/config/
[root@zoo2 config]# vim server.properties
broker.id=2
listeners=PLAINTEXT://192.168.40.191:9092

启动kafka
[root@zoo2]# cd /root/kafka_2.13-3.1.0/bin && ./kafka-server-start.sh -daemon …/config/server.properties

登录zookeeper客户端,查看/brokers/ids
[root@zoo3 ~]# cd /opt/zookeeper/bin/
[root@zoo3 ~]#./zkCli.sh -server 127.0.0.1:2181
[zk: 127.0.0.1:2181(CONNECTED) 1] ls /brokers/ids
显示如下:
[0,1,2]

1.3 部署filebeat服务

在zoo2上部署

filebeat是轻量级的日志收集组件

zoo2安装nginx,利用filebeat采集nginx日志:
[root@zoo2 ~]# yum install nginx -y
[root@zoo2 ~]# service nginx start
请求nginx
[root@zoo2 ~]# curl 192.168.40.191

Kafka集群创建topic,用来存放日志数据
[root@zoo3]# cd /root/kafka_2.13-3.1.0/bin
[root@zoo3 bin]# ./kafka-topics.sh --create --topic test-topic --bootstrap-server 192.168.40.192:9092,192.168.40.191:9092,192.168.40.190:9092

安装filebeat服务
[root@zoo2 ~]# tar zxvf filebeat-7.13.1-linux-x86_64.tar.gz -C /opt/
[root@zoo2 ~]# cd /opt/filebeat-7.13.1-linux-x86_64/
[root@zoo2 filebeat-7.13.1-linux-x86_64]# ./filebeat modules enable nginx

配置filebeat_nginx.yml (记得注释kafka version,不然报错)
vim filebeat_nginx.yml
filebeat.modules:

  • module: nginx
    access:
    enabled: true
    var.paths: [“/var/log/nginx/access.log*”]
    error:
    enabled: true
    var.paths: [“/var/log/nginx/error.log*”]

#----------------------------------Kafka output--------------------------------#
output.kafka:
enabled: true
hosts: [‘192.168.40.192:9092’, ‘192.168.40.190:9092’,‘192.168.40.191:9092’]
topic: ‘test-topic’ #kafka的topic,需要提前创建好,上面步骤已经创建过了
required_acks: 1 #default
compression: gzip #default
max_message_bytes: 1000000 #default
codec.format:
string: ‘%{[message]}’

启动filebeat
[root@zoo2 filebeat-7.13.1-linux-x86_64]# nohup ./filebeat -e -c filebeat_nginx.yml &
请求nginx
[root@zoo2 ~]# curl 192.168.40.191
#查看kafka topic是否有日志数据
[root@zoo3]# cd /root/kafka_2.13-3.1.0/bin
[root@zoo3 bin]# ./kafka-console-consumer.sh --topic test-topic --from-beginning --bootstrap-server 192.168.40.192:9092,192.168.40.190:9092,192.168.40.191:9092

1.4 部署logstash

在zoo2上部署
logstash是日志收集组件,但是占用的资源较多,一般都是用来对日志格式进行转换
[root@zoo2 ~]# cd /opt/
[root@zoo2 opt]# wget https://artifacts.elastic.co/downloads/logstash/logstash-7.9.2.tar.gz
[root@zoo2 opt]# tar zxvf logstash-7.9.2.tar.gz
[root@zoo2 opt]# cd logstash-7.9.2/config
[root@zoo2 config]# vim nginx.conf
input{
kafka {
bootstrap_servers => [“192.168.40.192:9092,192.168.40.190:9092 ,192.168.40.191:9092”]
auto_offset_reset => “latest”
consumer_threads => 3
decorate_events => true
topics => [“test-topic”]
codec => “json”
}
}
output {
elasticsearch {
hosts => [“192.168.40.191:9200”]
index => “kafkalog-%{+YYYY.MM.dd}” # 这里定义的index就是kibana里面显示的索引名称
}
}

备注:bootstrap_servers => [“192.168.40.192:9092,192.168.40.190:9092”]指定kafka集群地址
hosts => [“192.168.40.191:9200”]指定es主机地址

启动logstash服务
[root@zoo2 config]# cd …/bin
[root@zoo2 bin]# nohup ./logstash -f …/config/nginx.conf >> logstash.log &

1.5 部署es和kibana服务

在zoo2上部署

elasticsearch是一个实时的,分布式的,可扩展的搜索引擎,它允许进行全文本和结构化搜索以及对日志进行分析。它通常用于索引和搜索大量日志数据,也可以用于搜索许多不同种类的文档。elasticsearch具有三大功能,搜索、分析、存储数据

安装es服务
[root@zoo2]# mkdir /es_data
[root@zoo2 ~]# chmod 777 /es_data
[root@zoo2 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@zoo2 ~]# yum install docker-ce -y
[root@zoo2 ~]# systemctl start docker
[root@zoo2 ~]# systemctl enable docker
[root@zoo2 ~]# docker load -i elasticsearch.tar.gz
[root@zoo2 ~]#docker run -p 9200:9200 -p 9330:9300 -itd -e “discovery.type=single-node” --name es -v /es_data:/usr/share/elasticsearch/data docker.elastic.co/elasticsearch/elasticsearch:7.9.2

kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在Elasticsearch指标中的日志数据。Kibana功能众多,在“Visualize” 菜单界面可以将查询出的数据进行可视化展示,“Dev Tools” 菜单界面可以让户方便地通过浏览器直接与 Elasticsearch 进行交互,发送 RESTFUL对 Elasticsearch 数据进行增删改查。。它操作简单,基于浏览器的用户界面可以快速创建仪表板(dashboard)实时显示Elasticsearch查询动态。设置Kibana非常简单。无需编码或者额外的基础架构,几分钟内就可以完成Kibana安装并启动Elasticsearch索引监测。

安装kibana服务
[root@zoo2 ~]# docker load -i kibana.tar.gz
[root@zoo2 ~]# docker run -p 5601:5601 -it -d --link es -e ELASTICSEARCH_URL=http://192.168.40.191:9200 --name kibana kibana:7.9.2
修改kibana配置文件:
[root@zoo2 ~]# docker exec -it kibana /bin/bash
[root@zoo2 ~]# vi config/kibana.yml
elasticsearch.hosts: [ “http://192.168.40.191:9200/” ]
[root@zoo2 ~]# docker restart kibana

1.6 配置kibana ui界面

http://192.168.40.191:5601/app/home#/

Kibana添加索引
http://192.168.40.191:5601/app/management/kibana/indexPatterns

需要再次curl访问nginx,才会产生数据

回到kibana首页,点击Discover查看日志:

1.7 对nginx进行日志分析

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1130448.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【计算机网络笔记】网络应用进程通信

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…

【RocketMQ系列十四】RocketMQ中消息堆积如何处理

您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦。 💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精…

Elasticsearch分词器-中文分词器ik

文章目录 使用standard analysis对英文进行分词使用standard analysis对中文进行分词安装插件对中文进行友好分词-ik中文分词器下载安装和配置IK分词器使用ik_smart分词器使用ik_max_word分词器 text analysis 使用standard analysis对英文进行分词 ES默认使用standard analys…

【Java】智慧医院绩效考核系统源码

医院绩效考核系统使用JAVA语言开发,采用B/S架构模式设计,后台使用MySql数据库进行管理的一整套计算机应用软件。系统和his系统进行对接,按照设定周期,从his系统获取医院科室和医生、护士、其他人员工作量,对没有录入信…

【MySQL架构篇】逻辑架构

逻辑架构 文章目录 逻辑架构1. 服务器处理客户端请求2. Connectors3. 第一层:连接层4. 第二层:服务层5. 第三层:存储引擎6. 存储层7. 小结 1. 服务器处理客户端请求 首先 MySQL 是典型的 C/S 架构,即 Client/Server 架构&#xf…

idea 基础设置

1、设置 IDEA 主题 2、自动导包和优化多余的包 3、同一个包下的类,超过指定个数的时候,导包合并为* 4、显示行号 , 方法和方法间的分隔符: 5、忽略大小写,进行提示 6、多个类不隐藏,多行显示 7、设置默认的…

2023高频前端面试题-CSS

1. CSS 选择器的优先级是怎么样的? CSS 选择器的优先级顺序: 内联样式 > ID选择器 > 类选择器 > 标签选择器 优先级的计算: 优先级是由 A、B、C、D 四个值来决定的,具体计算规则如下 A{如果存在内联样式则为 1&…

计算机网络-计算机网络体系结构-应用层

目录 一、网络应用模型 客户/服务器模型(Client/Server) P2P模型(Peer-to-peer) 二、域名解析系统(DNS) 域名 域名服务器 解析过程 三、文件传输协议(FTP) FTP控制原理 四、电子邮件 组成结构 协议 SMTP MIME POP3 IMAP 五、万维网和HTTP协议 概述 HTTP 报…

MySQL数据库---入门篇

文章目录 数据库介绍什么是数据库?数据库分类 MySQL的结构MySQL客户端和服务器MySQL服务器是如何组织数据的? 数据库操作显示当前数据库创建数据库使用数据库删除数据库 数据库中常用数据类型数值类型字符串类型日期类型 表的操作创建表查看表结构查看当…

Linux系统编程:线程

从进程到线程 为什么需要线程?这是因为进程本身存在一定问题: 首先是进程切换时,各类进程资源如寄存器CPU、包括虚拟地址和物理地址要进行映射等等进行上下文切换,这是非常消耗资源和时间的事情,并且实现进程间通信非…

死锁的发生原因和怎么避免

死锁 死锁,简单来说就是两个或者两个以上的线程在执行的过程中,争夺同一个共享资源造成的相互等待的现象。如果没有外部干预,线程会一直阻塞无法往下执行,这些一直处于相互等待资源的线程就称为死锁线程。 死锁产生原因 导致死…

使用强化学习训练 AI 去玩神奇宝贝

使用强化学习训练 AI 去玩神奇宝贝 这两天在逛 Youtube 的时候意外发现了一个非常有趣的视频,十天的时间已经获得了两百多万的点击: 现在已经 360w 点击了 视频的名称就和题目的名称一样:Training AI to Play Pokemon with Reinforcement Le…

Kaggle - LLM Science Exam(四):Platypus2-70B with Wikipedia RAG

文章目录 一、赛事概述1.1 OpenBookQA Dataset1.2 比赛背景1.3 评估方法和代码要求1.4 比赛数据集1.5 优秀notebook1.6 RAG 二、Platypus2-70B with Wikipedia RAG(Version8)2.1 离线安装依赖2.2 导入库并设置常量2.3设置辅助功能2.4 SentenceTransforme…

phpstorm+phpstudy+xdebug快速搭建php调试环境

1、安装phpstudy 让你的项目能正常跑起来,再来进行下一步 2、安装拓展 勾选需要用到的插件,配置好端口 再php.ini最下面复制如下配置,插件的地址按实际路径配置 [Xdebug] zend_extensionD:/phpstudy_pro/Extensions/php/php5.6.9nts/ext/p…

UG\NX二次开发 实现“适合窗口”的功能

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 感谢粉丝订阅 感谢 shsjdj 订阅本专栏,非常感谢。 简介 实现“适合窗口”的功能 效果 代码1 #include "me.hpp"extern DllExport void ufusr(char* param, int* re…

java将list转为逗号隔开字符串,将逗号连接的字符串转成字符数组,​将逗号分隔的字符串转换为List​(Java逗号分隔-字符串与数组相互转换)

一、通过testList.stream().collect(Collectors.joining(",")) &#xff0c;通过流转换&#xff0c;将list转为逗号隔开字符串 List<String> testList new ArrayList<>(); testList.add("test1"); testList.add("test2"); testList…

Jenkins部署失败:JDK ‘jdk1.8.0_381‘ not supported to run Maven projects

Jenkins部署报错&#xff1a;JDK ‘jdk1.8.0_381’ not supported to run Maven projects提示使用的jdk有问题&#xff0c;启动的jdk版本不能满足项目启动。 登录Jenkins管理页面&#xff0c;系统管理——全局工具配置——JDK安装配置满足条件的JDK版本&#xff0c;保存配置&…

Stable-diffusion-webui

AI 画图&#xff0c;之前整理的 AI换脸 CSDN不给通过&#xff0c;说是换脸之类的不给通过&#xff0c;只能自己看了。 GitHub&#xff1a;https://github.com/AUTOMATIC1111/stable-diffusion-webuihttps://github.com/AUTOMATIC1111/stable-diffusion-webui 安装完毕跑起来大概…

k8s-----18、Ingress(对外服务)

Ingress 1、Ingress概念2、 pod和ingress的关系3、 Ingress的工作流程4、 使用步骤5、对外暴露应用实战5.1 创建nginx应用&#xff0c;对外暴露端口使用NodePort5.2 部署ingress controller5.3 创建ingress规则5.4 访问 1、Ingress概念 k8s 对外暴露服务&#xff08;service&am…

uniapp解决iOS切换语言——原生导航栏buttons文字不生效

uniapp 切换语言原生导航栏buttons文字不生效&#xff1f; 文章目录 uniapp 切换语言原生导航栏buttons文字不生效&#xff1f;效果图page.json配置解决方式 效果图 场景&#xff1a;在 tabbar 页面中&#xff0c;配置 原生导航栏 buttons &#xff0c;切换语言时&#xff0c;不…