一、 基于nginx-module-vts监控

1.1 下载

https://github.com/vozlt/nginx-module-vts

1.2 重新编译nginx

./configure \
--prefix=/usr/local/nginx-1.25.0 \
--add-module=./nginx-module-vts-0.2.2 \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module

1.3 nginx 配置

http {
#---隐藏其他配置
vhost_traffic_status_zone;
vhost_traffic_status_filter_by_host on;
server {
#---隐藏其他的路由
location /status {
vhost_traffic_status_display;
vhost_traffic_status_display_format html;
}
}
}

1.4 Prometheus 配置

- job_name: "nginx_vts_status"
metrics_path: '/status/format/prometheus'
scrape_interval: 10s
static_configs:
- targets: ["192.168.1.201:88"]

1.5 配置 grafana

导入模板: https://grafana.com/grafana/dashboards/14824-nginx-vts-stats/

二、 基于nginx-prometheus-exporter监控

2.1 配置nginx

  • 确保当前运行的nginx支持http_stub_status
    ./nginx -V 2>&1 | grep -o with-http_stub_status_module

  • nginx 开启http_stub_status
    vim /path2yournginx/nginx.conf

      server {
    listen 80;
    location /nginx_status {
    stub_status on;
    access_log off;
    allow 127.0.0.1;
    deny all;
    }
    }

2.2 配置nginx-prometheus-exporter

  • 下载
    https://github.com/nginxinc/nginx-prometheus-exporter

  • 解压
    tar -xzvf node_exporter-1.7.0.linux-amd64.tar.gz -C /usr/local/

  • 运行
    ./nginx-prometheus-exporter -nginx.scrape-uri http://127.0.0.1/nginx_status

2.3 配置 Prometheus

- job_name: "nginx_status"
metrics_path: '/metrics'
scrape_interval: 10s
static_configs:
- targets: ["192.168.1.201:9113"]

2.4 导入模板

https://grafana.com/grafana/dashboards/11199-nginx/

一、 安装

该脚本的安装符合FHS规范, 如需自定义目录请手动使用go编译
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install

二、 配置

  • Windows GUI客户端, 右键导出客户端配置

三、 代理配置

vim /etc/profile

export http_proxy='socks5://127.0.0.1:10808'
export https_proxy='socks5://127.0.0.1:10808'

一、 二进制安装

二、 基于容器构建

2.1 容器构建

vim Dockerfile

FROM centos:centos7.9.2009

ARG NODE_EXPORTER_HOME=/usr/local/node-exporter

# Add file
COPY ./node_exporter-1.7.0.linux-amd64.tar.gz /opt

# tar file and rename to "prometheus"
RUN mkdir -p ${NODE_EXPORTER_HOME}
RUN tar -xzvf /opt/node_exporter-1.7.0.linux-amd64.tar.gz -C /usr/local/node-exporter --strip-components=1

RUN groupadd -r node_exporter && \
useradd -g node_exporter -s /bin/bash -c "node_exporter user" node_exporter && \
chown -R node_exporter:node_exporter /usr/local/node-exporter

# port
EXPOSE 9100

WORKDIR ${NODE_EXPORTER_HOME}

USER node_exporter

ENTRYPOINT [ "./node_exporter" ]

2.2 容器编排

vim docker-compose.yml

version: "3"
services:
node_exporter:
image: node_exporter:latest
user: "node_exporter"
ports:
- "9100:9100"
container_name: node_exporter
restart: always
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.rootfs=/rootfs'
- '--path.sysfs=/host/sys'
- '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)'
networks:
default:
driver: bridge

一、 部署 Docker

1.1 安装 Docker

yum install yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

yum install docker-ce \
docker-ce-cli \
containerd.io \
docker-buildx-plugin \
docker-compose-plugin

1.2 设置 docker 自启

systemctl enable docker.socket --now
systemctl enable docker --now

二、 配置容器MySQL

2.1 获取 MySQL 容器

官方容器
docker pull mysql/mysql-server:5.7.41

2.2 创建相关目录

  • MySQL数据目录: mkdir -p /home/mysql-5.7.41/data
  • MySQL配置目录: mkdir -p /home/mysql-5.7.41/conf

