[{"title":"windows安装wsl失败","permalink":"https://liangjinzhi.com/posts/win-install-wsl/","content":"C:\\Users\\yy\u0026gt;wsl \u0026ndash;install -d Ubuntu 安装过程中出现错误。分发名称: \u0026lsquo;Ubuntu\u0026rsquo; 错误代码: 0x8000ffff\nC:\\Users\\yy\u0026gt;wsl \u0026ndash;update 正在安装: 适用于 Linux 的 Windows 子系统 灾难性故障 设备名\tDESKTOP-CH432AQ 处理器\t12th Gen Intel(R) Core(TM) i5-12400F 2.50 GHz 机带 RAM\t32.0 GB (31.8 GB 可用) 存储\t466 GB HDD WDC WD5000AAKX-08ERMA0, 8 GB SSD Msft Virtual Disk, 477 GB SSD BR 512GB 显卡\tNVIDIA GeForce RTX 3060 Laptop GPU (12 GB) 设备 ID\t65F4DCDC-5059-4AE7-AB42-3D376CCF00CA 产品 ID\t00330-80000-00000-AA243 系统类型\t64 位操作系统, 基于 x64 的处理器 笔和触控\t没有可用于此显示器的笔或触控输入\n不复杂，按这个顺序来，重点是用管理员 PowerShell，这里搞错了，不是普通 CMD。\n先右键开始菜单 → Windows PowerShell / Terminal 管理员，执行：\ndism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart\rdism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart\rbcdedit /set hypervisorlaunchtype auto 然后重启电脑。\n重启后继续管理员 PowerShell：\nwsl --update --web-download\rwsl --install --web-download -d Ubuntu 你这个 wsl --update 走 Store 时失败，所以关键是加 --web-download，绕过 Microsoft Store 下载。\n如果还失败，就手动下载安装：\n打开官方 WSL GitHub 最新版： https://github.com/microsoft/WSL/releases/latest 下载：Microsoft.WSL.x64.msixbundle 双击安装，或管理员 PowerShell 执行： Add-AppxPackage .\\Microsoft.WSL.x64.msixbundle 再执行： wsl --install --web-download -d Ubuntu 微软官方也推荐 --web-download 用来绕过 Store 下载 WSL/发行版： Microsoft WSL install docs\n","description":"","author":null,"tags":["Windows","WSL"],"categories":["运维实践"],"date":"2026-08-05"},{"title":"关于本人","permalink":"https://liangjinzhi.com/about/","content":"这是我的个人简介页面。\n","description":"","author":null,"tags":null,"categories":null,"date":"2026-07-05"},{"title":"【K3s 系列 01】从零搭建 K3s","permalink":"https://liangjinzhi.com/posts/k3s-01/","content":"一、获取系统基础硬件信息\r#基础架构 （输出参考：如果是 x86_64 或 aarch64，即可完美支持。）\rpig@vm-debian-13:~$ uname -m\rx86_64\r#处理器 （K3s 单节点极其轻量，最低仅需 1核 CPU 和 512MB 内存（推荐 1核1G 以上）。）\rpig@vm-debian-13:~$ lscpu | grep -E \"Model name|CPU\\(s\\):\"\rCPU(s): 2\rModel name: 13th Gen Intel(R) Core(TM) i5-13400\rNUMA node0 CPU(s): 0,1\r#内存大小\rpig@vm-debian-13:~$ free -m\rtotal used free shared buff/cache available\rMem: 3883 886 1917 0 1334 2997\rSwap: 0 0 安装脚本\r官方的脚本太慢，国内用户使用这个脚本进行加速\r$ curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -\r检查k3s服务状态\r$ systemctl status k3s\r查看集群节点状态\r$ sudo kubectl get node\r查看集群中运行的pod\r$ sudo kubectl get pods -A\rK3s 官方经典架构与安装文档\r## 二、配置kubectl （普通用户） {.wp-block-heading}\r普通用户执行命令 kubectl get nodes 提示没有权限\rpig@vm-debian:~$ mkdir -p ~/.kube #创建 .kube 目录\rpig@vm-debian:~$ sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config #复制 K3s 默认配置\rpig@vm-debian:~$ sudo chown $USER:$USER ~/.kube/config #修改文件所属用户\rpig@vm-debian:~$ echo 'export KUBECONFIG=$HOME/.kube/config' \u0026gt;\u0026gt; ~/.bashrc #配置环境变量\rsource ~/.bashrc\rpig@vm-debian:~$ kubectl get nodes #验证配置\rNAME STATUS ROLES AGE VERSION\rvm-debian-13 Ready control-plane 175m v1.35.5+k3s1\r如上，说明当前普通用户已经可以正常访问 Kubernetes API。\r运维思考\r生产环境中，不建议长期使用root用户进行Kubernetes管理。\r推荐使用普通用户，通过 sudo 执行系统级操作（如管理服务、修改配置），而将 kubectl 配置为普通用户直接使用。\r这样既符合Linux最小权限原则，也更符合企业运维的实际工作方式。\r## 三、配置dashboard {.wp-block-heading}\r为了避免下载失败的情况，这里使用国内可访问的镜像仓库\r### 3.1下载YAML {.wp-block-heading}\rwget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml\r### 3.2修改类似内容 {.wp-block-heading}\r找到类似内容：\rimage: kubernetesui/dashboard:v2.7.0\r改成（示例）：\rimage: docker.m.daocloud.io/kubernetesui/dashboard:v2.7.0\r再找到：\rimage: kubernetesui/metrics-scraper:v1.0.8\r改成：\rimage: docker.m.daocloud.io/kubernetesui/metrics-scraper:v1.0.8\r### 3.3开始部署 {.wp-block-heading}\r$ kubectl apply -f recommended.yaml\rnamespace/kubernetes-dashboard unchanged\rserviceaccount/kubernetes-dashboard unchanged\rservice/kubernetes-dashboard unchanged\rsecret/kubernetes-dashboard-certs unchanged\rsecret/kubernetes-dashboard-csrf unchanged\rsecret/kubernetes-dashboard-key-holder unchanged\rconfigmap/kubernetes-dashboard-settings unchanged\rrole.rbac.authorization.k8s.io/kubernetes-dashboard unchanged\rclusterrole.rbac.authorization.k8s.io/kubernetes-dashboard unchanged\rrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard unchanged\rclusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard unchanged\rdeployment.apps/kubernetes-dashboard configured\rservice/dashboard-metrics-scraper unchanged\rdeployment.apps/dashboard-metrics-scraper configured\r3.4验证是否成功\r这里有2个之前创建创建的pod\r$ kubectl get pods -n kubernetes-dashboard\rNAME READY STATUS RESTARTS AGE\rdashboard-metrics-scraper-7764d6f57c-r26sm 0/1 ContainerCreating 0 13m\rdashboard-metrics-scraper-8d46b45f6-4c6bv 0/1 ContainerCreating 0 23h\rkubernetes-dashboard-659cf4fdd5-l2gp9 0/1 ContainerCreating 0 13m\rkubernetes-dashboard-b44857bbb-9k9kc 0/1 ContainerCreating 0 23h\r这里READY一直是0，失败了，需要 排查一下。\r查看pod卡在哪里了\rkubectkubectl describe pod -n kubernetes-dashboard-659cf4fdd5-l2gp9\rNo resources found in kubernetes-dashboard-659cf4fdd5-l2gp9 namespace.\rpig@vm-debian:~$\rpig@vm-debian:~$ kubectl describe pod -n kubernetes-dashboard dashboard-metrics-scraper-7764d6f57c-r26sm |tail\rWarning FailedCreatePodSandBox 17m kubelet Failed to create pod sandbox: rpc error: code = DeadlineExceeded desc = failed to start sandbox \"74e4795e553dc82c49e53c89a724293525e65e3134fa2ae09787ff197831d938\": failed to get sandbox image \"rancher/mirrored-pause:3.6\": failed to pull image \"rancher/mirrored-pause:3.6\": failed to pull and unpack image \"docker.io/rancher/mirrored-pause:3.6\": failed to resolve reference \"docker.io/rancher/mirrored-pause:3.6\": failed to do request: Head \"https://registry-1.docker.io/v2/rancher/mirrored-pause/manifests/3.6\": dial tcp 182.50.139.56:443: i/o timeout-n kubernetes-dashboard-659cf4fdd5-l2gp9\rNo resources found in kubernetes-dashboard-659cf4fdd5-l2gp9 namespace.\rpig@vm-debian:~$\rpig@vm-debian:~$ kubectl describe pod -n kubernetes-dashboard dashboard-metrics-scraper-7764d6f57c-r26sm |tail\rWarning FailedCreatePodSandBox 17m kubelet Failed to create pod sandbox: rpc error: code = DeadlineExceeded desc = failed to start sandbox \"74e4795e553dc82c49e53c89a724293525e65e3134fa2ae09787ff197831d938\": failed to get sandbox image \"rancher/mirrored-pause:3.6\": failed to pull image \"rancher/mirrored-pause:3.6\": failed to pull and unpack image \"docker.io/rancher/mirrored-pause:3.6\": failed to resolve reference \"docker.io/rancher/mirrored-pause:3.6\": failed to do request: Head \"https://registry-1.docker.io/v2/rancher/mirrored-pause/manifests/3.6\": dial tcp 182.50.139.56:443: i/o timeout\rKubernetes 无法拉取 pause 镜像（sandbox基础镜像）\r解决方案：\r#修改 K3s 的 pause 镜像\r$ sudo vi /etc/rancher/k3s/registries.yaml #编辑以下文件\rmirrors:\rdocker.io:\rendpoint:\r- \"https://docker.m.daocloud.io\"\r#然后进行重启\r$sudo systemctl restart k3s\r$ kubectl get pods -n kubernetes-dashboard #这个时候已经创建成功了\rNAME READY STATUS RESTARTS AGE\rdashboard-metrics-scraper-7764d6f57c-r26sm 1/1 Running 0 28m\rkubernetes-dashboard-659cf4fdd5-l2gp9 1/1 Running 1 (2m45s ago) 28m\r3.4配置Dashboard进行访问\r可以通过 kubectl proxy，或者配置NodePort进行进行访问。\r我们这里通过配置NodePort来继续。\r$kubectl edit svc -n kubernetes-dashboard kubernetes-dashboard\r#找到：\rtype: ClusterIP\r#修改成\rtype: NodePort\r$kubectl get svc -n kubernetes-dashboard #查看端口\r主机访问：https://ip:port\r生成token\r$ kubectl -n kubernetes-dashboard create token admin-user\reyJhbGciOiJSUz.....qGeyA #这里进行省略输出\r获取token并进行登录\r至此，K3s 单节点环境已完成基础验证，包括：\rkubectl 可用\rPod 正常运行\rDashboard 可访问并登录成功\r","description":"","author":null,"tags":null,"categories":["运维实践","K3s"],"date":"2026-07-04"},{"title":"AdguardHome容器化部署","permalink":"https://liangjinzhi.com/posts/adguardhome-docker-setup/","content":"\r家里有linux主机，于是就想到了现在上网的时候经常有太多的网站会有广告，看看能不能通过自建规则减少广告。听说有AdguardHome可以实现这个功能。那么我们来看看如何部署和使用起来。\r## 概述 ADGUARDHOME是一款网络级广告和跟踪器拦截DNS服务器，作为一款开源的隐私保护工具，它能够在网络层面为所有设备提供广告过滤和隐私保护功能，无需在每个设备上单独安装客户端软件。通过Docker容器化部署ADGUARDHOME，可以实现快速部署、环境隔离和版本管理，适用于家庭网络、小型企业网络等多种场景。\r## PART1 服务端环境准备 Debian,docker,AdguardHome镜像源\r主机IP:192.168.5.200\r镜像源可以自行查找\r编写Docker-compose.yml\rservices:\radguardhome:\rimage: docker.1ms.run/adguard/adguardhome:v0.107.76\rcontainer_name: adguardhome\rrestart: unless-stopped\r# 宿主机目录挂载，确保升级或重启时数据不丢失\rvolumes:\r- ./ag_work:/opt/adguardhome/work\r- ./ag_conf:/opt/adguardhome/conf\rports:\r- \"53:53/tcp\"\r- \"53:53/udp\"\r- \"8081:8081/tcp\"\r- \"443:443/tcp\"\r- \"443:443/udp\"\r- \"3000:3000/tcp\"\r这里因为我本地环境80端口已经启用了，所以把adguardHome的默认80端口修改成8081了。请自行注意\r启用命令\rsudo docker compose up -d\r启动后\rdog@debian:~/adguard$ docker ps |grep adguard\r98dd7f0db486 docker.1ms.run/adguard/adguardhome:v0.107.76 \"/opt/adguardhome/Ad…\" 24 hours ago Up 16 hours 0.0.0.0:53-\u0026gt;53/tcp, 0.0.0.0:53-\u0026gt;53/udp, \u0026#91;::]:53-\u0026gt;53/tcp, \u0026#91;::]:53-\u0026gt;53/udp, 80/tcp, 67-68/udp, 0.0.0.0:443-\u0026gt;443/tcp, \u0026#91;::]:443-\u0026gt;443/tcp, 853/udp, 853/tcp, 3000/udp, 5443/tcp, 0.0.0.0:3000-\u0026gt;3000/tcp, \u0026#91;::]:3000-\u0026gt;3000/tcp, 0.0.0.0:8081-\u0026gt;8081/tcp, 0.0.0.0:443-\u0026gt;443/udp, \u0026#91;::]:8081-\u0026gt;8081/tcp, \u0026#91;::]:443-\u0026gt;443/udp, 5443/udp, 6060/tcp adguardhome\r访问首页，并设置密码\r## 回到首页-设置-DNS设置 {.wp-block-heading}\r设置上游DNS服务器，直接粘贴\rhttps:\u0026#47;\u0026#47;dns.alidns.com/dns-query\rhttps://doh.pub/dns-query\rhttps://doh.360.cn/dns-query\r114.114.114.114\r223.5.5.5\r### Bootstrap DNS 服务器 {.wp-block-heading}\r223.5.5.5\r119.29.29.29\r点击保存\r### 回到过滤器，自定义过滤规则 {.wp-block-heading}\r通过指定域名进行拦截，demo如下\r||dns.weixin.qq.com.cn^\r应用即可\r## PART2 路由器 {.wp-block-heading}\r以中兴路由器为例，网络-配置DNS服务器为服务器端的IP。（我这里是192.168.5.200）\r## PART3 终端电脑 {.wp-block-heading}\r以win10/win11为例\r1.按下 Win + R 键，输入 cmd 并按 Enter 打开命令提示符。\n2.输入ipconfig /flushdns 刷新DNS缓存\r刷新后，你可以通过以下命令查看当前电脑实际使用的 DNS 服务器地址，确保它确实是你设置的 AdGuardHome 主机 IP\r## 查看效果 {.wp-block-heading}\r通过电脑任意访问一个网站如https://news.qq.com/ 回到查询日志-选择已过滤\r## 参考资料 {.wp-block-heading}\rAdguardHome Docker 容器化部署指南\r","description":"","author":null,"tags":null,"categories":["运维实践"],"date":"2026-07-04"},{"title":"AWS免费服务器申请教程","permalink":"https://liangjinzhi.com/posts/how-to-apply-aws-free-tier/","content":"\rPART1 注册账号\r## 1.准备工作： {.wp-block-heading}\r说明：\r邮箱地址：建议准备一个未曾关联过AWS的独立邮箱\r支付方式：必须是一张支持国际支付的信用（Visa,MasterCard或America Express）\r手机号码：用于接收验证码\r## 2.注册AWS账号 {.wp-block-heading}\r访问亚马逊官网,https://aws.amazon.com/cn/，\r点击右上角的创建账户（2025年7月15日之后 AWS 改版的新政策只能免费使用6个月了，以前是12个月的）\r注册过程查收邮箱验证码消息。后续还需要填写联系信息和信用卡信息，同时系统会收一笔小额预授权，后面会退回信用卡账户的。请放心。\r后面大致有5个步骤完成注册。\r### 第1步，设置密码： {.wp-block-heading}\r### 第2步，填写联系人信息 {.wp-block-heading}\r### 第3步，填写账单信息 {.wp-block-heading}\r需要注意免费资源使用超标的话会直接从信用卡里面扣费结算。\r### 第4步，验证手机号 {.wp-block-heading}\r### 第5步，选择支持计划 {.wp-block-heading}\r选择免费的基本支持\r到这里就完成注册了，稍后留意一下注册成功的邮件通知。\rPART2 创建EC2实例\r收到AWS账户激活的邮件后，登录AWS账户控制台，这里我们选择“根用户”，输入邮箱和密码登录。\r进入控制台后，选择云服务器所在地区，我这里选择了香港，后面网域的访问或者网络也会更通畅方便一些。\r创建实例，选择主页中的 \u0026#8220;启动实例\u0026#8221;，创建第一台EC2实例。\r按自己所需创建免费的镜像\r创建密钥对，自定义一个密钥的名称，私钥文件格式和你使用的ssh工具有关，根据提示选择。创建好之后点击\u0026#8221;创建密钥对\u0026#8221;弹出文件下载框，自己保存好，后续使用该密钥对进行访问。\r配置存储\r免费每月存储容量是30GB，建议按需使用，为避免超额使用，建议只创建一个实例使用。\r配置好，在右边选择启动实例即可。\r这里在控制台就可以看到启动的实例了。\r","description":"","author":null,"tags":null,"categories":["运维实践"],"date":"2026-07-04"},{"title":"Certd全自动证书管理系统","permalink":"https://liangjinzhi.com/posts/certd-ssl-auto-renewal-system/","content":"背景\r公司网站ssl证书每次需要人工更新ssl证书，网站域名一多就容易出问题，要么操作麻烦，要么就是忘记了。\r## 解决方案 {.wp-block-heading}\r部署Certd平台，实现\r自动申请证书\r自动续签\r统一证书管理\r## 部署方式 {.wp-block-heading}\rDocker部署Certd\r## 实现效果 {.wp-block-heading}\r证书更新从“人工操作” → “自动续期”\r避免证书过期导致服务中断\r降低运维维护成本\r## 运行截图 {.wp-block-heading}\r首页\r证书自动化流水线\r执行历史记录\r","description":"","author":null,"tags":null,"categories":["运维实践"],"date":"2026-07-04"},{"title":"Loki日志管理","permalink":"https://liangjinzhi.com/posts/building-grafana-loki-log-analysis/","content":"\r5分钟告别传统 SSH 黑框，教你搭建极轻量、纯网页端的自动化日志监控平台。\r为了确保最高的稳定性和极低的资源消耗，遵循 Grafana 官方推荐的单机二进制（Binary）部署指导（比 Docker 性能更好、更直观）。\r目标：在已有granfana平台的基础 上部署Loki,并监控服务器的相关日志\r前提：开放Loki端3000，3100端口\r准备工作：创建统一目录\r# mkdir -p /opt/loki-stack\r# cd /opt/loki-stack\r## 第一步：服务端机器下载并安装 Loki {.wp-block-heading}\rLoki 官方提供编译好的单文件二进制包，直接下载解压即可运行。\r1.下载官方二进制包与默认配置：\r# 下载 Loki 主程序\rwget https://github.com/grafana/loki/releases/download/v3.0.0/loki-linux-amd64.zip\r#或者使用国内GitHub镜像下载Loki主程序 wget https://ghfast.top/https://github.com/grafana/loki/releases/download/v3.0.0/loki-linux-amd64.zip\r# 解压\runzip loki-linux-amd64.zip\rmv loki-linux-amd64 loki\r# 下载官方标准配置文件\rwget https://raw.githubusercontent.com/grafana/loki/main/cmd/loki/loki-local-config.yaml -O loki-config.yaml\r#或者使用ghfast.top代理下载 #wget https://ghfast.top/https://raw.githubusercontent.com/grafana/loki/main/cmd/loki/loki-local-config.yaml -O loki-config.yaml\r2.清空原来的配置文件以添加“自动清理策略”（防止撑爆磁盘）： 打开 loki-config.yaml，在文件末尾添加以下内容：\rauth_enabled: false\rserver:\rhttp_listen_port: 3100\rgrpc_listen_port: 9096\rcommon:\rinstance_addr: 127.0.0.1\rpath_prefix: /tmp/loki\rstorage:\rfilesystem:\rchunks_directory: /tmp/loki/chunks\rrules_directory: /tmp/loki/rules\rreplication_factor: 1\rring:\rkvstore:\rstore: inmemory\rschema_config:\rconfigs:\r- from: 2024-01-01\rstore: tsdb\robject_store: filesystem\rschema: v13\rindex:\rprefix: index_\rperiod: 24h\rlimits_config:\rretention_period: 168h #地保留7天日志，绝不重复\rcompactor:\rworking_directory: /tmp/loki/retention\rcompaction_interval: 10m\rretention_enabled: true\rdelete_request_store: filesystem # 解决元数据存放问题\r3.使用 Systemd 保持后台运行： 创建系统服务文件 vi /etc/systemd/system/loki.service：\r\u0026#91;Unit]\rDescription=Grafana Loki Log Aggregator\rAfter=network.target\r\u0026#91;Service]\rType=simple\rExecStart=/opt/loki-stack/loki -config.file=/opt/loki-stack/loki-config.yaml\rRestart=on-failure\r\u0026#91;Install]\rWantedBy=multi-user.target\r启动 Loki：\rsystemctl daemon-reload\rsystemctl enable loki --now\r# 检查状态，看到 active (running) 即成功\rsystemctl status loki\r## 第二步：目标机器下载并配置 Promtail (收集端) {.wp-block-heading}\rPromtail 需要在日志收集端部署。\r1.规范创建所有必要目录\r# 创建 Promtail 程序及配置目录\rmkdir -p /opt/loki-stack/promtail\r# 创建你要监控的 FastAPI 日志存放目录（如果研发还没创建的话）\rmkdir -p /var/log/fastapi\r2. 下载并解压主程序\r进入刚刚创建好的工作目录，下载官方二进制包：\rcd /opt/loki-stack/promtail\r# 下载官方 v3.0.0 二进制包\rwget https://github.com/grafana/loki/releases/download/v3.0.0/promtail-linux-amd64.zip\r# 或者使用 ghproxy 代理加速下载\rwget https://ghfast.top/https://github.com/grafana/loki/releases/download/v3.0.0/promtail-linux-amd64.zip\r# 解压（若提示找不到命令，请先执行 yum install unzip -y）\runzip promtail-linux-amd64.zip\r# 将解压出来的文件重命名，方便后续调用\rmv promtail-linux-amd64 promtail\r# 清理无用的压缩包\rrm -f promtail-linux-amd64.zip\r3. 创建配置文件\r在当前目录下创建配置文件：vi /opt/loki-stack/promtail/promtail-config.yaml，写入官方标准模板：\rpositions: {}\rserver:\rhttp_listen_port: 9080\rgrpc_listen_port: 0\rpositions:\rfilename: /opt/loki-stack/promtail/positions.yaml\rclients:\r- url: http://10.1.0.14:3100/loki/api/v1/push\rscrape_configs:\r- job_name: fastapi-cluster\rstatic_configs:\r- targets:\r- localhost\rlabels:\rjob: fastapi\rhost: api\r__path__: /home/ubuntu/api/nohup.out #需要监控的日志文件\r- job_name: fastapi-app-logs\rstatic_configs:\r- targets:\r- localhost\rlabels:\rjob: fastapi\rhost: api\r__path__: /home/ubuntu/api/log/app.log* #需要监控的日志文件\r保存退出\r配置Systemd服务文件\rvi /etc/systemd/system/promtail.service\r直接把下面的标准配置贴进去：\r\u0026#91;Unit]\rDescription=Promtail Log Client\rAfter=network.target\r\u0026#91;Service]\rType=simple\r# 👈 使用绝对路径，确保后台能正确拉起程序和读到配置文件\rExecStart=/opt/loki-stack/promtail/promtail -config.file=/opt/loki-stack/promtail/promtail-config.yaml\rRestart=on-failure\r\u0026#91;Install]\rWantedBy=multi-user.target\r2. 重新加载并一键启动\r保存退出后（:wq），依次执行以下命令让系统识别新服务并运行：\r# 1. 刷新后台\rsystemctl daemon-reload\r# 2. 设置开机自启，并现在立刻启动它\rsystemctl enable promtail --now\r# 3. 检查状态\rsystemctl status promtail\r直接拉起Promtail服务\rsystemctl restart promtail\rsystemctl status promtail\r安装grafana\r# 1. 通过代理地址下载 Grafana 官方商业版/开源版安装包\rwget https://mirrors.tuna.tsinghua.edu.cn/grafana/apt/pool/main/g/grafana/grafana_10.4.1_amd64.deb\r# 2. 使用 dpkg 强制安装\rsudo dpkg -i grafana_10.4.1_amd64.deb\r# 3. 设置开机自启并现在立刻启动\rsudo systemctl daemon-reload\rsudo systemctl enable grafana-server --now\r# 4. 清理安装包\rrm -f grafana_10.4.1_amd64.deb\r访问 granfana http://ip:3000\r### 添加 Loki 数据源 {.wp-block-heading}\r进入主界面后：\r点击左侧菜单栏的 Connections（连接图标），然后选择 Data sources（数据源）。\r点击右上角的蓝色按钮 Add data source。\r在搜索框中输入 Loki，看到 Loki 图标后点击它进入配置页面。\r### 第三步：填写连接地址 {.wp-block-heading}\r在 Loki 配置表单中，你只需要填写一个地方：\r找到 URL 输入框，因为 Loki 和 Grafana 都在这同一台机器上，直接输入本地回环地址即可：\r2回到Explore的 Run query 按钮。\r现在你就可以在屏幕下方尽情翻阅、搜索和过滤这 500M 历史日志以及动态更新的 FastAPI 实时数据了！看看有没有成功刷出来？\r### 🔍 验收 {.wp-block-heading}\r服务启动后，你可以静静等待一会。此时 Promtail 已经在后台把日志数据倒腾给 Loki 了。\r接下来你就可以登录 http://ip:3000，在 Explore 里面选择 Loki 数据源，通过 {host=\"api\"} 语法，翻阅配置的日志，再也不需要频繁登录服务器了。\r","description":"","author":null,"tags":null,"categories":["运维实践"],"date":"2026-07-04"},{"title":"Nginx  htpasswd防护","permalink":"https://liangjinzhi.com/posts/nginx-htpasswd-generator/","content":"\r今天收到腾讯云的告警信息，原来是昨天部署的grafana被漏洞扫描识别到。\r## 1.安装必要的工具 {.wp-block-heading}\r如果系统提示找不到 htpasswd 命令，请执行以下命令安装工具包：\rsudo apt update \u0026\u0026 sudo apt install -y apache2-utils\r## 2. 生成密码文件 {.wp-block-heading}\r在终端执行以下命令（将 your_username 替换为你想要设置的登录账号名）：\rsudo htpasswd -c /etc/nginx/.htpasswd your_username\r执行后，系统会提示你输入两次密码。\r注意：在输入密码时，终端不会显示任何字符（包括星号），这是正常的 Linux 安全机制。输完按回车即可。\r## 3. 验证文件是否生成 {.wp-block-heading}\r你可以查看一下文件内容，确保它已经生成：\rcat /etc/nginx/.htpasswd\r## 4.在 Nginx 中启用 {.wp-block-heading}\r在nginx 在 location / 段落内添加如下内容添加如下：\rauth_basic \"Restricted Access\";\rauth_basic_user_file /etc/nginx/.htpasswd;\r## 5.重启 Nginx 使配置生效 {.wp-block-heading}\rsudo nginx -t # 检查配置语法是否正确\rsudo systemctl reload nginx\r## 6.验证 {.wp-block-heading}\r### 命令解析： {.wp-block-heading}\r-I：只获取 HTTP 头信息（快速查看，不下载网页内容）。\r-L：跟随重定向（如果服务器返回 301/302，它会自动追踪最终到达的页面）。\r-w：输出更详细的状态码和内容类型。\r当浏览器收到 401 Unauthorized 和 WWW-Authenticate 头部时，意味着 Nginx 已经成功接管了该服务的入口。任何自动化扫描器或攻击者在访问该域名时，只会收到这个“未授权”的信号，根本无法触发后面的 Grafana 业务逻辑，也无法探测到具体的服务指纹。\r","description":"","author":null,"tags":null,"categories":["运维实践","技术笔记"],"date":"2026-07-04"},{"title":"调整debian根分区为最大空间","permalink":"https://liangjinzhi.com/posts/resize-debian-root-partition/","content":"\r安装操作系统的时候配置错了，/home空间分配的空间占了大部分，需要调整为根分区使用最大空间。\r备份/home目录\r# 1. 临时备份 home 目录的数据到 /tmp\rsudo cp -a /home/* /tmp/ 2\u003e/dev/null\r# 2. 卸载 /home 挂载点\rsudo umount /home\r切换到其他目录，并停止相关进程，否则不能卸载/home\r# 杀掉所有占用 /home 的进程\rsudo fuser -vkm /home\r调整好后卸载/home\r# 1. 重新卸载\rsudo umount /home\r# 2. 删除 home 逻辑卷\rsudo lvremove -y /dev/mapper/vm--debian--13--vg-home\r# 3. 100% 扩容给根分区\rsudo lvextend -l +100%FREE /dev/mapper/vm--debian--13--vg-root\r# 4. 刷新文件系统\rsudo resize2fs /dev/mapper/vm--debian--13--vg-root\r# 5. 清理 fstab 挂载配置\rsudo sed -i '/vm--debian--13--vg-home/d' /etc/fstab\r这样就好了\r","description":"","author":null,"tags":null,"categories":["运维实践","技术笔记"],"date":"2026-07-04"},{"title":"关于博客本人","permalink":"https://liangjinzhi.com/posts/about-author/","content":"\r一名90后运维工程师。热爱折腾技术，通过优化脚本从而实现自动化大量减少日常的重复劳动。日常工作中很多工作内容容易高度重复，因此在这里进行总结，希望能对大家有所帮助。\rEmail：500063439@139.com\r微信号：ssssomeday\r","description":"","author":null,"tags":null,"categories":["关于"],"date":"2026-07-04"},{"title":"一套键鼠操作多终端","permalink":"https://liangjinzhi.com/posts/use-one-mouse-keyboard-across-devices/","content":"\r有时候只有一套键盘鼠标，但是有两个终端需要操作，频繁操作插拨移动键鼠不是很方便操作。这个时候如果可以通过应用程序解决这个问题，何乐而不为呢？\r这里就引出了input leap\rgithub上有介绍：Input Leap 是一款模拟 KVM 切换器功能的软件。传统的 KVM 切换器允许用户使用一套键盘和鼠标，通过旋转 KVM 切换器上的旋钮来控制多台计算机。Input Leap 则通过软件实现这一功能，用户只需将鼠标移动到屏幕边缘，或者按下某个按键即可切换到不同的系统。\r## 准备环境 {.wp-block-heading}\rserver:win11，inputleap,有鼠标键盘\rclient:debian13 ，,inputleap,无鼠标键盘\r## 下载链接 {.wp-block-heading}\rwindows-server\rdebian-client\r## 安装配置过程 {.wp-block-heading}\r### windows安装 {.wp-block-heading}\r没有什么特别就一路默认安装就好了。\r安装好，桌面生成快捷方式\r启动并配置Configure Server\u0026#8230;\r点进去\r把图标分别进行拖动，确认两个主机之间的位置，最好可以跟实际的屏幕的位置关系一致方便操作，我这里one是windows主机名，debian 是debian的主机名。双击可以修改主机名配置。\r### debian安装过程 {.wp-block-heading}\rsudo apt install ./InputLeap_3.0.2_debian12_amd64.deb -y\r#完成后直接启动\r\u0026lt;strong\u003einput-leap\u0026lt;/strong\u003e\r这样就完成了。\r## 排查思路 {.wp-block-heading}\r通过服务管理器查看日志\r如果中途有问题需要停止server并重新配置，排查思路，查看是否监听24800端口\rnetstat -ano |findstr :24800\r或者通过任务管理器重启服务进程\r","description":"","author":null,"tags":null,"categories":["运维实践"],"date":"2026-07-04"}]