使用 Caddy 搭建 WebDAV 服务端 作者: Chuwen 时间: 2024-12-24 分类: Linux 评论 ## 安装 安装有 2 种方法,一种是自定义构建,另外一种是从 Caddy Download 页面下载。 本文采用第二种方法从 Caddy Download 页面下载。 1. 访问 https://caddyserver.com/download 2. 搜索 `webdav` 并点击选中 3. 选择对应的平台架构 4. 点击 **Download** 按钮下载 ![](https://cdn.nowtime.cc/2024/12/2162720267.png) ## Caddyfile 配置 ### 生成 hash 密码 > 生成后待会用的上 * 使用 `caddy hash-password` 交互生成密码 hash * 直接使用 `caddy hash-password -p 12345678` 来生成密码 *12345678* 的 hash(注意 *12345678* 可以替换为你要生成的密码) ### 示例配置 **Caddyfile** ```Caddyfile { order webdav before file_server } :80 { # 仅处理 /webdav/ 开头的 URI handle /webdav/* { # 配置账号认证,防止被公共可获取 basicauth { # 语法:{用户名} {通过 caddy hash-password 生成} # 密码是 12345678 root $2a$14$LAqkx1nX98xpH7qwCPjDqub2vPIwZ5aT9ntVuf1QJnygKDWeD09Nu } # 启用 webdav 服务 webdav { # 定义根目录地址 root C:\Users\Shine\Downloads\ # 定义 Request URI 的前缀,与 `handle /webdav/*` 相对应,不然没办法正常处理 prefix /webdav } } redir /webdav /webdav/ } ``` ## 运行 直接使用 `caddy run` 即可启动, 或者使用 `-c` 参数指定 Caddyfile 具体文件地址 `caddy run -c c:\xx\xxx\xxx\Caddyfile`
Kubernetes HPA(水平扩缩容)触发条件 作者: Chuwen 时间: 2024-12-16 分类: Kubernetes 评论 ## 背景 最近在工作中实际应用 kubernetes,应用期间对 HPA 有点疑惑,经过查找资料了解特此水一篇来记录 [狗子] ## 结论 > 详细可查看官方文档:https://kubernetes.io/zh-cn/docs/tasks/run-application/horizontal-pod-autoscale/#algorithm-details 总的来说满足扩缩容必须满足此公式: ``` 期望副本数 = ceil[当前副本数 * (当前指标 / 期望指标)] ``` 以下是我通过整理的一个表格,来清晰表达出各种情况的扩缩容状态: | 请求的 CPU (request CPU) | 请求的内存 (request memory) | 当前的 CPU (current CPU) | 当前的内存 (current memory) | 当前副本数 (current replicas) | 扩缩容状态 (scaling status) | |-----------------------|------------------------|-----------------------|------------------------|--------------------------|------------------------| | 1000m | 1024Mi | 500m | 512Mi | 3 | 无需扩容 (No scaling) | | 1000m | 1024Mi | 1500m | 1536Mi | 3 | 扩容 (Scaling up) | | 1000m | 1024Mi | 750m | 768Mi | 3 | 无需扩容 (No scaling) | | 1000m | 1024Mi | 400m | 512Mi | 3 | 缩容 (Scaling down) | | 1000m | 1024Mi | 1000m | 1024Mi | 3 | 无需扩容 (No scaling) | | 1000m | 1024Mi | 2500m | 2048Mi | 3 | 扩容 (Scaling up) | | 1000m | 1024Mi | 500m | 512Mi | 1 | 无需扩容 (No scaling) | | 1000m | 1024Mi | 1500m | 1536Mi | 1 | 扩容 (Scaling up) | | 1000m | 1024Mi | 500m | 768Mi | 2 | 无需扩容 (No scaling) | | 1000m | 1024Mi | 300m | 256Mi | 2 | 缩容 (Scaling down) | 在上表中: - **请求的 CPU (request CPU)** 和 **请求的内存 (request memory)** 是在 Pod 定义中设置的资源请求。 - **当前的 CPU (current CPU)** 和 **当前的内存 (current memory)** 是实际使用的资源量。 - **当前副本数 (current replicas)** 是当前运行的 Pod 数量。 - **扩缩容状态 (scaling status)** 由公式 `期望副本数 = ceil[当前副本数 * (当前指标 / 期望指标)]` 决定: - **扩容 (Scaling up)** 表示需要增加副本数。 - **缩容 (Scaling down)** 表示需要减少副本数。 - **无需扩容 (No scaling)** 表示当前副本数满足需求,不需要扩缩容。
Chrome 强制启用深色模式 作者: Chuwen 时间: 2024-12-11 分类: PHP技巧 评论 ## 操作步骤 1. 打开网址 `chrome://flags/#enable-force-dark` 2. 改为 Enabled 3. 最后重启浏览器即可
PHP 字符串处理:去除 JSON 中多余的逗号 作者: Chuwen 时间: 2024-10-11 分类: PHP 评论 在处理 JSON 数据时,有时可能会遇到一些格式问题,比如在对象或数组的最后一个元素后意外多出一个逗号。这类格式错误会导致 `json_decode()` 函数解析失败。因此,我们可以在解析之前,预先清理这些多余的逗号。 ## 1. 使用正则表达式处理多余逗号 在处理 JSON 数据时,可以使用正则表达式来匹配并移除对象或数组最后一个元素后面的逗号。以下是一个示例代码,展示如何通过 `preg_replace` 来解决这个问题: ```php
使用 docker inspect 和 jq 命令快速查看容器挂载目录、docker-compose.yaml 路径 作者: Chuwen 时间: 2024-07-31 分类: 神奇技巧 评论 关于 `jq` 命令的详细解释及安装教程:https://wangchujiang.com/linux-command/c/jq.html --- 语法: ```shell docker inspect | jq '.[0].Mounts' ``` 例如: ```shell shine@Shine-Win11:~/documents/self-projects/tmp$ docker inspect aa3f359ddc0e | jq '.[0].Mounts' [ { "Type": "bind", "Source": "/home/shine/documents/git/projects/docker-elk/elasticsearch/config/elasticsearch.yml", "Destination": "/usr/share/elasticsearch/config/elasticsearch.yml", "Mode": "ro,Z", "RW": false, "Propagation": "rprivate" }, { "Type": "volume", "Name": "docker-elk_elasticsearch", "Source": "/var/lib/docker/volumes/docker-elk_elasticsearch/_data", "Destination": "/usr/share/elasticsearch/data", "Driver": "local", "Mode": "z", "RW": true, "Propagation": "" } ] ``` ![](https://cdn.nowtime.cc/2024/07/31/3809813538.png) ## 查看 docker-compose.yaml 路径 语法: ```shell docker inspect | jq '.[0].Config.Labels' ``` 示例: ```shell shine@Shine-Win11:~/documents/git/projects/docker-elk$ docker inspect 8334b593b89a | jq '.[0].Config.Labels' { "com.docker.compose.config-hash": "d1f80fc712ff55f9f33eafc4842bf71f947a6584b27eb548bca0c0dc399bff8b", "com.docker.compose.container-number": "1", "com.docker.compose.depends_on": "", "com.docker.compose.image": "sha256:de7d209b219972d54381f0a7d18671d0c3aa1f3b4410a607cb82d34a08a97dc8", "com.docker.compose.oneoff": "False", "com.docker.compose.project": "frankenphp-typecho", "com.docker.compose.project.config_files": "/mnt/c/Users/Shine/Documents/Self/projects/frankenphp-typecho/docker-compose.yaml", "com.docker.compose.project.working_dir": "/mnt/c/Users/Shine/Documents/Self/projects/frankenphp-typecho", "com.docker.compose.replace": "3a7bd46c1737dd0ce32be2e6f4b246ca3e2778bbc83d105579c994e8fadc3a17", "com.docker.compose.service": "wordpress", "com.docker.compose.version": "2.24.7", "org.opencontainers.image.created": "2024-04-23T12:51:06Z", "org.opencontainers.image.description": "The modern PHP app server", "org.opencontainers.image.licenses": "MIT", "org.opencontainers.image.revision": "a9ebc3aeea590b45422a19510473955b372d09aa", "org.opencontainers.image.source": "https://github.com/dunglas/frankenphp", "org.opencontainers.image.title": "FrankenPHP", "org.opencontainers.image.url": "https://frankenphp.dev", "org.opencontainers.image.vendor": "Kévin Dunglas", "org.opencontainers.image.version": "v1.1.3" } ``` ![](https://cdn.nowtime.cc/2024/07/31/1733369616.png)