简介

运维常用操作记录

已添加内容

2025-05-13

添加大陆法律部分

2025-05-09

添加mysql数据库查看表大小部分 添加 miniconda部分

2025-05-07

添加nfs部分

2025-04-29

  • 添加存储性能测试部分

2025-03-26

  • 添加大模型相关部分
  • 添加docker nvidia部分

2025-03-21

  • 添加es工具部分
  • 添加证书生成部分

2025-03-20

  • 添加docker基础部分
  • 添加ffmpeg推流部分
  • 添加du /ncdu部分

操作系统-Linux

Linux-基础

Linux-时间相关


1. 更新系统时间并同步

Ubuntu 系统通常使用 systemd-timesyncdntp 服务来同步时间。

使用 timedatectl 同步时间:

sudo timedatectl set-ntp true  

这将启用自动网络时间同步功能。

检查当前时间状态:

timedatectl status  

输出中应该看到 NTP synchronized: yes,表示时间同步成功。

手动强制同步时间(可选):

如果自动同步未立即生效,可以通过安装并使用 ntpdate 手动同步:

sudo apt update  
sudo apt install ntpdate -y  
sudo ntpdate ntp.ubuntu.com  

2. 设置时区为上海

时区可以通过 timedatectl 或直接修改 /etc/localtime 来设置。

使用 timedatectl 设置:

sudo timedatectl set-timezone Asia/Shanghai  

验证时区设置:

timedatectl  

输出中应该显示 Time zone: Asia/Shanghai


3. 更新时间同步工具(可选)

如果你希望使用更强大的时间同步服务,可以安装 chrony(推荐)或 ntp

安装 Chrony:

sudo apt install chrony -y  
sudo systemctl enable chrony  
sudo systemctl start chrony  

检查 Chrony 状态:

chronyc tracking  

4. 验证时间与时区

最后,检查系统时间是否正确:

date  

输出中应该显示北京时间(上海时区)。


完成以上步骤后,Ubuntu 的时间将同步并设置为上海时区。

Linux-内存

内存使用分析

# 1. free命令
free -h  

# 2. top命令
top 

# 3. htop
htop

# 4. vmstat命令
vmstat 1  

# 5. ps命令
ps aux --sort=-%mem | head -n 10  

# 6. 使用 /proc/meminfo
cat /proc/meminfo  

# 7. 使用 smem
apt -y install smem  
smem -r -k 

# 8. 使用 pmap,pmap 可以用于显示进程的内存映射情况。
pmap <pid>  

9. 使用 sar
apt -y install sysstat  
sar -r 1  

Linux-网络

设置代理

linux 代理软件squid

官方网站]

安装

sudo apt install squid -y  

配置 文件

/etc/squid/squid.conf


linux 配置代理

unset http_proxy
unset https_proxy
unset ftp_proxy
unset no_proxy
git config --global https.proxy http://127.0.0.1:1080
git config --global http.proxy http://127.0.0.1:1080
git config --global --unset http.proxy
git config --global --unset https.proxy

linux SoftEtherVPN server

容器方式安装

mkdir openvpn
docker run -d -name openvpn-base nxt5656/ubuntu:SoftEtherVPN-openvpn
docker cp openvpn-base:/app/vpn_server.config openvpn/vpn_server.config
docker stop openvpn-base && docker rm openvpn-base
docker run \
    --restart=always \
    --name openvpn \
    -v $PWD/openvpn/vpn_server.config:/app/vpn_server.config \
    -v $PWD/openvpn/server_log:/app/server_log \
    -v $PWD/openvpn/security_log:/app/security_log \
    -v $PWD/openvpn/packet_log:/app/packet_log \
    -d \
    -p 1194:1194/udp \
    -p 5555:5555  \
    nxt5656/ubuntu:SoftEtherVPN-openvpn

Linux-安全

Linux-存储

Linux-搭建nfs服务

安装服务端

sudo apt update
sudo apt install -y nfs-kernel-server

配置服务端

# 创建nfs目录
mkdir /data/nfs
chown nobody:nogroup  /data/nfs/
chmod 777 /data/nfs
# 配置exports
sudo tee /etc/exports <<-'EOF'
/data/nfs *(rw,sync,no_subtree_check)
EOF
#配置生效,启动服务
sudo exportfs -a
sudo systemctl start nfs-kernel-server
sudo systemctl enable nfs-kernel-server
# 检查nfs
showmount -e 

安装客户端

sudo apt-get install -y  nfs-common

Linux-常用存储相关命令工具-du/ncdu

1 du

du (Disk Usage) 对指定的文件集合进行设备空间使用汇总,对目录递归处理。

示例:

du -h  

使用方法:

du [选项]... [文件]...  
或:  
du [选项]... --files0-from=F  

参数说明: 长选项的强制参数对短选项同样适用。 常用选项:

-0, --null:用空字符(NUL)而不是换行符结束每行输出。
-a, --all:对所有文件(而不仅仅是目录)输出计数。
--apparent-size:显示表面大小而不是设备使用量;虽然表面大小通常较小,但由于文件中的空洞(稀疏文件)、内部碎片、间接块等原因,可能会更大。
-B, --block-size=SIZE:在输出前按指定的单位 SIZE 缩放大小,例如 -BM 将以 1,048,576 字节为单位输出大小;详见下方的 SIZE 格式说明。
-b, --bytes:等同于 --apparent-size --block-size=1。
-c, --total:输出总计。
-D, --dereference-args:仅对命令行中列出的符号链接进行解引用。
-d, --max-depth=N:仅当目录或文件(使用 --all)距离命令行参数 N 层或更少时输出总计;--max-depth=0 等同于 --summarize。
--files0-from=F:对文件 F 中列出的以空字符分隔的文件名汇总设备使用情况;如果 F 是 -,则从标准输入读取文件名。
-H:等同于 --dereference-args(-D)。
-h, --human-readable:以人类可读的格式输出大小(例如 1K、234M、2G)。
--inodes:列出 inode 使用信息,而不是块使用信息。
-k:等同于 --block-size=1K。
-L, --dereference:对所有符号链接进行解引用。
-l, --count-links:对硬链接文件重复计数。
-m:等同于 --block-size=1M。
-P, --no-dereference:不跟随任何符号链接(默认行为)。
-S, --separate-dirs:对目录不包括子目录的大小。
--si:类似 -h,但使用 1000 的幂而不是 1024。
-s, --summarize:仅对每个参数显示总计。
-t, --threshold=SIZE:排除大小小于 SIZE 的条目(如果为正数),或排除大小大于 SIZE 的条目(如果为负数)。
--time:显示目录或其子目录中任意文件的最后修改时间。
--time=WORD:显示时间为 WORD 指定的类型,而不是默认的修改时间;可选值包括 atime(访问时间)、access、use、ctime(状态更改时间)或 status。
--time-style=STYLE:按 STYLE 显示时间,可选值包括 full-iso、long-iso、iso 或 +FORMAT;FORMAT 的解析方式与 date 命令类似。
-X, --exclude-from=FILE:排除匹配 FILE 中任意模式的文件。
--exclude=PATTERN:排除匹配 PATTERN 的文件。
-x, --one-file-system:跳过位于不同文件系统上的目录。
--help:显示此帮助信息并退出。
--version:输出版本信息并退出。

显示单位说明:

显示值的单位取决于以下来源的第一个可用单位:

  1. --block-size 参数。
  2. 环境变量 DU_BLOCK_SIZE、BLOCK_SIZE 和 BLOCKSIZE。

如果未设置上述参数或变量,单位默认使用 1024 字节(如果设置了 POSIXLY_CORRECT,则为 512 字节)。