2.3 容器编排文件

#vim docker-compose.yml
version: '3'
services:
mysql:
image: mysql/mysql-server:5.7.41
restart: always
container_name: mysql-5.7.41
environment:
MYSQL_ROOT_PASSWORD: $youpasswd
TZ: Asia/Shanghai
ports:
- 3307:3307
volumes:
- /home/mysql-5.7.41/data:/var/lib/mysql
- /home/mysql-5.7.41/conf/my.cnf:/etc/mysql/my.cnf

2.4 MySQL 配置文件

#vim /home/mysql-5.7.41/conf/my.cnf
[mysqld]
port=3307
user=mysql
default-storage-engine=INNODB
character-set-server=utf8
character-set-client-handshake=FALSE
collation-server=utf8mb4_general_ci
init_connect='SET NAMES utf8'
max_connections=1000
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4

三、 启动容器 MySQL

  • 启动
    docker-compose up -d
  • 日志
    docker logs -f mysql-5.7.41

零、 Environment

CentOS7.9 x86_64 kvm
GLIBC 2.17 升级至 2.28

一、 准备工作

1.1 升级 GCC 12.3

  • 下载:
    wget --no-check-certificate https://mirrors.nju.edu.cn/gnu/gcc/gcc-12.3.0/gcc-12.3.0.tar.gz

  • 解压:
    tar -xzvf gcc-12.3.0.tar.gz

  • 安装依赖:
    yum install bzip2 gcc gcc-c++

  • 下载环境:
    /gcc-12.3.0/contrib/download_prerequisites

  • 编译安装:
    cd gcc-12.3.0
    mkdir build
    cd build
    ../configure -enable-checking=release -enable-language=c,c++ -disable-multilib
    make install

  • 参数解释:

    enable-languages     #表示你要让你的gcc支持那些语言
    disable-multilib #不生成编译为其他平台可执行代码的交叉编译器
    disable-checking #生成的编译器在编译过程中不做额外检查
    enable-checking=xxx #检查xx
  • 删除旧版 gcc:
    yum remove gcc g++

  • 链接新版 gcc (产出文件默认遵循FHS规范)
    ln -s /usr/local/bin/gcc /usr/bin/gcc

  • 验证新版 gcc

1.2 升级make

  • 下载:
    wget --no-check-certificate https://mirrors.nju.edu.cn/gnu/make/make-4.3.tar.gz

  • 解压:
    tar zxvf make-4.3.tar.gz

  • 编译安装(产出文件默认遵循FHS规范)
    cd make-4.3
    ./configure
    make -j4
    make install

  • 移除原来的make
    mv /usr/bin/make{,.back}

  • 链接新版本的make
    ln -s /usr/local/bin/make /usr/bin/make

  • 验证新版make

1.3 升级 GLIBC 2.8

  • 下载:
    wget --no-check-certificate https://mirrors.nju.edu.cn/gnu/glibc/glibc-2.28.tar.gz

  • 解压:
    tar -xzvf glibc-2.28.tar.gz

  • 编译安装
    cd glibc-2.28
    mkdir build && cd build

    ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin --disable-sanity-checks --disable-werror

    make install

不要修改 --prefix=/usr

参数解释:

--prefix=/usr/local/GLIBC-2.8:
指定安装目录的前缀。在这里,指定了/usr/local/GLIBC-2.8,这意味着编译后的文件将被安装到该目录下。

--disable-profile:
禁用性能分析支持,通常是禁用生成程序的性能分析信息。

--enable-add-ons:
启用支持附加模块的功能。这通常用于启用一些额外的功能或插件。

--with-headers=/usr/include:
指定头文件的位置,这里设置为/usr/include,告诉配置脚本在这个目录中寻找头文件。

--with-binutils=/usr/bin:
指定binutils工具的位置,这里设置为/usr/bin。Binutils包含了一组用于处理二进制文件的工具,如汇编器、链接器等。

--disable-sanity-checks:
禁用一些编译时的检查,这可能会加快编译过程,但也可能导致生成的库不够稳定或不符合某些标准。

