cp 命令用法
常用选项
| 选项 | 说明 | 示例 |
|---|---|---|
-R, -r, --recursive |
递归拷贝 | |
-p, --preserve |
拷贝时保留文件信息(default: mode,ownership,timestamps) |
常用命令
拷贝时包含隐藏文件一起
cp -rf dir1/* dir2/
使用此格式拷贝时,假如 dir1 下面包含隐藏文件,拷贝时隐藏文件不会被拷贝过去
$ tree -a |
如上所示的目录结构,执行命令 cp -rf dir1/* dir2/,观察目录结构:
$ tree -a |
看见,dir/.test 未被拷贝,如果拷贝时希望同时保护隐藏文件,可以使用 . 代替 *
$ tree -a |
Apollo 配置中心服务使用说明
环境信息
- Centos 7 kernel 5.4
- Apollo 2.0.1
- Mysql 5.7
- Java 1.8
安装部署
分布式部署
部署服务器信息说明
| 环境 | 服务器 | 服务 | 端口 |
|---|---|---|---|
pro |
172.31.88.1 | apollo-portal | 8070 |
pro |
172.31.88.1 | 数据库 ApolloPortalDB | 3306 |
pro |
172.31.88.1 | apollo-configservice | 8080 |
pro |
172.31.88.1 | apollo-adminservice | 8090 |
pro |
172.31.88.1 | 数据库ApolloConfigDB | 3306 |
pro |
172.31.82.2 | apollo-configservice | 8080 |
pro |
172.31.82.2 | apollo-adminservice | 8090 |
uat |
172.31.83.3 | apollo-configservice | 8080 |
uat |
172.31.83.3 | apollo-adminservice | 8090 |
uat |
172.31.83.3 | 数据库ApolloConfigDB | 3306 |
其中 172.31.88.1、172.31.82.2 为 pro 环境的高可用节点。172.31.83.3 为 uat 环境的单节点。
apollo-portal 和 ApolloPortalDB 部署在 pro 环境,uat 环境共用 apollo-portal 和 ApolloPortalDB。
安装 Mysql
环境信息
- Centos 7 kernel 5.4
- Mysql Server 5.7
Mysql Server 安装步骤
yum 方式安装
安装 MySQL 5.7 的 yum 源
yum localinstall -y http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm |
如果因为源冲突,类似如下错误
Processing Conflict: mysql80-community-release-el7-2.noarch conflicts mysql57-community-release |
可以卸载旧的 yum 源安装包,重新安装
$ rpm -qa | grep mysql |
检查 yum 源中的 mysql-community-server 信息
$ yum info mysql-community-server |
Docker 私有镜像仓库 Harbor 安装及使用
环境信息
- Centos 7
- docker-ce-19.03.15
- harbor v2.6.1
安装步骤
下载安装包
wget https://github.com/goharbor/harbor/releases/download/v2.6.1/harbor-offline-installer-v2.6.1.tgz |
准备证书
将申请好的证书上传到服务器,将 harbor.crt 转换为 harbor.cert
openssl x509 -inform PEM -in harbor.crt -out harbor.cert |
将转换好的证书和私钥拷贝到 Docker 的证书目录 /etc/docker/certs.d/yourdomain.com/
cp yourdomain.com.cert /etc/docker/certs.d/yourdomain.com/ |
重启 Docker
systemctl restart docker |
配置 Harbor 安装配置文件
执行 install.sh 命令安装 Harbor 时,会使用配置文件 harbor.yml(需要拷贝安装包中的 harbor.yml.tmpl 为 harbor.yml)。
修改配置中的 hostname 选项,配置访问 Harbor 的域名。此为必须修改的参数。
修改配置中的 https.certificate 和 https.private_key,配置证书(harbor.crt)和私钥的路径,使用 HTTPS 时必须配置。
修改配置中的 data_volume,指定持久化数据卷的路径。默认为 data_volume: /data
Jenkins + gitlab 自动构建
环境信息
- Jenkins jenkinsci/blueocean:2.346.3
- GitLab Community Edition 13.9.6
- Docker 19.03.15
本文档记录 GitLab 上面的代码更新时,使用 Jenkins 自动构建 Docker 镜像的过程。
配置过程
使用 docker 启动 Jenkins 容器
docker run -d -p 8080:8080 --name jenkins \ |
Jenkins 配置
以下分别记录使用 freestyle 和 Pipeline 类型的构建镜像的配置过程
创建 freestyle 类型的 Item 构建镜像
在 源码管理(Source Code Management) 中配置 git 地址,并配置认证
默认情况下,在构建时,Jenkins 会先从配置的 Git 地址拉取代码到 Jenkins 目录:
/var/jenkins_home/workspace/${PROJECT_NAME}
在 构建(Build) 中 Add build step ,选择构建类型为 Execute shell,此处构建的示例项目代码结构如下,其中 Dockerfile 路径为 k8s/server/Dockerfile
.: |
使用如下 shell 脚本
#!/bin/sh |

其中的
${Branch}来自 参数化的构建
Kubernetes 网络数据包抓包分析
环境信息
- Centos7
- Kubernetes 1.21
- flannel 0.20
为观察 Kubernetes 集群中跨主机 POD 之间的网络通信数据流,本文通过 tcpdump 抓包,对数据流向进行记录观察。
本示例中的 Kubernetes 集群由以下节点组成:
| 节点主机名 | 节点角色 | 节点 IP | 节点上测试 POD IP |
|---|---|---|---|
| master | master | eth0: 10.150.0.21 | 10.244.0.2 |
| worker1 | worker | eth0: 10.150.0.19 | 10.244.1.38 |
| worker2 | worker | eth0: 10.150.0.20 | 10.244.2.27 |
Flannel 简介
Kubernetes 系统上 POD 网络的实现依赖于第三方插件,Kubernetes 只负责提供了 CNI(容器网络接口),只要符合 CNI 规则的第三方插件都可以用于为 POD 提供网络实现。而 Flannel 是由 CoreOS 主推的目前比较主流的容器网络解决方案。
Flannel 支持三种不同后端实现,分别是:
- UDP
- VXLAN
- host-gw
UDP 是 Flannel 项目最早支持的一种方式,是性能最差的方式,目前已被废弃。
用的最多的是 VXLAN 和 host-gw 模式的部署。
tcpdump 抓包命令使用
tcpdump 命令格式说明

option- 可选选项(参数)proto- 协议类过滤器:根据协议进行过滤,可识别的关键词有:tcp,udp,icmp,ip,ip6,arp,rarp,ether,wlan,fddi,tr,decnetdirection- 数据流向类过滤器:根据数据流向进行过滤,可识别的关键字有:src,dst,同时你可以使用逻辑运算符进行组合,比如src or dsttype类过滤器:可识别的关键词有:host,net,port,portrange,这些词后边需要再接参数。
常用选项
| 选项 | 说明 | 示例 |
|---|---|---|
-i |
目标网卡 | |
-n -nn |
不对 IP/DOMAIN 进行解析 不对 IP/DOMAIN 及 PORT 进行解析 |
|
-w |
将结果写入文件 | tcpdump icmp -w icmp.pcap |
SSL 证书格式说明
常见的 SSL 证书格式主要有:
.DER.CER- 文件是二进制格式,只保存证书,不保存私钥。.PEM- 一般是文本格式,可保存证书,可保存私钥。.CRT- 可以是二进制格式,可以是文本格式,一般均为文本格式,与.DER格式相同,不保存私钥。.PFX.P12- 二进制格式,同时包含证书和私钥,一般有密码保护。.JK- 二进制格式,同时包含证书和私钥,一般有密码保护。
证书格式说明
DER 和 CER
该格式是二进制文件内容,Java 和 Windows 服务器偏向于使用这种编码格式。只含有证书信息,不包含私钥
OpenSSL 查看
openssl x509 -in certificate.der -inform der -text -noout |
转换为 PEM:
openssl x509 -in cert.crt -inform der -outform pem -out cert.pem |
PEM
Privacy Enhanced Mail,一般为文本格式,以 -----BEGIN... 开头,以 -----END... 结尾。中间的内容是 BASE64 编码。这种格式可以保存证书和私钥,有时我们也把 PEM 格式的私钥的后缀改为 .key 以区别证书与私钥。
这种格式常用于 Apache 和 Nginx 服务器。
OpenSSL 查看:
openssl x509 -in certificate.pem -text -noout |
转换为 DER:
openssl x509 -in cert.crt -outform der -out cert.der |
CRT
Certificate 的简称,有可能是 PEM 编码格式,也有可能是 DER 编码格式。如何查看请参考前两种格式。
PFX
Predecessor of PKCS#12,这种格式是二进制格式,且证书和私钥存在一个 PFX 文件中。一般用于 Windows 上的 IIS 服务器。该格式的文件一般会有一个密码用于保证私钥的安全。
OpenSSL 查看:
openssl pkcs12 -in for-iis.pfx |
转换为 PEM:
openssl pkcs12 -in for-iis.pfx -out for-iis.pem -nodes |
JKS
Java Key Storage,很容易知道这是 JAVA 的专属格式,利用 JAVA 的一个叫 keytool 的工具可以进行格式转换。一般用于 Tomcat 服务器。
可以到这里进行 格式转换
Alpine linux apk 命令使用
更新索引
$ apk update |
从远程镜像源中更新本地镜像源索引,update 命令会从各个镜像源列表下载 APKINDEX.tar.gz 并存储到本地缓存,一般在 /var/cache/apk/ (Alpine 在该目录下)
Docker 部署 OpenLDAP + phpLDAPadmin 教程
环境信息
- Centos7 3.10.0-1160.76.1
- Docker Engine - Community 19.03.15
安装步骤
创建自定义网络
为了使容器互联,新版本建议将容器加入自定义的 Docker 网络 来连接多个容器,而不是使用 --link 参数。
从 Docker 1.10 版本开始,docker daemon 实现了一个内嵌的 DNS server,使容器可以直接通过容器名称通信。方法很简单,只要在创建容器时使用 --name 为容器命名即可。但是使用 Docker DNS 有个限制:只能在 user-defined 网络中使用。也就是说,默认的 bridge 网络是无法使用 DNS 的,所以我们就需要自定义网络。
docker network create -d bridge docker-network-for-openldap |
之后为 LDAP 创建的相关容器,都连接到此网络。
启动 openldap 容器
为 openldap 容器创建本地持久化数据目录,容器启动时将此目录以数据卷的形式挂载使用
mkdir /data/OpenLDAPData |
启动容器,挂载数据卷,使用自定义网络
docker run -d -p 389:389 -p 636:636 \ |
docker compose 配置 django mysql 站点
本文主要记录使用 docker compose 配置 Django + Mysql 的 web 站点的过程。
环境信息
- Centos7
- Docker version 20.10.17
目录结构及说明
项目目录结构及简要说明如下:
. |
compose: 存放应用配置文件,如 mysql 配置文件compose/mysql/my.cnfdjango_project: Django project 项目目录,django-admin startproject django_project生成django_project/django_app: Django project 项目下的 app 目录,django-admin startapp django_app生成docker-compose.yml: 项目的 compose 文件
django 接收 post 请求中的 json 数据
环境信息
- Python3.10
- Django 4.0
接收 post 中的 json 数据
示例通过 curl 命令模拟 post 请求,命令如下:
curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST \ |
Django 处理程序示例:
from django.http import HttpResponse |
Console 输出结果:
****** POST body: b'{"id" : "yTP7PSsRxz53tJ56VVG", "type" : 5}', type : <class 'bytes'> |
以上输出可以看到,request.body 中的类型为 bytes
使用 eval 转换后类型变为 dict
使用 json.loads 将 request.body 转换为 dict 时,可能会报以下错误:
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1) |
可能原因 参考
rsyncd 服务
命令格式
rsync [OPTION]... SRC DEST |
: ssh 方式进行备份,ssh 非默认端口使用选项 -e 指定端口, -e 'ssh -p 30000'
:: socket 方式进行备份,rsync 以服务方式监听,SRC/DEST 为配置中定义的模块 []
rsync命令使用中,如果源参数的末尾有斜线,只会复制指定目录的内容,而不复制目录本身,没有斜线,则会复制目录本身,包括目录- 客户端免密登录时,需要在客户端建立密码文件:
/etc/rsync.passwd,文件中只保存密码,权限为600,用选项--password-file指明存放密码的文件位置
docker compose 命令
对于 Compose 来说,大部分命令的对象既可以是项目本身,也可以指定为项目中的服务或者容器。如果没有特别的说明,命令对象将是项目,这意味着项目中所有的服务都会受到命令影响。
执行 docker compose [COMMAND] --help 可以查看具体某个命令的使用格式。
docker compose 命令的基本的使用格式是
docker compose [-f=<arg>...] [options] [COMMAND] [ARGS...] |
常用选项
-f, --file FILE指定使用的 Compose 模板文件,默认为docker-compose.yml,可以多次指定。-p, --project-name NAME指定项目名称,默认将使用所在目录名称作为项目名。
linux fail2ban 详解
环境信息
- Centos 7
- iptables
Fail2ban 是 Linux 上的一个著名的入侵保护的开源框架。它通过监视相应服务的日志记录文件,匹配日志记录中的错误信息(正则式匹配),然后与系统的 iptables 联动执行相应的屏蔽动作(一般情况下是调用防火墙屏蔽),比如:当有人在试探你的 HTTP、SSH、SMTP、FTP 密码,只要达到你预设的次数,Fail2ban 就会调用防火墙屏蔽这个 IP,并且可以发送 e-mail 通知系统管理员。
由于 Fail2ban 需要与系统的 iptables、firewalld 等联动来达到封禁 IP 的目的, iptables 使用与 firewalld 有少许不同。
本文以 iptables 为例
安装
yum install epel-release |