SIZE 参数格式:

SIZE 参数是一个整数,可以带有可选单位(例如:10K 表示 10*1024)。 支持的单位包括:K, M, G, T, P, E, Z, Y, R, Q(1024 的幂)或 KB, MB, ...(1000 的幂)。 也支持二进制前缀:KiB=K, MiB=M 等。

2 ncdu

2.1 安装

apt install -y ncdu
# 或
wget "https://dev.yorhel.nl/download/ncdu-2.8.1-linux-x86_64.tar.gz"
tar -zxvf ncdu-2.8.1-linux-x86_64.tar.gz
cp ncdu /usr/bin/

2.2 使用说明

ncdu <选项> <目录>

模式选择:
-h, --help             显示此帮助信息
-v, -V, --version        打印版本号
-f 文件                  从文件中导入扫描的目录结构
-o 文件                  将扫描的目录结构导出为 JSON 格式文件
-O 文件                  将扫描的目录结构导出为二进制格式文件
-e, --extended           启用扩展信息
--ignore-config        不加载配置文件

扫描选项:
-x, --one-file-system    只扫描当前文件系统
--exclude 模式           排除符合指定模式的文件
-X, --exclude-from 文件    排除符合文件中任意模式的文件
--exclude-caches         排除包含 CACHEDIR.TAG 文件的目录
-L, --follow-symlinks    跟随符号链接(排除目录符号链接)
--exclude-kernfs         排除 Linux 伪文件系统(procfs, sysfs, cgroup, ...)
-t 数量                  使用指定数量的线程进行扫描

导出选项:
-c, --compress           与 -o 一起使用时,使用 Zstandard 压缩
--compress-level 数量    设置压缩级别
--export-block-size KiB  与 -O 一起使用时,设置导出块大小(单位 KiB)

界面选项:
-0, -1, -2               扫描时使用的 UI 模式 (0=无界面, 2=完整 ncurses 界面)
-q, --slow-ui-updates    "安静"模式,刷新间隔 2 秒
--enable-shell           启用/禁用启动 shell 的功能
--enable-delete          启用/禁用文件删除功能
--enable-refresh         启用/禁用目录刷新功能
-r                       只读模式 (--disable-delete)
-rr                      只读模式++ (--disable-delete & --disable-shell)
--si                     使用十进制 (SI) 前缀(如 MB, GB)而不是二进制前缀(如 MiB, GiB)
--apparent-size          默认显示文件实际大小而不是占用的磁盘空间
--hide-hidden            默认隐藏“隐藏”文件或被排除的文件
--show-itemcount         默认显示项目计数列
--show-mtime             默认显示修改时间列(需要 -e 选项)
--show-graph             默认显示图表列
--show-percent           默认显示百分比列
--graph-style 样式       图表样式:hash / half-block / eighth-block
--shared-column          共享列显示:off / shared / unique
--sort 列-(asc/desc)     排序方式:disk-usage(磁盘使用量)/ name(名称)/ apparent-size(实际大小)/ itemcount(项目计数)/ mtime(修改时间),可指定 asc(升序)/ desc(降序)
--enable-natsort         按名称排序时使用自然排序(例如 1, 2, 10 而不是 1, 10, 2)
--group-directories-first 将目录排在文件前面
--confirm-quit           退出 ncdu 前询问确认
--no-confirm-delete      删除前不询问确认
--color 配色方案         配色方案:off(关闭)/ dark(深色)/ dark-bg(深色背景)

请参考 man ncdu 获取更多信息。

Linux-存储性能测试-fio

安装fio

apt update && apt install -y fio

参数说明

fio参数

使用demo

fio-3.16

顺序读:
fio -filename=./test.file -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_r
随机读:
fio -filename=./test.file -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=16k -size=20G -numjobs=10 -runtime=600 -group_reporting -name=test_randr
随机写:
fio -filename=./test.file -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_randw
顺序写:
fio -filename=./test.file -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_w
混合随机读写:
fio -filename=./test.file -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_r_w -ioscheduler=noop


100%随机,100%读, 4K
fio -filename=./test.file -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=4k -size=20G -numjobs=50 -runtime=180 -group_reporting -name=rand_100read_4k

100%随机,100%写, 4K
fio -filename=./test.file -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=4k -size=20G -numjobs=50 -runtime=180 -group_reporting -name=rand_100write_4k

100%顺序,100%读 ,4K
fio -filename=/test.file -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=4k -size=20G -numjobs=50 -runtime=180 -group_reporting -name=sqe_100read_4k

100%顺序,100%写 ,4K
fio -filename=/data-g/test.file -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=4k -size=20G -numjobs=50 -runtime=180 -group_reporting -name=sqe_100write_4k

100%随机,70%读,30%写 4K
fio -filename=./test.file -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=4k -size=10G -numjobs=50 -runtime=180 -group_reporting -name=randrw_70read_4k

代码管理

代码管理-git

代码仓库-github

代码仓库-gitlab

编程语言-Python

编程语言-Python-miniconda

miniconda的安装

mkdir -p ~/miniconda3
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
rm -rf ~/miniconda3/miniconda.sh
conda init
source ~/.bashrc

# 手动修改bashrc,默认不需要
#echo "export PATH=~/miniconda3/bin:$PATH" >>  ~/.bashrc
#source ~/.bashrc

conda的简单操作

# 查看版本
conda --version
# 更新conda
conda update conda
# 创建新环境
conda create --name <环境名称> python=<版本号>
# 查看所有可用的 Python 版本
conda search python
# 查看当前环境中已安装的 Python 版本:
conda list python
# 激活环境
conda activate <环境名称>
# 退出环境
conda deactivate
# 列出环境
conda env list
# 删除环境
conda remove --name <环境名称> --all
# 导出环境配置
conda env export > environment.yml
# 从配置文件创建环境
conda env create -f environment.yml
# 镜像加速
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes
# 删除已添加的镜像源(如果需要清理配置)
conda config --remove-key channels

环境内操作

# 安装包
conda install <包名>
conda install jupyterlab
pip install jupyterlab-language-pack-zh-CN
python -m ipykernel install --user --name=zb-dev --display-name "Python zb-dev"
conda run -n py3_wj -m ipykernel install --user --name=zb-dev --display-name "Python zb-dev"


# 更新包
conda update <包名>
# 卸载包
conda remove <包名>

编程语言-Golang

虚拟化-KVM

虚拟化-容器

容器-Docker

Docker-基础

更新时间: 2025-03-20

一. Docker 安装

1.1 Linux安装(ubuntu)

# 更新软件源 并安装docker及docker-compose
# Docker Compose 是一个用于定义和管理多容器 Docker 应用的工具。它通过一个单一的配置文件(通常是 docker-compose.yml 文件)来描述应用需要的服务、网络和数据卷等配置。借助 Docker Compose,开发者可以轻松地启动、停止和管理由多个容器组成的复杂应用。
sudo apt update && sudo  apt install -y docker.io docker-compose-v2 

# 添加当前用户到docker组,可以让非管理员用户可以使用docker命令,非必须
sudo usermod -aG docker $USER

# 生成docker配置文件,非必须,主要为了优化后续使用相关
# data-root部分主要是为了将docker的数据目录移动到非默认目录,默认情况是/var/lib/docker,
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "data-root": "/data/docker-data",
  "log-driver":"json-file",
  "log-opts": {"max-size":"500m", "max-file":"3"},
  "registry-mirrors": ["https://hub.atomgit.com"]
}
EOF

# 重启docker服务,修改配置后,需要重新加载配置
systemctl daemon-reload
systemctl restart docker

1.2 其它系统安装

官方安装链接

Docker-安装nvida docker

