简介
运维常用操作记录
已添加内容
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-timesyncd
或 ntp
服务来同步时间。
使用 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:输出版本信息并退出。
显示单位说明:
显示值的单位取决于以下来源的第一个可用单位:
- --block-size 参数。
- 环境变量 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
参数说明
使用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
一. 配置存储库
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数据库中每个表的大小
- 查看单个数据库中所有的表大小
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;
- 查看所有数据库中所有表的大小
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;
- 计算单个表的大小
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'; -- 替换为表名
- 查看每个库的大小
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;
关键字段解释:
- DATA_LENGTH:表数据占用的字节数。
- INDEX_LENGTH:索引占用的字节数。
- TABLE_ROWS:表中的估计行数(对于 InnoDB 引擎,此值为近似值)。
- CREATE_TIME 和 UPDATE_TIME:表的创建和最后更新时间。
注意事项
- 需要有 information_schema 表的查询权限(通常普通用户即可)。
- 结果可能存在微小误差,尤其是对 InnoDB 表(行数为估算值)。
- 对于大数据库,查询可能需要一些时间,可通过 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]
定义:
-
Global Settings(全局设置)
- 指定默认选项,比如默认的 CA 配置。
-
CA Configuration(证书颁发机构配置)
- 定义生成和管理证书的目录、文件名、策略等。
-
Extension Configuration(扩展配置)
- 定义证书的扩展字段,例如 Key Usage、Extended Key Usage、Subject Alternative Name 等。
-
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-基础知识
模型相关
模型部署相关
常用连接
ollama-基础
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上的模型服务
同主机
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
参数解析:
-re
:以实时模式读取输入文件。这是推流时必需的,它会以文件的帧率进行读取,而不是尽可能快地处理。-i input.mp4
:指定输入文件的路径,比如你的本地 MP4 文件。-c:v libx264
:指定视频编码器为libx264
(H.264 编码)。-preset veryfast
:编码速度和质量的平衡设置。veryfast
是常用的推流选项,编码速度较快,适合实时推流。-b:v 3000k
:设置视频码率为 3000kbps。可以根据实际需要调整。-maxrate 3000k
和-bufsize 6000k
:设置最大码率和缓冲区大小,确保推流的稳定性。-c:a aac
:指定音频编码器为 AAC。-b:a 128k
:设置音频码率为 128kbps。可以根据需要调整。-f flv
:指定输出格式为 FLV。RTMP 推流使用 FLV 封装格式。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
注意事项
- 确保你的 RTMP 推流服务器(如 Nginx + RTMP 模块、OBS 推流服务器等)已经配置好,并能正常工作。
- 如果 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
- 如果推流失败,检查网络连接、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"