--disable-werror:
禁用将警告视为错误的选项。通常情况下,编译过程中遇到的警告会被视为错误,导致编译中断。此选项用于忽略这些警告,即使它们本来应该导致编译失败。

二、 相关报错

2.1 安装glibc-2.28时报LD_LIBRARY_PATH相关错误

错误详情:

l * LD_LIBRARY_PATH shouldn’t contain the current directory when
* building glibc. Please change theenvironment variable
* and run configure again.

解决:
echo $LD_LIBRARY_PATH
将输出的结果临时注释, 编译安装完成之后再取消注释

2.2 更新glibc-2.28后执行yum报错Error accessing file for config file:///etc/yum.conf

错误详情:

解决: 重新安装yum

  • 下载:
    wget http://yum.baseurl.org/download/3.4/yum-3.4.3.tar.gz

  • 解压:
    tar -zxvf yum-3.4.3.tar.gz

  • 安装:
    cd yum-3.4.3
    touch /etc/yum.conf

一、 分类文章数量

文件路径: themes\next\layout\_partials\header\menu-item.njk

<!--分类文章数量-->
{%- set menuBadge = '' %}
{%- if theme.menu_settings.badges %}
{%- set badges = {
archives : site.posts.length,
categories : site.categories.length,
tags : site.tags.length,
Linux : site.categories.findOne({name: 'Linux'}).length,
NetWork : site.categories.findOne({name: 'NetWork'}).length,
Database : site.categories.findOne({name: 'Database'}).length,
'CI/CD' : site.categories.findOne({name: 'CI/CD'}).length,
Monitor : site.categories.findOne({name: 'Monitor'}).length,
K8S : site.categories.findOne({name: 'K8S'}).length,
Docker : site.categories.findOne({name: 'Docker'}).length,
OpenWrt : site.categories.findOne({name: 'OpenWrt'}).length
}
%}
{%- for menu, count in badges %}
{%- if node.name == menu %}
{%- set menuBadge = '<span class="badge">' + count + '</span>' %}
{%- endif %}
{%- endfor %}
{%- endif %}

二、 单行代码颜色

文件路径: \themes\next\source\css\_common\scaffolding\highlight\index.styl

// Placeholder: $code-inline $code-block
$code-inline {
//background: var(--highlight-background);
//color: var(--highlight-foreground);
color: #c7254e;
background: #f9f2f4;
}

$code-block {
//@extend $code-inline;
background: var(--highlight-background);
color: var(--highlight-foreground);
line-height: $line-height-code-block;
margin: 0 auto 20px;
}

三、 关于搜索功能

hexo配置文件: /_config

search:
# path: ./node_modules/hexo-generator-searchdb/templates/search.xml
path: search.json
field: post
content: true
format: html
limit: 1000

四、 背景图片

主题配置文件: /themes/next/_config.yml

custom_file_path:
#head: source/_data/head.njk
#header: source/_data/header.njk
#sidebar: source/_data/sidebar.njk
#postMeta: source/_data/post-meta.njk
#postBodyEnd: source/_data/post-body-end.njk
#footer: source/_data/footer.njk
#bodyEnd: source/_data/body-end.njk
#variable: source/_data/variables.styl
#mixin: source/_data/mixins.styl
style: source/_data/styles.styl

创建文件: /blog/source/_data/styles.styl

body {
background:url(/images/background.jpg);
background-repeat: no-repeat;
background-attachment:fixed;
background-position:100% 100%;
}

五、 页面圆角

主题配置文件: /themes/next/_config.yml

custom_file_path:
#head: source/_data/head.njk
#header: source/_data/header.njk
#sidebar: source/_data/sidebar.njk
#postMeta: source/_data/post-meta.njk
#postBodyEnd: source/_data/post-body-end.njk
#footer: source/_data/footer.njk
#bodyEnd: source/_data/body-end.njk
variable: source/_data/variables.styl
#mixin: source/_data/mixins.styl
style: source/_data/styles.styl

创建文件: /blog/source/_data/variables.styl

// 圆角设置
$border-radius-inner = 20px 20px 20px 20px;
$border-radius = 20px;

