Dockerfile 简介
Dockerfile 是一个文本文件,其内包含了一条条的 指令(Instruction)
,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
Dockerfile 是一个文本文件,其内包含了一条条的 指令(Instruction)
,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
yum install -y nc |
Windows 下需要 下载 netcat 运行程序
下载后直接解压,将 nc.exe
复制到 C:\Windows\System32
目录或将 nc.exe
添加到系统 path 环境变量中
选项 | 说明 | 示例 |
---|---|---|
-v -vvv |
打印详细信息 | |
-t |
使用 TCP 协议,默认为 TCP 协议 | |
-u |
使用 UDP 协议,默认为 TCP 协议 | |
-z |
不发送数据,效果为立即关闭连接,快速得出测试结果 |
注意事项:客户端测试使用
localhost
作为主机名时,会优先被解析为 IPv6 地址,如果端口监听在 IPv4 地址,会导致测试结果不可达
以下输出表示端口可达
# nc -vuz ip/domain 8472 |
以下输出表示端口不可达
# nc -vuz 127.0.0.1 8473 |
prometheus
kubectl create namespace prometheus |
Prometheus 使用 Kubernetes API 从 Nodes、Pods、Deployments 等等中读取所有可用的指标。因此,我们需要创建一个包含读取所需 API 组的 RBAC 策略,并将该策略绑定到新建的 prometheus
命名空间。[1]
prometheusClusterRole.yaml
的文件,并复制以下 RBAC 角色。在下面给出的角色中,可以看到,我们已经往
nodes
,services endpoints
,pods
和ingresses
中添加了get
,list
以及watch
权限。角色绑定被绑定到监控命名空间。如果有任何要从其他对象中检索指标的用例,则需要将其添加到此集群角色中。
apiVersion: rbac.authorization.k8s.io/v1 |
kubectl apply -f prometheusClusterRole.yaml |
要将 Python 脚本打包为 Windows 可运行程序,一种常用的方法是使用 PyInstaller。
pip install pyinstaller |
在命令行中,导航到脚本所在的文件夹并运行以下命令
pyinstaller --onefile test_file.py |
这会生成一个 dist
目录,里面包含一个名为 test_file.exe
的可执行文件。参数 --onefile
确保所有必要的文件都被包含在单一的可执行文件中。
以上方法打包后的文件点击运行后,桌面会弹窗一个 cmd 窗口,如果关闭了此 cmd 窗口,与其关联的程序也会被关闭。为了阻止这个命令行窗口的出现,并让程序在关闭窗口后仍然运行,你需要在使用 PyInstaller 打包时使用 --noconsole
选项。此外,为了使程序在没有任何可视窗口的情况下静默运行(例如,仅在系统托盘中),你还需要使用 --windowed
选项。
pyinstaller --onefile --noconsole --windowed test_file.py |
如果你想要程序在系统托盘中静默运行,并通过系统托盘图标进行交互,那么你需要使用其他库,如
pystray
,来创建系统托盘应用。
添加最新版本,生产环境建议使用稳定版本
helm repo add rancher-latest https://releases.rancher.com/server-charts/latest |
你需要定义一个 Kubernetes 命名空间,用于安装由 Chart 创建的资源。这个命名空间的名称为 cattle-system
:
kubectl create namespace cattle-system |
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.7.1/cert-manager.crds.yaml |
安装完 cert-manager
后,你可以通过检查 cert-manager
命名空间中正在运行的 Pod
来验证它是否已正确部署:
$ kubectl get pods -n cert-manager |
helm install rancher rancher-stable/rancher --namespace cattle-system \ |
安装成功后,输出结果如下
NAME: rancher |
根据提示,浏览器中访问 https://rancher.my.com/dashboard/?setup=admin
,正常情况下,显示如下页面
根据页面提示,保持密码,登陆。
blackbox_exporter
是一个由 Prometheus 社区维护的项目,它允许用户通过 HTTP、HTTPS、DNS、TCP 和 ICMP 协议对服务进行“黑盒”方式的探测,以检测和监控网络协议的可用性和响应时间。
本文档以在 Kubernetes 中部署 blackbox_exporter
为例,演示其使用方法。
为了能够监控到 Kubernetes 集群内部的部分信息(如 api-server
的证书等),建议 参考文档为其配置 RBAC 策略 以使其能读取 kube-apiserver
相关资源,本文档中的配置示例基于此权限配置。Namespace 为 prometheus
blackbox_export
基于配置文件运行,将其配置文件通过 Kubernetes 的 ConfiMap 存储,分离运行环境和配置,方便管理。
参考以下配置,创建 ConfigMap
apiVersion: v1 |
参考以下内容,创建 Deployment 和 Service,在此配置中,使用上面创建的 ConfigMap 作为 blackbox_export
的配置文件
apiVersion: apps/v1 |
部署成功后,从 prometheus
的 Namespace 中测试访问 blackbox_export
的 Endpoint blackbox-service:9115
,如果是在其他 Namespace,可以使用 Endpoint blackbox-service.prometheus.svc.cluster.local:9115
。如果集群的域名不是 cluster.local
,修改为实际值。
|
在 Prometheus 配置中添加以下内容,使 Prometheus 抓取 black_exporter
的监控数据
- job_name: 'blackbox_http_2xx' |
部署完成后,观察过 Prometheus 的 Target,正常情况下可以看到监控目标的状态。
在 SUSE Linux(无论是 openSUSE 还是 SUSE Linux Enterprise Server)中,可以使用 zypper
命令行工具来管理和安装软件包。
在安装任何新的软件包之前,建议首先更新你的软件包数据库,以确保你拥有最新的软件包信息。
sudo zypper refresh |
如果你不确定软件包的确切名称,可以使用 zypper search 来查找它
zypper search <package-name> |
sudo zypper install <package-name> |
要查看关于特定软件包的详细信息,包括描述、版本和依赖关系等,可以使用
zypper info <package-name> |
sudo zypper remove <package-name> |
要升级所有已安装的软件包到其最新版本,可以使用以下命令
sudo zypper update |
以下示例安装常用工具包
net-tools
,提供 netstat
命令iproute2
提供 ip
、ss
等命令iputils
提供 ping
命令sudo zypper refresh |
通过华为云提供的 Python SDK 获取云服务器实例信息 [1]
>>> from huaweicloudsdkcore.auth.credentials import BasicCredentials |
response
返回一个 huaweicloudsdkecs.v2.model.list_servers_details_response.ListServersDetailsResponse
对象,其中包含了服务器数量和服务器详情列表,要转换为 Python 字典对象,可以通过以下方法
>>> import json |
根据云服务器 id,查询云服务器挂载的磁盘信息 [2]
>>> request = ListServerBlockDevicesRequest(server_id='a7dd4502-cb3e-4754-b7b7-73bcb5696a1c') |
Akamai CDN API 说明文档,调用 API 之前需要先根据官方文档说明 Create API Client
根据官方文档说明安装 edgegrid-python
,并配置 Create API Client Key
信息 [1]。
pip install edgegrid-python |
大多数 API 使用都需要提供 groupId
,accountId
,contractIds
,通过以下接口获取这些信息 [2]
>>> import requests |
如果
Property
中存在分组,每个分组都有一个独立的groupId
查看最后一次(上次)系统启动的时间
# who -b |
查看最后一次(上次)系统启动的时间,及运行级别
# who -r |
通过查看 reboot
用户的登陆记录,可以知道系统的启动时间
# last reboot |
文件太大,需要分割时,可以使用以下命令
split -b 100M -d test.file |
选项 | 说明 | 示例 |
---|---|---|
-b, --bytes=SIZE |
按照指定大小分割文件 | |
-d, --numeric-suffixes |
指定分割后的文件后缀为数字 | |
-a, --suffix-length=N |
分割后的文件后缀的长度 |
$ split -b 100M -d test.file |
wget https://nodejs.org/dist/latest/node-v15.12.0-linux-x64.tar.gz |
安装pm2
npm install pm2 -g |
npm install pm2 |
安装指定版本的包
npm install -g [email protected] |
以 hexo
安装包为例,以下命令查看 hexo
安装包有哪些可选版本
# npm show hexo versions |
以下命令可显示安装的包及它们的版本
npm ls |
如果要查看全局类型的包,使用 -g
选项
npm ls -g |
npm uninstall package_name |
卸载全局安装的包
npm uninstall package_name -g |
WARN EACCES user “root” does not have permission to access the dev dir “/root/.node-gyp/11.15.0”
ERR! stack Error: EACCES: permission denied, mkdir ‘node_modules/sqlite3/.node-gyp’
[解决方法]:
npm install --unsafe-perm |
Centos7
Python3
wcs-python3-sdk (5.0.35)
网宿云 python sdk 安装命令 pip3 install wcs-python3-sdk
, 安装后包含 cli 工具 wcscmd
wcscmd --configure [--config=FILE] |
--config=FILE
配置文件存储路径,默认~/.wcscfg
[1]
wcscmd listbucket |
以下命令列出所有文件列表,并写入文件中
wcscmd listall wcs://BUCKET ./temp/f |
from wcs.commons.config import Config |
将源站的内容主动预取到 CDN 节点,用户首次访问可直接命中缓存,即提升首次访问速度,又能有效缓解源站压力。
ansible playbook 使用的是 YAML 格式的语法。
--- |
playbook 由一个或多个 play
组成。它的内容是一个以 play
为元素的列表。以上示例仅包含一个 play
在需要免密码登陆的场景下,可以配置 ssh 密钥登陆。配置步骤如下
$ ssh-keygen |
/home/testuser/.ssh/id_rsa.pub
和 /home/testuser/.ssh/id_rsa
中。/home/testuser/.ssh/authorized_keys
。或者手动拷贝公钥追加到目标主机的 .ssh/authorized_keys
$ ssh-copy-id -p 30000 [email protected] |
如果要配置双向免密,将以上步骤反过来操作一遍即可
登录服务器,经常遇见以下提示信息,说明有主机一直在尝试暴力破解用户名密码
There were 696 failed login attempts since the last successful login. |
查看登录失败的用户名和 ip 地址
$ grep "Failed password for invalid user " /var/log/secure | awk '{print $11,$13}' | sort | uniq -c | sort -k1 -n |
开始使用 Django 时,需要初始化配置,执行以下命令生成初始化的工程环境 [1]
django-admin startproject mysite |
创建 Project 成功后,会生成以 Project 命名的根目录(此处为 mysite
),根目录只是你项目的容器, 根目录名称对 Django 没有影响,你可以将它重命名为任何你喜欢的名称。以下为目录结构 [1]
mysite/ |
其中:
mysite/mysite/settings.py
为项目配置文件,包括配置 app,数据库等。创建 App
python manage.py startapp myapp |
创建 app 后,会在项目根目录下生成 app 命名的目录。创建 app 后,需要将 app 添加到项目配置文件 settings.py
中的 INSTALLED_APPS
settings.py
常用配置说明ALLOWED_HOSTS = ['*'] |
访问控制,默认只允许从本地访问 Django Server,如果需要远程访问,需要配置远程主机地址,*
可以配置允许任一客户端访问。
要为项目配置使用 Mysql 数据库,可以使用以下配置。
DATABASES = { |
LANGUAGE_CODE = 'zh-hans' |
TIME_ZONE = 'Asia/Shanghai' |
如果需要限制只有登陆的用户才能访问 url。可以在视图函数中使用 login_required
装饰器
from django.shortcuts import render |
使用了 login_required
装饰器后,未登录的用户会跳转到登陆页面,要配置登陆页面使用 Django Admin 的登陆 url,需要在 settings.py
中添加以下配置
LOGIN_URL = 'admin:login' |
要配置登陆用户在指定时间内未操作(发送 url 请求)后自动注销,使用以下配置
# 设置会话的过期时间为10分钟(以秒为单位) |
python manage.py makemigrations |
urls.py
文件中配置以下内容 from django.contrib import admin |
/
时,重定向到管理后台,可以在项目的 views.py
文件中添加以下内容,将 /
重定向到 /admin/
from django.shortcuts import redirect |
scores = {'语文': 89} |
clear()
用于清空字典中所有的 key-value 对,对一个字典执行 clear() 方法之后,该字典就会变成一个空字典
update()
方法可使用一个字典所包含的 key-value 对来更新己有的字典。在执行 update()
方法时,如果被更新的字典中己包含对应的 key-value 对,那么原 value 会被覆盖;如果被更新的字典中不包含对应的 key-value 对,则该 key-value 对被添加进去;原来的 dict
中存在(更新中不存在)的 key-value 保持不变。
update()
方法也可以用于合并字典,如果 key 重复,会使用新字典中的值替换原来的字典中的值。更新操作不返回任何值,返回结果为 None
dict1 = {'a': 1, 'b': 2} |
要将多个字典的键值合并到一个新的字典中,可以使用字典的解包方式。如果字典中有重复的 key,最终的值为最后的字典中的值
query = {'name': 'd'} |
在 Cloudflare 中,配置的规则 (比如 自动 HTPTPS 重写
功能) 对所有使用了 Cloudflare 加速的域名都生效。
此时假如有 2 个二级域名 d1.abc.com
和 d2.abc.com
,都启用了 Cloudflare 加速功能,此时开启 自动 HTPTPS 重写
功能,则使用 HTTP 协议访问,都会被重定向到 HTTPS。假如域名 d2.abc.com
不想进行 HTTPS 重定向,即使用 HTTP 访问 d2.abc.com
不重定向到 https://d2.abc.com
。要实现此功能,参考以下步骤
SSL/TLS
–> 边缘证书
中 开启 自动 HTPTPS 重写
功能,关闭 始终使用 HTTPS
功能自动 HTPTPS 重写
中配置规则,参考下图,定义规则名称,选择 自定义筛选表达式
,在表达式中配置筛选条件匹配 d2.abc.com
,在下面的设置中 关闭 自动 HTPTPS 重写
功能通过以上配置即可实现,同一个域名的不同子域名有不同的重定向规则。其他类似需求也可参考此思路配置
request.method
: 返回当前请求的 HTTP 方法(GET、POST、PUT、DELETE 等)。
request.path
: 返回请求的路径部分(不包括域名和查询参数)。
request.GET
: 包含所有 GET 请求参数的字典。
request.GET.get('param_name')
: 用于从 GET 请求中获取指定参数的值。
request.POST
: 包含所有 POST 请求参数的字典。
request.POST.get('param_name')
: 用于从 POST 请求中获取指定参数的值。
request.FILES
: 包含所有上传文件的字典。
request.COOKIES
: 包含所有请求的 Cookie 的字典。
request.session
: 一个表示当前会话的对象,可以用于访问和存储会话数据。
request.user
: 表示当前登录用户的对象。
request.body
: 访问请求的主体内容(即请求的正文部分)。主体内容通常用于传输 POST 或 PUT 请求中的数据,如表单数据、JSON 数据等。
request.META
: 包含有关请求的所有元数据的字典,如请求的 IP 地址、浏览器信息等。
request.is_secure()
: 返回一个布尔值,表示请求是否通过 HTTPS。
request.is_ajax()
: 返回一个布尔值,表示请求是否为 AJAX 请求。
request.get_full_path()
: 返回包含完整路径和查询参数的字符串。
request.build_absolute_uri()
: 根据当前请求构建完整的绝对 URL。
request.get_host()
: 返回请求的主机部分。
request.get_port()
: 返回请求的端口号。
request.get_raw_uri()
: 返回原始的请求 URI。
request.get_signed_cookie()
: 用于获取已签名的 Cookie 值。
request.get_host()
: 返回请求的主机部分。
编辑 docker daemon 配置文件 /etc/docker/daemon.json
(若不存在则新建),添加以下内容,用来配置 docker containers 的日志轮转
{ |
重启 docker 服务生效
systemctl restart docker |
根据以上配置,当容器日志大小达到 100m
,即对其进行 rotate,并保留最多 3 个日志文件。
Linux 系统中有专门用来做日志 rotate 的 服务 logrotate
,可直接使用此服务做 log rotate
配置针对 docker 的 logrotate
配置
/var/lib/docker/containers/*/*.log { |
使用 copytruncate
的方式做日志 totate 时,会先拷贝日志文件为 totate 日志文件,然后 truncate
日志,确保 totate 过程中,日志文件不变并一直保持打开状态。