前提: 安装好docker

docker安装

官方安装文档

一. 配置存储库

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \
    | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list \
    | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' \
    | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update

二. 安装 NVIDIA Container Toolkit 软件包

sudo apt-get install -y nvidia-container-toolkit

三. 配置 Docker 以使用 Nvidia 驱动程序

sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

Docker-无根模式

官方文档

Docker-构建镜像

容器-Podman

官方安装文档 官方文档

虚拟化-Kubernetes

官方文档

数据库-MySQL

MySQL-常用操作

查看mysql数据库中每个表的大小

  1. 查看单个数据库中所有的表大小
SELECT
    TABLE_NAME AS `表名`,
    ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS `大小(MB)`,
    ROUND(DATA_LENGTH / 1024 / 1024, 2) AS `数据(MB)`,
    ROUND(INDEX_LENGTH / 1024 / 1024, 2) AS `索引(MB)`,
    TABLE_ROWS AS `行数`,
    CREATE_TIME AS `创建时间`,
    UPDATE_TIME AS `更新时间`
FROM
    information_schema.TABLES
WHERE
    TABLE_SCHEMA = 'your_database_name'  -- 替换为你的数据库名
ORDER BY
    (DATA_LENGTH + INDEX_LENGTH) DESC;
  1. 查看所有数据库中所有表的大小
SELECT
    TABLE_SCHEMA AS `数据库`,
    TABLE_NAME AS `表名`,
    ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS `大小(MB)`
FROM
    information_schema.TABLES
ORDER BY
    (DATA_LENGTH + INDEX_LENGTH) DESC;
  1. 计算单个表的大小
SELECT
    ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS `大小(MB)`
FROM
    information_schema.TABLES
WHERE
    TABLE_SCHEMA = 'your_database_name'  -- 替换为数据库名
    AND TABLE_NAME = 'your_table_name';  -- 替换为表名
  1. 查看每个库的大小
SELECT
    table_schema AS `数据库名`,
    ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS `大小(MB)`
FROM
    information_schema.TABLES
GROUP BY
    table_schema
ORDER BY
    SUM(data_length + index_length) DESC;

关键字段解释:

  1. DATA_LENGTH:表数据占用的字节数。
  2. INDEX_LENGTH:索引占用的字节数。
  3. TABLE_ROWS:表中的估计行数(对于 InnoDB 引擎,此值为近似值)。
  4. CREATE_TIME 和 UPDATE_TIME:表的创建和最后更新时间。

注意事项

  1. 需要有 information_schema 表的查询权限(通常普通用户即可)。
  2. 结果可能存在微小误差,尤其是对 InnoDB 表(行数为估算值)。
  3. 对于大数据库,查询可能需要一些时间,可通过 LIMIT 限制结果数量。

如果需要更直观的可视化,可以将查询结果导出到 Excel 或使用数据库管理工具(如 Navicat、phpMyAdmin)查看。

数据库-Redis

数据库-MongoDB

数据库-ElasticSearch

ElasticSearch-安装-单节点-docker

docker run -dit --name=es docker.elastic.co/elasticsearch/elasticsearch:8.17.0 /bin/bash
docker exec -it es /bin/bash
./bin/elasticsearch-certutil ca
./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
sudo docker cp es:/usr/share/elasticsearch/elastic-certificates.p12 .


mkdir -p es01/data
mkdir -p es01/logs
mkdir plugins

sudo chmod 777 es* -R
sudo chmod 777 elastic* 
sudo sysctl -w vm.max_map_count=262144  
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf  
sudo sysctl -p 
sudo systemctl restart docker  

## todo 这里修改yaml文件
docker compose up -d

docker exec -ti es01 bash
./bin/elasticsearch-setup-passwords auto

docker-compose.yam

version: '2.2'
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.17.0
    container_name: es01
    restart: always
    environment:
      - node.name=es01
      - cluster.name=es-docker-cluster
      - cluster.initial_master_nodes=es01
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms10g -Xmx10g"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - ./es01/data:/usr/share/elasticsearch/data
      - ./es01/logs:/usr/share/elasticsearch/logs
      - ./plugins:/usr/share/elasticsearch/plugins
      - ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - ./elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12
    ports:
      - 9200:9200
    networks:
      - elastic

  
  kib01:
    depends_on:
      - es01
    image: docker.elastic.co/kibana/kibana:8.17.0
    container_name: kib01
    restart: always
    ports:
      - 5601:5601
    environment:
      ELASTICSEARCH_URL: http://es01:9200
      ELASTICSEARCH_HOSTS: http://es01:9200
    volumes:
      - ./kibana.yml:/usr/share/kibana/config/kibana.yml
    networks:
      - elastic

networks:
  elastic:
    driver: bridge

elasticsearch.yml

network.host: 0.0.0.0
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.keystore.type: PKCS12
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.type: PKCS12
xpack.security.audit.enabled: true

kibana.yml es密码后面生成后要修改

server.name: kibana
server.host: "0.0.0.0"
xpack.monitoring.ui.container.elasticesearch.enabled: true
i18n.locale: "zh-CN"
monitoring.ui.container.elasticsearch.enabled: true
elasticsearch.username: "kibana"
elasticsearch.password: "IJ6Ufez6xiaUGpzLPMXw" 

ElasticSearch-相关工具

ElasticSearch-数据同步工具 elasticdump

官方链接

使用docker方式

# 将json文件导入本地es中(数据)
elasticdump --input=索引名称.data.json --output=http://localhost:9200/索引名称 --type=data  

# 导出mapping
docker run --rm -ti -v /root/tmp:/tmp elasticdump/elasticsearch-dump \
  --input=http://es账号:es密码@es服务器地址:9200/索引名称 \
  --output=/tmp/索引名称.mapping.json \
  --type=mapping 
  
# 导出索引数据并压缩
docker run --rm -ti -v /devops/es_test:/tmp elasticdump/elasticsearch-dump \
  --input=http://es账号:es密码@es服务器地址:9200/索引名称 \
  --type=data \
  --limit=10000 \
  --output=$ | gzip  > 索引名称.data.json.gz 

# 导出索引数据不压缩
docker run --rm -ti -v /root/tmp:/tmp elasticdump/elasticsearch-dump \
  --input=http://es账号:es密码@es服务器地址:9200/索引名称 \
  --type=data \
  --limit=10000 \
  --output=/tmp/索引名称.json
  
# 导出所有索引数据
docker run --rm -ti -v /data/backup:/tmp elasticdump/elasticsearch-dump \
  --input=http://es账号:es密码@es服务器地址:9200 \
  --type=data \
  --limit=10000 \
  --output=/tmp/备份文件.json


# 导入索引结构
docker run --rm -ti -v /root/tmp:/tmp elasticdump/elasticsearch-dump \
  --input=/tmp/索引名称.mapping.json  \
  --output=http://es账号:es密码@es服务器地址:9200/索引名称 \
  --type=mapping  \
  --noRefresh \
  --maxSockets=500

# 导出索引数据,每次操作10000条数据
docker run --rm -ti -v /devops/es_test:/tmp elasticdump/elasticsearch-dump \
  --input=http://es账号:es密码@es服务器地址:9200/索引名称 \
  --type=data \
  --limit=10000 \
  --output=/tmp/索引名称.json


docker run --rm -ti -v /data/es2:/tmp elasticdump/elasticsearch-dump \
  --input=http://es账号:es密码@es服务器地址:9200/abroad_plg_account_info_v1 \
  --output=/tmp/abroad_plg_account_info_v1.mapping.json \
  --type=data  --noRefresh  --maxSockets=500 --limit=10000

