群晖的 docker 相关操作

说明:
我的测试都是在 DSM 7.2 上进行的,其余的版本可能有些区别

启动

群晖的 docker 启动不能简单的使用 systemctl start docker
目前我知道的命令下面这两个。

/usr/syno/bin/synosystemctl stop pkg-ContainerManager-dockerd

systemctl start pkg-ContainerManager-dockerd.service

我的理解是 synosystemctl 调用了 sytemctl。我使用 sytemctl 启动过一次 docker,但是启动后在套件中心的 ContainerManger 还是停止状态。所以后面我停止了又在套件中心启动的。没有验证是否套件中心启动就等于 synosystemctl 启动,但是可能是差不多的。所以操作 docker 还是建议使用 synosystemctl

阅读全文 →

申请 Let’s Encrypt 证书

申请 Let’s Encrypt 证书

这里使用 acme.sh 来配置证书

安装 acme.sh

curl https://get.acme.sh | sh

# 中国 https://github.com/acmesh-official/acme.sh/wiki/Install-in-China

安装在 ~/.acme.sh/ 目录下

切换 CA 服务器

acme.sh --set-default-ca --server letsencrypt

获取 dns api

生成证书需要验证域名的所有权,一般有 http 和 dns 两种验证方式,http 验证就是在网站根目录下放置文件,dns 则是添加 dns 记录来验证。
目前泛域名证书仅支持 dns 方式验证。
比如我使用的是 dnspod 来解析域名的,则去 dndpod 申请一套 api token,其他解析运营商也都类似。这样会得到一个 id 和 key。
然后设置为系统环境变量

阅读全文 →

grafana webhook 配置

grafana 本来的 webhook 结构是这样的

{
  "receiver": "My Super Webhook",
  "status": "firing",
  "orgId": 1,
  "alerts": [
    {
      "status": "firing",
      "labels": {
        "alertname": "High memory usage",
        "team": "blue",
        "zone": "us-1"
      },
      "annotations": {
        "description": "The system has high memory usage",
        "runbook_url": "https://myrunbook.com/runbook/1234",
        "summary": "This alert was triggered for zone us-1"
      },
      "startsAt": "2021-10-12T09:51:03.157076+02:00",
      "endsAt": "0001-01-01T00:00:00Z",
      "generatorURL": "https://play.grafana.org/alerting/1afz29v7z/edit",
      "fingerprint": "c6eadffa33fcdf37",
      "silenceURL": "https://play.grafana.org/alerting/silence/new?alertmanager=grafana&matchers=alertname%3DT2%2Cteam%3Dblue%2Czone%3Dus-1",
      "dashboardURL": "",
      "panelURL": "",
      "values": {
        "B": 44.23943737541908,
        "C": 1
      }
    },
    {
      "status": "firing",
      "labels": {
        "alertname": "High CPU usage",
        "team": "blue",
        "zone": "eu-1"
      },
      "annotations": {
        "description": "The system has high CPU usage",
        "runbook_url": "https://myrunbook.com/runbook/1234",
        "summary": "This alert was triggered for zone eu-1"
      },
      "startsAt": "2021-10-12T09:56:03.157076+02:00",
      "endsAt": "0001-01-01T00:00:00Z",
      "generatorURL": "https://play.grafana.org/alerting/d1rdpdv7k/edit",
      "fingerprint": "bc97ff14869b13e3",
      "silenceURL": "https://play.grafana.org/alerting/silence/new?alertmanager=grafana&matchers=alertname%3DT1%2Cteam%3Dblue%2Czone%3Deu-1",
      "dashboardURL": "",
      "panelURL": "",
      "values": {
        "B": 44.23943737541908,
        "C": 1
      }
    }
  ],
  "groupLabels": {},
  "commonLabels": {
    "team": "blue"
  },
  "commonAnnotations": {},
  "externalURL": "https://play.grafana.org/",
  "version": "1",
  "groupKey": "{}:{}",
  "truncatedAlerts": 0,
  "title": "[FIRING:2]  (blue)",
  "state": "alerting",
  "message": "**Firing**\n\nLabels:\n - alertname = T2\n - team = blue\n - zone = us-1\nAnnotations:\n - description = This is the alert rule checking the second system\n - runbook_url = https://myrunbook.com\n - summary = This is my summary\nSource: https://play.grafana.org/alerting/1afz29v7z/edit\nSilence: https://play.grafana.org/alerting/silence/new?alertmanager=grafana&matchers=alertname%3DT2%2Cteam%3Dblue%2Czone%3Dus-1\n\nLabels:\n - alertname = T1\n - team = blue\n - zone = eu-1\nAnnotations:\nSource: https://play.grafana.org/alerting/d1rdpdv7k/edit\nSilence: https://play.grafana.org/alerting/silence/new?alertmanager=grafana&matchers=alertname%3DT1%2Cteam%3Dblue%2Czone%3Deu-1\n"
}

不过有的时候 webhook 的地址也是有固定的结构的,直接发送这样的内容可能收不到,所以需要修改这份 post 请求体。

阅读全文 →

MySQL 的前缀索引和索引选择性

MySQL 的前缀索引和索引选择性

有时候需要索引很长的字符列,这会让索引变的大且慢。通常选择索引列开始的部分字符,这样大大减少了索引空间,但这样又会导致索引选择性降低,影响查询效率,所以需要一个权衡。

阅读全文 →

Vm 使用技巧

打开最近的文件

:ol
# ol 指 old files

之后每个文件对应一个数字
然后使用 :e <数字> 打开这个文件

清除搜索的高亮

:nohl

替换换行

%s/foo/bar

foo 中换行符根据操作系统来确定,win: \r\n, mac: \r, linux: \n
bar 中换行符用 \r

阅读全文 →

SSH 配置

免密码登录

同时需要在多台 Linux 服务器上操作时,大量的 IP 和用户名密码经常记不住。
将本地的公钥文件拷贝到目标服务器的 ~/.ssh/authorized_keys 文件,文件不存在则新建一个。
或者使用 ssh-copy-id -i .ssh/id_rsa.pub root@x.x.x.x

阅读全文 →

命令 xargs

1 -d 分隔符

默认情况想 xargs 将其标准输入中的内容以空白(包括空格,Tab,回车等)分割成多个字符串。

-d 用来指定分隔符

$ echo '11@22@33' | xargs echo
11@22@33

$ echo '11@22@33' | xargs -d '@' echo
11 22 33

2 -p 输出命令

使用该选项之后xargs并不会马上执行其后面的命令,而是输出即将要执行的完整的命令(包括命令以及传递给命令的命令行参数),询问是否执行,输入 y 才继续执行,否则不执行。

阅读全文 →

命令 awk

命令 awk

awk 命令结构

awk -F "," '/^a/ {print $3}' f

-F 部分是参数

’ 内前面是范围,后面是操作

awk 语言的数组下标是从 1 开始的,0 表示整个原始字符串。

详细命令

比如 netstat 命令打印的网络状况如下:

阅读全文 →

dig 使用

dig 使用

dig 是 Domain information Groper 的缩写,是一个 DNS 查询工具,用于 DNS 的故障诊断。

常用用法

命令介绍

dig @server name type

server 是待查询服务器的名称或者 ip 地址,一般指定为 DNS 服务器
name 是将要查询的名称
type 显示所需要查询的类型,ANY,A,TXT,MX,SIG 等,不提供任何参数默认是对 A 记录的查询。

阅读全文 →