楔子
《列子·汤问》里有个叫偃师的工匠,给周穆王献过一个"倡者"——一个会唱歌跳舞的人偶。
表演快结束的时候,这个人偶朝穆王的姬妾抛了个媚眼。穆王大怒,要当场杀了偃师。偃师没辩解,只是把人偶拆开给他看:里面全是皮革、木头、胶漆和颜料,五脏六腑一应俱全,但都是假的。拆掉心脏,它就不能说话;拆掉肝脏,它就不能看东西;拆掉肾脏,它就不能走路。
《列子·汤问》里有个叫偃师的工匠,给周穆王献过一个"倡者"——一个会唱歌跳舞的人偶。
表演快结束的时候,这个人偶朝穆王的姬妾抛了个媚眼。穆王大怒,要当场杀了偃师。偃师没辩解,只是把人偶拆开给他看:里面全是皮革、木头、胶漆和颜料,五脏六腑一应俱全,但都是假的。拆掉心脏,它就不能说话;拆掉肝脏,它就不能看东西;拆掉肾脏,它就不能走路。
Kubenetes版本: v1.22.3
cert-manager版本: v1.8.1
注意事项: Kubenetes版本必须大于等于v1.19.0
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.8.1/cert-manager.yaml
检查是否安装成功:
没得前言,就一个简单记录
在master机器上添加文件/var/lib/rancher/k3s/server/manifests/traefik-config.yaml,内容如下:
没得前言,就一个简单记录
次该nginx配置文件,格式如下:
http {
resolver X.X.X.X valid=5s;
server {
server_name www.example.com;
set $dn "foo.dnsalias.net";
location / {
proxy_pass http://$dn;
...
}
}
}
Redis因配置不当可以未授权访问。攻击者无需认证访问到内部数据,可导致敏感信息泄露,也可以恶意执行flushall来清空所有数据。
攻击者可通过EVAL执行lua代码,或通过数据备份功能往磁盘写入后门文件。
如果Redis以root身份运行,可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器。
利用Redis未授权访问漏洞获取root权限
Docker一键搭建MQTT服务器(EMQ X)1883:MQTT 协议端口
8883:MQTT/SSL 端口
8083:MQTT/WebSocket 端口
8080:HTTP API 端口
18083:Dashboard 管理控制台端口
启动命令:
docker run -itd --restart=always --name mqtt-server -p 18083:18083 -p 1883:1883 -p 8084:8084 -p 8883:8883 -p 8083:8083 emqx/emqx
策略模式定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。
主要是为了解决在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。
假设我们现在有一群鸭子,有橡皮鸭和丑小鸭,橡皮鸭不能飞不能叫,丑小鸭能飞能叫,它们都可以游泳。
我们可以先把飞行和叫这两个行为抽象出两个接口,然后再去实现这两个接口。
hugo new site生成的文件全部推到仓库里kind: pipeline
name: default
steps:
- name: 生成静态资源
image: hypervtechnics/drone-hugo
settings:
# 指定hugo版本
hugo_version: 0.70.0
# 是否校验配置文件是否合法
validate: true
# 指定配置文件
config: config.yaml
# 指定文章目录
content: content
# 指定生成的静态资源路径
output: ./hugo
- name: 推送到服务器
image: appleboy/drone-scp
settings:
# 服务器IP
host: 10.0.0.1
# 需要替换的服务器的路径,我的是服务器的`/data/hugo`目录,由于打包的文件的路径就是`hugo`,所以这儿只需要写`/data`即可
target: /data
# 本地生成的静态资源的路径
source: hugo/*
# 服务器账号
username: root
# 服务器登录密码
password: password
# 服务器端口
port: 22
when:
# 当仓库的 master 分支收到 push 事件,并且前一步构建成功的时候触发当前步骤
event: push
branch: master
status: success
- name: 发送电报通知消息
image: appleboy/drone-telegram
settings:
token: 机器人Token
to: 收信人用户ID
message: >
{{#success build.status}}
博客更新成功
{{else}}
博客更新失败
{{/success}}
更新记录:{{commit.author}} - {{commit.message}}
在Drone管理界面点开仓库,然后点一下ACTIVATE REPOSITORY按钮即可
在服务器上部署 Docker 容器有一种在手机上装 APP 的感觉,但 Docker 容器并不会像手机 APP 那样会自动更新,而如果我们需要更新容器一般需要以下三个步骤:
docker rm -f <CONTAINER>docker pull <IMAGE>docker run <ARG> ... <IMAGE>如果部署了大量的容器需要更新使用这种传统的方式工作量是巨大的。
Drone构建Docker镜像一键发布并推送电报通知书接上回,上文已经搭建好了
Drone CI环境,本文就搭建一个Golang + Docker的Demo。
具体代码见:示例代码
Gitea创建一个空项目,本过程不赘述。Drone CI后台,点击右上角SYNC按钮更新项目目录,更新完毕之后点击项目右侧ACTIVAVE按钮,然后点击ACTIVATE REPOSITORY按钮启用自动化# clone项目,我这只是个例子
git clone https://gitee.ltd/lxh/drone-ci-golang
# 初始化
cd drone-ci-golang
go mod init drone-ci-golang
// 创建 main.go 文件
package main
import (
"net/http"
"github.com/gin-gonic/gin"
"github.com/sirupsen/logrus"
)
func main() {
r := gin.Default()
r.GET("/health", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H {
"health": true,
})
})
if err := r.Run(":8080"); err != nil {
logrus.WithError(err).Fatal("Couldn't listen")
}
}
.drone.yml文件,可参考下文kind: pipeline
name: golang-docker-ci
steps:
- name: 执行代码检查
image: golang:latest
commands:
- go get -u github.com/golangci/golangci-lint/cmd/golangci-lint
- golangci-lint run
- name: 编译二进制文件
image: golang:latest
environment:
GOOS: linux
GOARCH: amd64
CGO_ENABLED: 0
# 编译生成二进制文件,我这儿叫 go-app,酌情修改
commands:
- go build -o go-app
- name: 打包Docker镜像并推送
image: plugins/docker
settings:
registry: 需要推送的Docker私服服务器地址
repo: 需要打包的镜像名称
use_cache: true
username: 私服登录用户名
password: 私服登录密码
auto_tag: true # 自动打tag
# 也可以用下面这个手动指定
# tags:
# - latest
# - 0.0.1
when:
event: push
branch: master
- name: 发送电报通知消息
image: appleboy/drone-telegram
settings:
token: 电报机器人的token
to: 需要接收的用户的userid,可在电报机器人 `@userinfobot`得到
message: >
{{#success build.status}}
第 {{build.number}} 次构建已完成,状态:构建成功
{{else}}
第 {{build.number}} 次构建已完成,状态:构建失败
{{/success}}
提交记录:{{commit.author}} - {{commit.message}}
Dockerfile文件FROM alpine
MAINTAINER LiXunHuan([email protected])
创建工作目录,修改alpine源为中科大的源,安装必要工具
RUN mkdir -p /app && sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories &&
apk update &&
apk upgrade &&
apk add ca-certificates && update-ca-certificates &&
apk add –update tzdata &&
rm -rf /var/cache/apk/*
WORKDIR /app
这个go-app 是上面.drone.yml里面编译生成的文件,酌情修改
COPY go-app ./
ENV TZ=Asia/Shanghai
EXPOSE 8080
ENTRYPOINT ./go-app
Gitea私服,Drone会自动处理Drone运行截图1