docker run --rm -ti -v /data/es2:/tmp elasticdump/elasticsearch-dump \
  --input=http://es账号:es密码@es服务器地址:9200/abroad_plg_account_info_v2 \
  --output=/tmp/abroad_plg_account_info_v2.mapping.json \
  --type=data  --noRefresh  --maxSockets=5000 --limit=10000


docker run --rm -ti -v /data/es2:/tmp elasticdump/elasticsearch-dump \
  --input=/tmp/abroad_plg_account_info_v2.mapping.json  \
  --output=http://es账号:es密码@es服务器地址:9200/abroad_plg_account_info_v2 \
  --type=data  \
  --noRefresh \
  --maxSockets=500 --limit=10000
  
docker run --rm -ti -v /data/es2:/tmp elasticdump/elasticsearch-dump \
  --input=/tmp/abroad_plg_account_info_v1.mapping.json  \
  --output=http://es账号:es密码@es服务器地址:9200/abroad_plg_account_info_v1 \
  --type=data  \
  --noRefresh \
  --maxSockets=500 --limit=10000

参数说明

elasticdump: Elasticsearch的导入和导出工具  
版本: %%version%%  
  
用法: elasticdump --input 源 --output 目标 [选项]  
  
核心选项  
--------------------  
--input  
                    源位置 (必须)  
  
--input-index  
                    源索引和类型  
                    (默认: 全部, 示例: index/type)  
  
--output  
                    目标位置 (必须)  
  
--output-index  
                    目标索引和类型  
                    (默认: 全部, 示例: index/type)  
  
  
选项  
--------------------  
--big-int-fields  
                    指定一个应检查大整数支持的字段的逗号分隔列表  
                    (默认 '')  
  
--bulkAction  
                    设置准备发送到elasticsearch的请求体时使用的操作类型。  
                    更多信息 - https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html  
                    (默认: index, 选项: [index, update, delete, create)  
  
--ca, --input-ca, --output-ca  
                    CA证书。如果源和目标相同,使用 --ca。  
                    否则,根据需要使用前缀为 --input 或 --output 的一个。  
  
--cert, --input-cert, --output-cert  
                    客户端证书文件。如果源和目标相同,使用 --cert。  
                    否则,根据需要使用前缀为 --input 或 --output 的一个。  
  
--csvConfigs  
                    设置所有fast-csv配置  
                    可以提供一个转义的JSON字符串或文件。文件位置必须用@符号作为前缀  
                    (默认: null)  
  
--csvCustomHeaders  一个用逗号分隔的值列表,将作为数据的头。此参数必须与`csvRenameHeaders`一起使用  
                    (默认 : null)  
  
--csvDelimiter  
                    将分隔列的分隔符。  
                    (默认 : ',')  
  
--csvFirstRowAsHeaders  
                    如果设置为true,第一行将被视为标题。  
                    (默认 : true)  
  
--csvHandleNestedData  
                    设置为true以处理嵌套的JSON/CSV数据。  
                    注意:这是一个非常主观的实现!  
                    (默认 : false)  
  
--csvIdColumn  
                    用于从中提取记录标识符(id)的列名  
                    在导出到CSV时,此列可以用来覆盖默认的id (@id)列名  
                    (默认 : null)  
  
--csvIgnoreAutoColumns  
                    设置为true以防止以下列 @id, @index, @type 被写入到输出文件  
                    (默认 : false)  
  
--csvIgnoreEmpty  
                    设置为true以忽略空行。  
                    (默认 : false)  
  
--csvIncludeEndRowDelimiter  
                    设置为true以在csv的末尾包含行分隔符  
                    (默认 : false)  
  
--csvIndexColumn  
                    用于从中提取记录索引的列名  
                    在导出到CSV时,此列可以用来覆盖默认的索引 (@index)列名  
                    (默认 : null)  
  
--csvLTrim  
                    设置为true以左修剪所有列。  
                    (默认 : false)  
  
--csvMaxRows  
                    如果数字> 0,则只解析指定数量的行。(例如,100将返回数据的前100行)  
                    (默认 : 0)  
  
--csvRTrim  
                    设置为true以右修剪所有列。  
                    (默认 : false)  
  
--csvRenameHeaders  
                    如果您希望文件的第一行被`csvCustomHeaders`选项中提供的内容删除并替换  
                    (默认 : true)  
  
--csvSkipLines  
                    如果数字> 0,将跳过指定数量的行。  
                    (默认 : 0)  
  
--csvSkipRows  
                    如果数字> 0,则跳过指定数量的已解析行  
                    注意:(如果第一行被视为标题,它们不是计数的一部分)  
                    (默认 : 0)  
  
--csvTrim  
                    设置为true以从列中去除所有空格。  
                    (默认 : false)  
  
--csvTypeColumn  
                    用于从中提取记录类型的列名  
                    在导出到CSV时,此列可以用来覆盖默认类型 (@type)列名  
                    (默认 : null)  
  
--csvWriteHeaders   决定是否应将标题写入csv文件。  
                    (默认 : true)  
  
--customBackoff  
                    激活自定义customBackoff函数。 (s3)  
  
--debug  
                    显示正在使用的elasticsearch命令  
                    (默认: false)  
  
--delete  
                    在移动时逐个删除输入中的文档。不会删除源索引  
                    (默认: false)  
  
--delete-with-routing  
                    将路由查询参数传递给删除功能  
                    用于将操作路由到特定的分片。  
                    (默认: false)  
  
--esCompress  
                    如果为true,添加一个Accept-Encoding头以从服务器请求压缩的内容编码(如果尚未存在)  
                    并在响应中解码支持的内容编码。  
                    注意:响应内容的自动解码是在通过请求返回的主体数据上执行的  
                    (无论是通过请求流还是传递给回调函数),但不在响应流上执行  
                    (可从响应事件获得),这是未经修改的http.IncomingMessage对象,可能包含压缩数据。  
                    见下面的例子。  
  
--fileSize  
                    支持文件分割。此值必须是**字节**模块支持的字符串。  
                    以下缩写必须用来表示单位大小  
                    b代表字节  
                    kb代表千字节  
                    mb代表兆字节  
                    gb代表吉字节  
                    tb代表太字节  
                    例如:10mb / 1gb / 1tb  
                    分区有助于通过有效地将文件切成更小的块来缓解溢出/内存不足的异常,  
                    然后可以根据需要合并这些块。  
  
--filterSystemTemplates  
                    是否删除metrics-*-* 和 logs-*-* 系统模板  
                    (默认: true])  
  
--force-os-version  
                    强制elasticsearch-dump使用的OpenSearch版本。  
                    (默认: 7.10.2)  
  
--fsCompress  
                    在发送输出到文件之前压缩数据。  
                    在导入时,该命令用于解压缩gzipped文件  
  
--handleVersion  
                    告诉elastisearch传输如果数据集中存在`_version`字段则处理它  
                    (默认 : false)  
  
--headers  
                    添加到Elastisearch请求的自定义头(当  
                    你的Elasticsearch实例位于代理后面时很有用)  
                    (默认: '{"User-Agent": "elasticdump"}')  
                    支持基于类型/方向的头,例如。input-headers/output-headers  
                    (这些将仅根据当前的流类型input/output添加)  
  
--help  
                    这个页面  
  
--ignore-errors  
                    在写入错误时将继续读/写循环  
                    (默认: false)  
  
--ignore-es-write-errors  
                    在elasticsearch写入错误时将继续读/写循环  
                    (默认: true)  
  
--inputSocksPort, --outputSocksPort  
                    Socks5主机端口  
  
--inputSocksProxy, --outputSocksProxy  
                    Socks5主机地址  
  
