主机准备
## 时间同步
imedatectl set-timezone Asia/Shanghai
yum -y install ntpdate
/usr/sbin/ntpdate -u ntp1.aliyun.com
echo "0 5 * * * /usr/sbin/ntpdate -u ntp1.aliyun.com >/dev/null &" >> /var/spool/cron/root
crontab -l
桥接网络
## 创建桥接连接
nmcli connection add type bridge ifname br0 con-name br0
## 添加网络接口到桥接连接
nmcli connection add type bridge-slave ifname enp1s0 master br0
nmcli connection add type bridge-slave ifname enp2s0 master br0
nmcli connection add type bridge-slave ifname enp3s0 master br0
nmcli connection add type bridge-slave ifname enp4s0 master br0
nmcli connection add type bridge-slave ifname enp5s0 master br0
nmcli connection add type bridge-slave ifname enp6s0 master br0
nmcli connection add type bridge-slave ifname enp7s0 master br0
nmcli connection add type bridge-slave ifname enp8s0 master br0
## 配置桥接连接的IPv4地址
# nmcli connection modify br0 ipv4.method manual ipv4.address 192.168.60.100/24
# nmcli connection modify br0 ipv4.addresses "192.168.100.26/24"
# nmcli connection modify br0 ipv4.gateway 192.168.100.2
# nmcli connection modify br0 ipv4.dns 8.8.8.8
## 设置IP地址:192.168.13.166
nmcli connection modify br0 ipv4.method manual ipv4.address 192.168.13.166/24 ipv4.gateway 192.168.13.1
## 添加IP地址:192.168.3.166
nmcli con mod br0 +ipv4.addresses "192.168.3.166/24"
# 重新加载连接
nmcli connection reload
# 启用桥接连接
nmcli connection up br0
systemctl restart network
## 删除桥接
nmcli connection delete br0
``
```bash
## 安装bridge-utils
apt-get install bridge-utils
yum instakk -y bridge-utils
## 创建桥接设备: 使用brctl命令创建一个桥接设备。假设你要创建一个名为br0的桥接设备,可以使用以下命令:
brctl addbr br0
## 将网络接口添加到桥接设备: 将要桥接的网络接口(网卡)添加到新创建的桥接设备中。例如,假设你有两个网卡eth0和eth1,可以使用以下命令:
brctl addif br0 eth0
brctl addif br0 eth1
## 激活桥接设备: 使用以下命令激活桥接设备:
ifconfig br0 up
## 配置IP地址: 为桥接设备分配一个IP地址。例如:
ifconfig br0 192.168.16.100 netmask 255.255.255.0
## 禁用原始网络接口: 如果你希望通过桥接设备来处理网络流量,可以禁用原始网络接口。例如:
ifconfig eth0 down
ifconfig eth1 down
## 或者使用ip link set命令:
ip link set dev eth0 down
ip link set dev eth1 down
需求
背景
公司提供了一套通用的JAVA基础组件包,希望可以通过promethus来监控现在公司内使用各版本代码库的比例,以及各版本代码库的使用情况。
这有利于我们做版本兼容,必要的时候可以对古早版本使用者溯源。
问题
需求似乎很简单,但真要获取自身的jar版本号还是挺麻烦的,有个比较简单但阴间的办法,就是给每一个组件都加上当前的jar版本号,写到配置文件里或者直接设置成常量,这样上报promethus时就可以直接获取到jar包版本号了,这个方法虽然可以解决问题,但每次迭代版本都要跟着改一遍所有组件包的版本号数据,过于麻烦。
有没有更好的解决办法呢?比如我们可不可以在gradle打包构建时拿到jar包的版本号,然后注入到每个组件中去呢?就像lombok那样,不需要写get、set方法,只需要加个注解标记就可以自动注入get、set方法。
Fail2Ban
Fail2Ban(Fail to Ban)是一种用于防范暴力破解攻击的开源软件。它的主要目标是通过监视系统日志文件,检测恶意行为(如多次登录失败、恶意IP地址等),并采取自动化的措施来阻止攻击者进一步访问系统。
以下是Fail2Ban的一些关键特性和工作原理:
- 监视日志文件: Fail2Ban通过分析系统的日志文件,特别是包含安全相关信息的文件,来检测潜在的入侵尝试。
- 定义规则: 用户可以定义自定义规则,告诉Fail2Ban在日志中搜索什么样的模式,并根据这些模式采取相应的行动。
- 动态封禁: 一旦Fail2Ban检测到恶意行为,它将采取措施来阻止攻击者的进一步访问。这通常涉及到在防火墙规则中添加临时的封锁规则。
- 可定制性: 用户可以根据自己的需求配置Fail2Ban,包括设置封锁的时间、阈值等参数。
- 支持多种服务: Fail2Ban不仅限于防范SSH攻击,还支持监视和防范多种服务的暴力破解攻击,如FTP、HTTP、SMTP等。
Pacemaker介绍
Pacemaker 是一个开源的高可用性软件,用于在集群环境中管理和监控服务的可用性。旨在提供一套框架和工具,使用户能够在分布式系统中构建高可用性的服务。
主要用于构建高可用性的集群服务,确保在节点或服务出现故障时能够保持系统的稳定性和可用性。它被广泛应用于企业环境中的关键业务应用和服务,如数据库、Web 服务器、应用服务器等。
主要特点和功能
-
集群管理: Pacemaker 允许将多个节点组成一个集群,这些节点可以共同工作以提供服务的高可用性。集群中的节点通过网络通信协同工作。
-
资源管理: Pacemaker 可以管理和监控集群中的各种资源,如 IP 地址、虚拟 IP 地址、文件系统、数据库等。它能够启动、停止和迁移这些资源,以确保它们在整个集群中保持可用状态。
-
故障检测和自动恢复: Pacemaker 提供了故障检测机制,能够检测节点和资源的故障。一旦发现故障,它可以自动采取措施来恢复服务,例如迁移资源到其他健康的节点。
-
灵活的资源策略: Pacemaker 允许用户定义资源的启动顺序、亲和性规则和放置约束,以确保服务在特定节点上以期望的方式运行。
-
强大的插件架构: Pacemaker 的插件架构允许用户集成不同类型的资源代理,以支持各种服务和应用程序。它支持多种资源代理,如 OCF(Open Cluster Framework)资源代理、Systemd 服务资源代理等。
-
Web 界面和命令行工具: Pacemaker 提供了直观的 Web 界面(Pacemaker GUI)和强大的命令行工具,用于配置、监控和管理集群。
-
可扩展性和兼容性: Pacemaker 是一个可扩展和高度模块化的系统,可以适应不同规模和类型的集群。它与各种存储系统、网络配置和硬件兼容,并支持多种操作系统。
Stirling-PDF
一款功能强大、开箱即用的 PDF 工具,支持拆分/合并文件、添加/提取图片、压缩、加水印、添加/删除密码等功能,满足对 PDF 文件的所有需求。
version: '3.3'
services:
stirling-pdf:
image: frooodle/s-pdf:latest
ports:
- '8080:8080'
volumes:
- ./data/trainingData:/usr/share/tesseract-ocr/4.00/tessdata
- ./data/extraConfigs:/configs
# - ./data/customFiles:/customFiles/
environment:
- DOCKER_ENABLE_SECURITY=false
``
按照设计师和前端工程师的共同认知进行命名和归类
基础(Basic) | 布局(Layout) | 导航(Navigations) | 数据类(Data) | 沟通类(Notice) | 输入类(Input) | 其他 Others |
---|---|---|---|---|---|---|
色彩 Color | 布局 Layout | 选项卡 Tabs | 图表 Diagram | 全局提醒 Message | 输入框 Input | 模态抽屉 Drawer |
字体 Fonts | 栅格 Grid | 步骤条 Steps | 列表 List | 文字提示 Tootip | 日期选择器 DatePicker | 锚点 Anchor |
图标 Icon | 卡片 Card | 面包屑 Breadcrumb | 表格 Table | 加载中 Loading | 时间选择器 TimePicker | 标签 Tag |
动效 Motion | 走马灯 Carousel | 分页 Pagination | 表单 Form | 警告提示 Alert | 单选框 Radio | |
按钮 Button | 分割线 Divider | 导航菜单 Menu | 树 Tree | 徽标数 Badge | 多选框 Checkbox | |
用户引导 Onboarding | 搜索框 Search | |||||
气泡确认 Popconfirm | 穿梭框 Transfer | |||||
对话框 Dialog | 下拉菜单 Dropdown | |||||
消息通知 Notification | 树选择 TreeSelect | |||||
上传 Upload | ||||||
开关 Switch | ||||||
选择器 Select |
CSS 的命名,采用 BEM 命名规范,可以有效的避免组件间样式的相互污染,减少嵌套层级。具体规则如下:
BEM 是什么?
BEM 使用分隔符将类名区隔成三个部分:
[prefix]-[block]__[element]--[modifier]
- prefix:全局的前缀,这里指代表 tdesign 的前缀,也就是 t-
- Block(块) :组件的最外层父元素,这个类包含最通用和可重用的功能。
- Element(元素) :组件内可包含一个或多个元素,元素为块添加了新功能。无需重置任何属性。
- Modifier(修饰类) :块或元素都可以通过修饰词来表示为变体。