六、 字数统计和阅读时长

npm install hexo-symbols-count-time --save

hexo配置文件: /blog/_config.yml

symbols_count_time:
#文章内是否显示
symbols: true
time: true
# 网页底部是否显示
total_symbols: true
total_time: true

主题配置文件: /theme/next/_config.yml

symbols_count_time:
separated_meta: true # 是否换行显示 字数统计 及 阅读时长
item_text_post: true # 文章 字数统计 阅读时长 使用图标 还是 文本表示
item_text_total: true # 博客底部统计 字数统计 阅读时长 使用图标 还是 文本表示
awl: 4
wpm: 275

七、 推荐文章

npm install hexo-recommended-posts --save

hexo配置文件: /blog/_config.yml

recommended_posts:
#server: https://api.truelaurel.com #后端推荐服务器地址
timeoutInMillis: 10000 #服务时长,超过此时长,则使用离线推荐模式
internalLinks: 3 #内部文章数量
externalLinks: 1 #外部文章数量
fixedNumber: false
autoDisplay: true #自动在文章底部显示推荐文章
excludePattern: []
titleHtml: <h1>推荐文章<span style="font-size:0.45em; color:gray">(由<a href="https://github.com/huiwang/hexo-recommended-posts">hexo文章推荐插件</a>驱动)</span></h1> #自定义标题

八、 置顶文章

Next版本: 8.15

npm uninstall --save hexo-generator-index
npm install --save hexo-generator-index-pin-top

编辑文件: next/layout/_macro/post.njk, 添加如下代码

{% if post.top %}
<i class="fa fa-thumb-tack" style="color: #EB6D39"></i>
<font color=#FFFF00 >置顶</font>
<span class="post-meta-divider">|</span>
{% endif %}

推荐文章(由hexo文章推荐插件驱动)

简化版

  1. 确保vg有剩余空间
  2. 确保新系统下面两个文件不要被覆盖

/etc/fstab
/etc/sysconfig/network-scripts/ifcfg-eth0

创建快照

lvcreate --size 15G --snapshot --permission rw -n root_snapshot /dev/centos/root

挂载快照

mkdir /mnt/snapshot
mount -o nouuid /dev/centos/root_snapshot /mnt/snapshot

打包/解包

tar czvf snapshot_archive.tar.gz -C /mnt/snapshot .
tar zxvf snapshot_archive.tar.gz -C /

更新配置

cd / && dracut -f
grub2-mkconfig -o /boot/grub2/grub.cfg


零、 Introduce

ServerA:
CentOS7.9 4c4g by vmware

一、 制作 lvm 快照

/ 创建快照, 要保证 / 所在的 VG 卷组有剩余空间

查看当前 PV VG LV 情况

4个PV: /dev/sda2 /dev/sdb1 /dev/sdb2 /dev/sdc
1个VG: centos
2个LV: root swap

VG 剩余空间为0, 需先扩容 VG 空间, 然后从 VG 中创建 名为root_snapshotLV

1.1 扩容 VG

vmware中添加一块新磁盘

识别新硬盘
for i in 0 1 2; do echo "- - -" > /sys/class/scsi_host/host$i/scan; done

将sdd添加到VG

创建分区: fdisk /dev/sdd {n p default default default t 8e w}
创建 PV: pvcreate /dev/sdd1
扩充 VG: vgextend centos /dev/sdd1

1.2 创建 lvm 快照

给逻辑卷/dev/centos/root 创建一个 15G 可读写的快照 root_snapshot
lvcreate --size 15G --snapshot --permission rw -n root_snapshot /dev/centos/root

本身也是一个LV root_snapshot

三、 基于lvm快照的系统备份、迁移

通过前面的 lvm快照, 可以将快照打包再导出到其他主机上实现系统的备份和迁移

3.1 原理解释

需要将快照挂载到一个目录之后才可以进行读写操纵

原因:

只读性质: 快照是源逻辑卷的只读副本,它记录了源逻辑卷在创建快照时的状态。因此,直接对快照进行写操作是不被允许的。通过将快照挂载到一个目录,可以在这个目录上进行写操作,而不会影响源逻辑卷。
变更记录: 挂载快照后,LVM 会使用 COW(Copy-on-Write)技术来记录对快照的所有写操作。这样可以确保源逻辑卷和快照之间的差异被正确记录,而不会影响源逻辑卷的内容。
提供访问: 将快照挂载到一个目录后,您可以访问其内容并对其进行读写操作,以查看或修改快照中的文件。这对于数据还原、备份等操作非常有用。

3.2 挂载快照

错误挂载

[root@centos7 ~]# mkdir /mnt/snapshot
[root@centos7 ~]# mount /dev/centos/root_snapshot /mnt/snapshot/
mount: wrong fs type, bad option, bad superblock on /dev/mapper/centos-root_snapshot,
missing codepage or helper program, or other error

In some cases useful info is found in syslog - try
dmesg | tail or so.
[root@centos7 ~]#

dmesg 报错日志
/dev/centos/root/dev/centos/root_snapshot的uuid相同

正确挂载
mount -o nouuid /dev/centos/root_snapshot /mnt/snapshot/

可以看到 /mnt/snapshot下面就是原来的/

3.3 打包系统

tar czvf snapshot_archive.tar.gz -C /mnt/snapshot .

3.4 迁移系统

这两个文件使用新的
/etc/fstab
/etc/sysconfig/network-scripts/ifcfg-eth0

将打包后的文件在一台空白系统上释放覆盖原来的文件
tar zxvf snapshot_archive.tar.gz -C /

3.5重建 initramfs

确保当前工作目录是 /
Ubuntu/Debian: update-initramfs -u
CentOS/RHEL: dracut -f
openSUSE: mkinitrd

3.6 更新 GRUB 配置

grub2-mkconfig -o /boot/grub2/grub.cfg

3.7 重启

reboot

一、 pve控制台调整磁盘大小

二、 lvm 逻辑卷管理

2.1 /dev/sda2 扩容

parted /dev/sda
resizepart 2 100%

2.2 更新 pv

pvresize /dev/sda2
vg 的大小同样发生了变化

2.3 更新 lv

更新 / 的 lv大小
lvresize --extents +100%FREE --resizefs /dev/mapper/centos-root

三、 非 lvm逻辑卷

resize2fs /dev/sda2

创建新的仓库

git init

全局配置

git config --list

git config --global user.name hilyso
git config --global user.email [email protected]

全局配置

vim ~/.gitconfig

[user]
name = hilyso
email = [email protected]

验证ssh配置

ssh -T [email protected]

示例 1

拉取远程仓库到本地, 添加 123.txt后在推动至远程仓库

git init 
git remote add origin [email protected]:hilyso/test.git
git pull origin master
echo 123>123.txt
git add 123.txt
git commit -m 'add 123.txt'
git push origin master

远程仓库管理

git remote add git@github.com:hilyso/hilyso.hithub.io.git
git remote show

ENV:

HW: kvm
Arch: x86_64
OS: CentOS7.9

一、 安装 nodejs

1.1 yum 安装

yum install nodejs

1.2 二进制安装

https://nodejs.org/download/release/v16.20.2/

本文采用二进制安装, 因为yum安装的node和openssl版本有冲突
下载文件后, 解压至 /usr/local; 然后通过软连接到系统变量

tar -xzvf node-v12.22.12-linux-x64.tar.gz
mv node-v12.22.12-linux-x64 /usr/local/
ln -s /usr/local/node-v12.22.12-linux-x64/ /usr/local/nodejs
ln -s /usr/local/nodejs/bin/node /usr/bin/node
ln -s /usr/local/nodejs/bin/npm /usr/bin/npm

二、 安装 hexo

2.1 创建目录

后面所有的命令都在这个目录下执行
mkdir /mdzz
npm install hexo

2.2 创建软连接

ln -s /mdzz/node_modules/hexo/bin/hexo /usr/bin/hexo

2.3 建站

hexo init blog
cd blog
npm install

2.4 临时启动

hexo s

2.5 完整启动

hexo g

推荐文章(由hexo文章推荐插件驱动)