--inputTransport  
                    提供一个自定义的js文件作为输入传输  
  
--key, --input-key, --output-key  
                    私钥文件。如果源和目标相同,使用 --key。  
                    否则,根据需要使用前缀为 --input 或 --output 的一个。  
  
--limit  
                    每次操作移动多少个对象  
                    对于文件流,限制是大约的  
                    (默认: 100)  
  
--maxRows  
                    支持文件分割。文件是按指定的行数分割的  
  
--maxSockets  
                    进程可以同时进行多少个HTTP请求?  
                    (默认:  
                      5 [node <= v0.10.x] /  
                      无限制 [node >= v0.11.x] )  
  
--noRefresh  
                    禁用输入索引刷新。  
                    正面:  
                      1. 索引速度大大提高  
                      2. 对硬件的要求大大降低  
                    负面:  
                      1. 最近添加的数据可能没有被索引  
                    推荐在对大数据进行索引时使用,  
                    其中速度和系统健康是比最近添加的数据更高的优先级。  
  
--offset  
                    包含你希望从输入传输跳过的行数的整数。当导入大量  
                    索引时,事情可能会出错,无论是连通性,崩溃,  
                    有人忘记`screen`等。这允许你  
                    从最后一行已知的行重新开始转储  
                    (由输出中的`offset`记录)。请注意  
                    由于在最初创建转储时没有指定排序,因此没有真正的方式来  
                    保证已经跳过的行已经被  
                    写入/解析。这更多的是一个选项,当你  
                    想要在索引中获取尽可能多的数据时,而不关心在过程中可能丢失一些行,  
                    类似于`timeout`选项。  
                    (默认: 0)  
  
--outputTransport  
                    提供一个自定义的js文件作为输出传输  
  
--overwrite  
                    如果存在则覆盖输出文件  
                    (默认: false)  
  
--params  
                    添加自定义参数到Elastisearch请求uri。当你例如  
                    想要使用elasticsearch preference时很有用  
                    --input-params是一个特定的参数扩展,可以在使用滚动api获取数据时使用  
                    --output-params是一个特定的参数扩展,可以在使用批量索引api索引数据时使用  
                    注意:这些是为了避免参数污染问题,这些问题发生在输入参数在输出源中使用时  
                    (默认: null)  
  
--parseExtraFields  
                    要解析的元字段的逗号分隔列表  
  
--pass, --input-pass, --output-pass  
                    私钥的通行证。如果源和目标相同,使用 --pass。  
                    否则,根据需要使用前缀为 --input 或 --output 的一个。  
  
--quiet  
                    除错误外,禁止所有消息  
                    (默认: false)  
  
--retryAttempts  
                    指示当连接因以下错误失败时,请求应自动重试的次数`ECONNRESET`, `ENOTFOUND`, `ESOCKETTIMEDOUT`,  
                    ETIMEDOUT`, `ECONNREFUSED`, `EHOSTUNREACH`, `EPIPE`, `EAI_AGAIN`  
                    (默认: 0)  
  
--retryDelay  
                    指示重试尝试之间的回退/休息期(毫秒)  
                    (默认 : 5000)  
  
--retryDelayBase  
                    用于操作重试的指数回退的基本毫秒数。(s3)  
  
--scroll-with-post  
                    使用HTTP POST方法进行滚动,而不是默认的GET  
                    (默认: false)  
  
--scrollId  
                    从elasticsearch返回的最后一个滚动Id。  
                    这将允许使用最后的滚动Id恢复转储 &  
                    `scrollTime` 尚未过期。  
  
--scrollTime  
                    节点将按顺序保持请求的时间。  
                    (默认: 10m)  
  
--searchBody  
                    根据搜索结果执行部分提取  
                    当ES是输入时,默认值是  
                      如果 ES > 5  
                        `'{"query": { "match_all": {} }, "stored_fields": ["*"], "_source": true }'`  
                      否则  
                        `'{"query": { "match_all": {} }, "fields": ["*"], "_source": true }'`  
                    [从6.68.0开始] 如果searchBody前面有一个@符号,elasticdump将在指定的位置执行文件查找  
                    注意:文件必须包含有效的JSON  
  
--searchBodyTemplate  
                    可以调用的方法/函数来搜索主体  
                        doc.searchBody = { query: { match_all: {} }, stored_fields: [], _source: true };  
                    可以多次使用。  
                    此外,searchBodyTemplate可以由模块执行。参见下面的[searchBody模板](#search-template)。  
  
--searchWithTemplate  
                    使用 --searchBody 时启用搜索模板  
                    如果使用搜索模板,则searchBody必须包含"id"字段和"params"对象  
                    如果搜索模板中定义了"size"字段,它将被 --size 参数覆盖  
                    有关  
                    进一步的信息请参见 https://www.elastic.co/guide/en/elasticsearch/reference/current/search-template.html   
                    (默认: false)  
  
--size  
                    要检索多少对象  
                    (默认: -1 -> 无限制)  
  
--skip-existing  
                    当启用时,跳过resource_already_exists_exception并退出成功  
                    (默认: false)  
  
--sourceOnly  
                    只输出文档_source中包含的json  
                    正常: {"_index":"","_type":"","_id":"", "_source":{SOURCE}}  
                    sourceOnly: {SOURCE}  
                    (默认: false)  
  
--support-big-int  
                    支持大整数  
  
--templateRegex  
                    在传递给输出传输之前过滤模板的正则表达式  
                    (默认: ((metrics|logs|\..+)(-.+)?)  
  
--timeout  
                    包含等待  
                    请求响应的毫秒数,在请求超时前中止请求。直接传递  
                    到请求库。主要用于当你不太在乎导入时是否丢失一些数据  
                    但更希望有速度。  
  
--tlsAuth  
                    启用TLS X509客户端认证  
  
--toLog  
                    当使用自定义outputTransport时,应该将日志行  
                    附加到输出流?  
                    (默认: true, 除了 `$`)  
  
--transform  
                    可以调用的方法/函数,用于在写入目标之前修改文档。全局变量 'doc'  
                    是可用的。  
                    用于计算新字段 'f2' 作为字段 'f1' 的双倍值的示例脚本:  
                        doc._source["f2"] = doc._source.f1 * 2;  
                    可以多次使用。  
                    此外,transform可以由模块执行。参见下面的[模块转换](#module-transform)。  
  
--type  
                    我们要导出什么?  
                    (默认: data, 选项: [index, settings, analyzer, data, mapping, policy, alias, template, component_template, index_template])  
  
--versionType  
                    Elasticsearch版本类型。应为`internal`, `external`, `external_gte`, `force`。  
                    注意:类型验证由批量端点处理,而不是由elasticsearch-dump处理  
  
  
AWS特定选项  
--------------------  
--awsAccessKeyId 和 --awsSecretAccessKey  
                    当使用由  
                    AWS身份和访问管理 (IAM) 保护的Amazon Elasticsearch Service时,提供  
                    你的访问密钥ID和秘密访问密钥。  
                    --sessionToken也可以提供,如果使用临时凭证  
  
--awsChain  
                    使用[标准](https://aws.amazon.com/blogs/security/a-new-and-standardized-way-to-manage-credentials-in-the-aws-sdks/)  
                    位置和排序来解析凭证,包括环境变量,  
                    配置文件,EC2和ECS元数据位置 _推荐使用AWS的此选项_  
  
--awsIniFileName  
                    当使用 --awsIniFileProfile 时,覆盖默认的aws ini文件名  
                    文件名相对于 ~/.aws/  
                    (默认: config)  
  
--awsIniFileProfile  
                    替代 --awsAccessKeyId 和 --awsSecretAccessKey,  
                    从aws ini文件的指定配置文件中加载凭证。  
                    对于更大的灵活性,考虑使用 --awsChain  
                    并设置AWS_PROFILE和AWS_CONFIG_FILE  
                    环境变量以在需要时覆盖默认值  
  
--awsRegion  
                    设置将为其生成签名的AWS区域  
                    (默认: 从主机名或主机计算)  
  
--awsService  
                    设置将为其生成签名的AWS服务  
                    (默认: 从主机名或主机计算)  
  
--awsUrlRegex  
                    覆盖用于验证应签名的AWS url的默认正则表达式  
                    (默认: ^https?:\/\/.*\.amazonaws\.com.*$)  
  
--s3ACL  
                    S3 ACL: private | public-read | public-read-write | authenticated-read | aws-exec-read |  
                    bucket-owner-read | bucket-owner-full-control [默认 private]  
  
--s3AccessKeyId  
                    AWS访问密钥ID  
  
--s3Compress  
                    在发送到s3之前gzip数据  
  
--s3Configs  
                    设置所有s3构造函数配置  
                    可以提供一个转义的JSON字符串或文件。文件位置必须用@符号作为前缀  
                    (默认: null)  
  
--s3Endpoint  
                    AWS端点,可用于AWS兼容的后端,如  
                    OpenStack Swift 和 OpenStack Ceph  
  
--s3ForcePathStyle  
                    强制使用S3对象的路径样式URL [默认 false]  
  
--s3Options  
                    设置所有显示的s3参数在此 https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#createMultipartUpload-property  
                    可以提供一个转义的JSON字符串或文件。文件位置必须用@符号作为前缀  
                    (默认: null)  
  
--s3Region  
                    AWS区域  
  
--s3SSEKMSKeyId  
                    用于aws:kms上传的KMS Id  
  
--s3SSLEnabled  
                    使用SSL连接到AWS [默认 true]  
  
--s3SecretAccessKey  
                    AWS秘密访问密钥  
  
--s3ServerSideEncryption  
                    启用加密上传  
  
--s3StorageClass  
                    设置用于s3的存储类  
                    (默认: STANDARD)

ElasticSearch-FAQ

ElasticSearch-FAQ-机器学习相关

官方文档

1. 低规格机器节点,如何加载模型?

设置值 'xpack.ml.max_machine_memory_percent'

机器学习可用于运行分析过程的机器内存的最大百分比。这些过程与 Elasticsearch JVM 分开。此限制基于机器的总内存,而不是当前可用内存。如果这样做会导致机器学习作业的估计内存使用量超过限制,则不会将作业分配给节点。启用操作员权限功能后,此设置只能由操作员用户更新。最小值是 5;最大值是 200。默认为 30。

PUT /_cluster/settings
{
    "transient" : {
        "xpack.ml.max_machine_memory_percent" : 50
    }
}

网络-网络基础

证书相关

生成根证书

1. 创建OpenSSL配置文件

首先,创建一个OpenSSL配置文件,例如openssl.cnf。该文件可以包含如下内容:

[ req ]  
default_bits       = 2048  
default_keyfile    = rootCA.key  
distinguished_name = req_distinguished_name  
x509_extensions    = v3_ca  
prompt             = no  
   
[ req_distinguished_name ]  
C                   = CN                  # 国家  
ST                  = Beijing             # 省份  
L                   = Beijing             # 城市  
O                   = My Company          # 组织名称  
OU                  = My Unit             # 组织单位  
CN                  = My Root CA          # 公共名称 
   
[ v3_ca ]  
subjectKeyIdentifier = hash  
authorityKeyIdentifier = keyid:always,issuer  
basicConstraints = CA:true  
keyUsage = critical, digitalSignature, keyCertSign, cRLSign  

配置文件说明

[req]
default_bits: 指定密钥长度,通常使用 2048 位或 4096 位。
default_keyfile: 输出密钥文件的默认名称。
distinguished_name: 指定使用的 DN 配置(例如 [req_distinguished_name])。
x509_extensions: 用于定义证书扩展,指向 [v3_ca] 配置。
prompt: 设置为 no 表示不提示交互信息,直接使用配置中的值。
[req_distinguished_name]
定义证书的主体字段:

C: 国家,使用 ISO 3166-1 的两位国家代码,例如 CN(中国)。
ST: 省份名称。
L: 城市名称。
O: 组织名称。
OU: 组织单位名称。
CN: 公共名称(通常是 CA 的名称)。
[v3_ca]
定义证书扩展:

subjectKeyIdentifier: 标识证书的公钥。
authorityKeyIdentifier: 标识签发者密钥。
basicConstraints: 指定该证书为 CA 证书(CA:true)。
keyUsage: 限定证书的用途,比如 keyCertSign 和 cRLSign。

2. 使用命令生成根证书

# 使用命令生成根证书
openssl req -x509 -new -nodes -keyout rootCA.key -sha256 -days 3650 -out rootCA.pem -config openssl.cnf
#  验证生成的证书
openssl x509 -in rootCA.pem -text -noout  

说明

rootCA.key 是生成的私钥文件
rootCA.pem 是生成的根证书文件。

openssl.conf配置文件说明

openssl.cnf 是 OpenSSL 使用的配置文件,用于定义证书、密钥以及相关操作的参数。它通常用于创建和管理证书颁发机构 (CA) 或生成自签名证书。以下是该配置文件的完整说明,包括其各个部分的典型结构和功能。


配置文件结构

openssl.cnf 文件的内容主要由以下几个部分组成,每个部分用 [section_name] 定义:

  1. Global Settings(全局设置)

    • 指定默认选项,比如默认的 CA 配置。
  2. CA Configuration(证书颁发机构配置)

    • 定义生成和管理证书的目录、文件名、策略等。
  3. Extension Configuration(扩展配置)

    • 定义证书的扩展字段,例如 Key Usage、Extended Key Usage、Subject Alternative Name 等。
  4. Policies(策略设置)

    • 定义证书的字段要求,比如是否必须包含国家、组织等。

配置文件字段说明

以下是典型的 openssl.cnf 配置文件及其字段说明。 官方示例

## OpenSSL 示例配置文件。  
# 查看 doc/man5/config.pod 了解更多信息。  
## 该文件主要用于生成证书请求,  
# 但也可用于自动加载提供程序。  
  
# 注意:您可以使用 .include 指令从主配置文件中包含其他文件。  
#.include 文件名  
  
# 如果未定义 HOME,这一定义可避免以下行出错。  
HOME			= .  
  
# 启用该设置以自动加载提供程序。  
openssl_conf = openssl_init  
  
# 注释掉下一行以忽略配置错误。  
config_diagnostics = 1  
  
# 额外的对象标识符信息:  
# oid_file       = $ENV::HOME/.oid  
oid_section = new_oids  
  
# 如果要在 "openssl x509" 实用程序的 "-extfile" 选项中使用该配置文件,  
# 需要在此处指定包含 X.509v3 扩展的部分:  
# extensions		=  
# (或者,使用一个仅在主 [= 默认] 部分包含 X.509v3 扩展的配置文件。)  
  
[ new_oids ]  
# 您可以在此处为 'ca'、'req' 和 'ts' 添加新的 OID。  
# 添加一个简单的 OID:  
# testoid1=1.2.3.4  
# 或者使用配置文件替换:  
# testoid2=${testoid1}.5.6  
  
# TSA 示例使用的策略。  
tsa_policy1 = 1.2.3.4.1  
tsa_policy2 = 1.2.3.4.5.6  
tsa_policy3 = 1.2.3.4.5.7  
  
# 对于 FIPS  
# 可选地包含一个由 OpenSSL fipsinstall 应用程序生成的文件。  
# 此文件包含 OpenSSL FIPS 提供程序所需的配置数据。  
# 它包含一个命名的部分,例如 [fips_sect],并在以下 [provider_sect] 中引用。  
# 有关更多信息,请参阅 OpenSSL 安全策略。  
# .include fipsmodule.cnf  
  
[openssl_init]  
providers = provider_sect  
  
# 要加载的提供程序列表  
[provider_sect]  
default = default_sect  
# fips 部分名称应与 fipsmodule.cnf 文件中定义的部分名称匹配。  
# fips = fips_sect  
  
# 如果没有显式激活任何提供程序,则默认提供程序会被隐式激活。  
# 参见 man 7 OSSL_PROVIDER-default 了解更多细节。  
## 如果您显式激活了任何其他提供程序,您很可能需要显式激活默认提供程序,  
# 否则默认提供程序将不可用。  
# 这可能导致依赖 OpenSSL 的应用程序无法正常工作,可能会导致重大系统问题,  
# 包括无法远程访问系统。  
[default_sect]  
# activate = 1  
  
####################################################################  
[ ca ]  
default_ca	= CA_default		# 默认 CA 部分  
  
####################################################################  
[ CA_default ]  
dir		= ./demoCA		# 所有内容存放的位置  
certs		= $dir/certs		# 已签发证书的存放位置  
crl_dir		= $dir/crl		# 已签发 CRL 的存放位置  
database	= $dir/index.txt	# 数据库索引文件。  
#unique_subject	= no			# 设置为 'no' 允许创建多个相同主题的证书。  
new_certs_dir	= $dir/newcerts		# 新证书的默认存放位置。  
  
certificate	= $dir/cacert.pem 	# CA 证书  
serial		= $dir/serial 		# 当前序列号  
crlnumber	= $dir/crlnumber	# 当前 CRL 序列号(必须注释掉以保持 V1 CRL)  
crl		= $dir/crl.pem 		# 当前 CRL  
private_key	= $dir/private/cakey.pem # 私钥  
  
x509_extensions	= usr_cert		# 要添加到证书的扩展  
  
# 注释掉以下两行以使用传统(高度不推荐)格式。  
name_opt 	= ca_default		# 主题名称选项  
cert_opt 	= ca_default		# 证书字段选项  
  
# 扩展复制选项:谨慎使用。  
# copy_extensions = copy  
  
# 添加到 CRL 的扩展。注意:Netscape Communicator 会因 V2 CRL 出错,  
# 因此默认情况下注释掉以保持 V1 CRL。  
# crlnumber 也必须注释掉以保持 V1 CRL。  
# crl_extensions	= crl_ext  
  
default_days	= 365			# 证书有效期  
default_crl_days= 30			# 下一次 CRL 的时间间隔  
default_md	= default		# 使用公钥默认 MD  
preserve	= no			# 保留传递的 DN 顺序  
  
# 指定请求外观的几种不同方式  
# 对于 CA 类型,列出的属性必须匹配,而可选和提供的字段则是可选的。  
policy		= policy_match  
  
# CA 策略  
[ policy_match ]  
countryName		= match  
stateOrProvinceName	= match  
organizationName	= match  
organizationalUnitName	= optional  
commonName		= supplied  
emailAddress		= optional  
  
# "anything" 策略  
# 在此阶段,您必须列出所有可接受的 "object" 类型。  
[ policy_anything ]  
countryName		= optional  
stateOrProvinceName	= optional  
localityName		= optional  
organizationName	= optional  
organizationalUnitName	= optional  
commonName		= supplied  
emailAddress		= optional  
  
####################################################################  
[ req ]  
default_bits		= 2048  
default_keyfile 	= privkey.pem  
distinguished_name	= req_distinguished_name  
attributes		= req_attributes  
x509_extensions	= v3_ca	# 自签名证书的扩展  
  
# 私钥密码,如果未提供则需要手动输入。  
# input_password = secret  
# output_password = secret  
  
# 设置允许的字符串类型掩码。有以下几种选项:  
# default: PrintableString, T61String, BMPString。  
# pkix	 : PrintableString, BMPString(2004 年前 PKIX 推荐)。  
# utf8only: 仅 UTF8Strings(2004 年后 PKIX 推荐)。  
# nombstr : PrintableString, T61String(无 BMPStrings 或 UTF8Strings)。  
# MASK:XXXX 字面掩码值。  
# 警告:古老版本的 Netscape 会因 BMPStrings 或 UTF8Strings 崩溃。  
string_mask = utf8only  
  
# req_extensions = v3_req # 添加到证书请求的扩展  
  
[ req_distinguished_name ]  
countryName			= 国家名称(2 个字母代码)  
countryName_default		= AU  
countryName_min			= 2  
countryName_max			= 2  
  
stateOrProvinceName		= 州或省全名  
stateOrProvinceName_default	= Some-State  
  
localityName			= 地区名称(例如,城市)  
  
0.organizationName		= 组织名称(例如,公司)  
0.organizationName_default	= Internet Widgits Pty Ltd  
  
# 通常不需要配置此项:  
#1.organizationName		= 第二组织名称(例如,公司)  
#1.organizationName_default	= World Wide Web Pty Ltd  
  
organizationalUnitName		= 组织单位名称(例如,部门)  
#organizationalUnitName_default	=  
  
commonName			= 通用名称(例如,服务器 FQDN 或您的姓名)  
commonName_max			= 64  
  
emailAddress			= 电子邮件地址  
emailAddress_max		= 64  
  
# SET-ex3			= SET 扩展编号 3  
  
[ req_attributes ]  
challengePassword		= 挑战密码  
challengePassword_min		= 4  
challengePassword_max		= 20  
  
unstructuredName		= 可选公司名称  
  
[ usr_cert ]  
# 当 'ca' 签署请求时添加的扩展。  
  
basicConstraints=CA:FALSE  
subjectKeyIdentifier=hash  
authorityKeyIdentifier=keyid,issuer  
  
[ v3_req ]  
basicConstraints = CA:FALSE  
keyUsage = nonRepudiation, digitalSignature, keyEncipherment  
  
[ v3_ca ]  
subjectKeyIdentifier=hash  
authorityKeyIdentifier=keyid:always,issuer  
basicConstraints = critical,CA:true  
  
[ crl_ext ]  
authorityKeyIdentifier=keyid:always  
  
[ proxy_cert_ext ]  
basicConstraints=CA:FALSE  
subjectKeyIdentifier=hash  
authorityKeyIdentifier=keyid,issuer  
proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo  
  
####################################################################  
[ tsa ]  
default_tsa = tsa_config1  
  
[ tsa_config1 ]  
dir		= ./demoCA  
serial		= $dir/tsaserial  
crypto_device	= builtin  
signer_cert	= $dir/tsacert.pem  
certs		= $dir/cacert.pem  
signer_key	= $dir/private/tsakey.pem  
signer_digest  = sha256  
default_policy	= tsa_policy1  
other_policies	= tsa_policy2, tsa_policy3  
digests         = sha1, sha256, sha384, sha512  
accuracy	= secs:1, millisecs:500, microsecs:100  
clock_precision_digits  = 0  
ordering		= yes  
tsa_name		= yes  
ess_cert_id_chain	= no  
ess_cert_id_alg		= sha256  
  
[insta]  
server = pki.certificate.fi:8700  
path = pkix/  
  
recipient = "/C=FI/O=Insta Demo/CN=Insta Demo CA"  
ignore_keyusage = 1  
unprotected_errors = 1  
extracertsout = insta.extracerts.pem  
  
ref = 3078  
secret = pass:insta  
  
cmd = ir  
subject = "/CN=openssl-cmp-test"  
newkey = insta.priv.pem  
out_trusted = apps/insta.ca.crt  
certout = insta.cert.pem  
  
[pbm]  
ref = $insta::ref  
secret = $insta::secret  
  
[signature]  
trusted = $insta::out_trusted  
key = $insta::newkey  
cert = $insta::certout  
  
[ir]  
cmd = ir  
  
[cr]  
cmd = cr  
  
[kur]  
cmd = kur  
oldcert = $insta::certout  
  
[rr]  
cmd = rr  
oldcert = $insta::certout  

AI-GPU相关

GPU-机器基础环境安装

安装 CUDA Toolkit

CUDA Toolkit 是由 NVIDIA 开发的一套用于 GPU 加速计算的开发工具包。它是 CUDA (Compute Unified Device Architecture) 技术的核心组成部分,允许开发者使用 NVIDIA GPU 来执行并行计算。CUDA Toolkit 提供了一整套工具、库和编译器,使开发者能够更高效地开发和优化 GPU 应用程序。

建议使用runfile方式安装 官方下载地址

Linux Ubuntu:24.04 安装Demo

wget https://developer.download.nvidia.com/compute/cuda/12.8.1/local_installers/cuda_12.8.1_570.124.06_linux.run
sudo sh cuda_12.8.1_570.124.06_linux.run

安装

AI-基础知识

模型相关

模型部署相关

常用连接

huggingface

ollama

ollama-基础

官方网站 https://ollama.com/

ollama github https://github.com/ollama/ollama

什么是ollama?

Ollama 是一个专注于本地运行人工智能模型的工具或平台。它旨在让用户能够在自己的设备上运行和使用大型语言模型(LLMs),而无需依赖云服务。这种方式为用户提供了更多的隐私和数据安全,因为所有的处理和计算都发生在本地设备上,数据不会上传到外部服务器。

ollama的核心特点是什么:

  • 本地运行:支持在个人电脑或服务器上直接运行 AI 模型,无需依赖互联网或外部云服务。
  • 隐私保护:由于数据处理在本地完成,用户的数据不会被上传到云端,从而增强了隐私性。
  • 开源或定制化支持:通常提供开源模型或者支持用户加载和运行自己定制化的模型。
  • 性能优化:针对本地硬件(如 GPU 或 CPU)进行优化,以便更高效地运行大型语言模型。
  • 便捷工具:可能提供易用的界面或命令行工具,方便用户与模型交互。

如何使用ollama?

通过ollama的接口,我们可以调用ollama的API,然后使用ollama的模型进行问答。

ollama-部署配置

使用docker 部署

模型小的情况下,可以直接使用cpu来部署ollama

只使用cpu

前提: 安装docker

docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

前提: 安装nvidia-docker

# 使用所有的GPU来部署
docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
# 使用指定的GPU来部署
docker run -d --gpus '"device=1"' -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

拉取模型

模型列表

docker exec -ti ollama ollama pull deepseek-r1:32b

测试是否可用

curl http://127.0.0.1:11434/api/generate -d '{
  "model": "deepseek-r1:32b",
  "prompt":"杭州最高的楼",
  "stream": false
}'

通过 Open webui来使用ollama上的模型服务

open webui

同主机

docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main

不同主机

docker run -d -p 3001:8080 -e OLLAMA_BASE_URL=http://ollama服务器:11434 -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main

huggingface-部署配置

comfyui

官方文档

docker run -d \
--name comfyui-test \
--gpus all \
-p 8188:8188 \
-h comfyui-test  \
-v $(pwd)/comfyui-data:/workspace/data \
nvcr.io/nvidia/pytorch:25.01-py3  sleep 300d

docker exec -ti comfyui-test bash
# 这里设置代理(国内)

git clone https://github.com/comfyanonymous/ComfyUI /workspace/ComfyUI
git clone https://github.com/ltdrdata/ComfyUI-Manager /workspace/ComfyUI/custom_nodes/comfyui-manager
grep -v 'torchaudio\|torchvision' /workspace/ComfyUI/requirements.txt > /workspace/ComfyUI/temp_requirements.txt
python -m pip install --upgrade pip && pip install -r /workspace/ComfyUI/temp_requirements.txt
mv /workspace/ComfyUI/models /workspace/ComfyUI/models_link
ln -s /workspace/ComfyUI/models_link/configs /workspace/data/models/configs
ln -s /workspace/data/models /workspace/ComfyUI/models

python /workspace/ComfyUI/main.py --listen

comfyui-常用插件

辅助类

AIGODLIKE-ComfyUI-Translation


图像视频相关

视频基础

ffmpeg

官方文档

通过ffmpeg推流

使用 FFmpeg 将本地 MP4 文件推送到直播推流地址(RTMP 服务器)上,可以通过以下命令实现:

ffmpeg -re -i input.mp4 -c:v libx264 -preset veryfast -b:v 3000k -maxrate 3000k -bufsize 6000k -c:a aac -b:a 128k -f flv rtmp://your_server/live/stream_key  

参数解析:

  1. -re:以实时模式读取输入文件。这是推流时必需的,它会以文件的帧率进行读取,而不是尽可能快地处理。
  2. -i input.mp4:指定输入文件的路径,比如你的本地 MP4 文件。
  3. -c:v libx264:指定视频编码器为 libx264(H.264 编码)。
  4. -preset veryfast:编码速度和质量的平衡设置。veryfast 是常用的推流选项,编码速度较快,适合实时推流。
  5. -b:v 3000k:设置视频码率为 3000kbps。可以根据实际需要调整。
  6. -maxrate 3000k-bufsize 6000k:设置最大码率和缓冲区大小,确保推流的稳定性。
  7. -c:a aac:指定音频编码器为 AAC。
  8. -b:a 128k:设置音频码率为 128kbps。可以根据需要调整。
  9. -f flv:指定输出格式为 FLV。RTMP 推流使用 FLV 封装格式。
  10. rtmp://your_server/live/stream_key:这是你的 RTMP 推流地址,需要替换为实际的推流 URL 和密钥。

示例

假如你的 RTMP 推流地址为:rtmp://live.example.com/live,推流密钥为:stream123,本地 MP4 文件为 video.mp4,命令如下:

ffmpeg -re -i video.mp4 -c:v libx264 -preset veryfast -b:v 3000k -maxrate 3000k -bufsize 6000k -c:a aac -b:a 128k -f flv rtmp://live.example.com/live/stream123  

注意事项

  1. 确保你的 RTMP 推流服务器(如 Nginx + RTMP 模块、OBS 推流服务器等)已经配置好,并能正常工作。
  2. 如果 MP4 文件的编码格式已经符合推流需求(如 H.264 视频和 AAC 音频),可以通过 -c:v copy -c:a copy 直接复制流,以避免重新编码,提高效率:
    ffmpeg -re -i video.mp4 -c:v copy -c:a copy -f flv rtmp://live.example.com/live/stream123  
    
  3. 如果推流失败,检查网络连接、RTMP 地址是否正确,以及 FFmpeg 是否安装了相应的编码器。

常用的调试方法

  • 查看 FFmpeg 输出日志,检查是否有错误信息。
  • 使用工具(如 VLC 或 OBS)测试 RTMP 推流地址是否能正常播放。

AIGC-中国大陆法律法规

1. 生成内容必须添加标签

生成内容必须添加标识

shell操作

sudo apt install -y attr
setfattr -n user.AIGC.implicit_id -v "aigc_generated_20250516_xyz" test.jpeg
getfattr -d test.jpeg

golang操作 使用 "github.com/pkg/xattr"

阿里云