Hugo 命令行操作基本指南

环境准备 # 安装 Hugo(Ubuntu/Debian) sudo apt install hugo # 验证安装 hugo version # 输出示例:hugo v0.154.5+extended linux/amd64 # 查看帮助 hugo help hugo new --help # 子命令帮助 站点管理 创建新站点 hugo new site myblog cd myblog 生成目录结构: myblog/ ├── archetypes/ # 文章模板(frontmatter 预设) ├── assets/ # 待处理的资源文件 ├── content/ # 文章内容(Markdown) ├── data/ # 数据文件(YAML/JSON/TOML) ├── layouts/ # 自定义模板 ├── static/ # 静态文件(图片、CSS、JS) ├── themes/ # 主题 ├── hugo.toml # 站点配置文件 └── public/ # 构建输出目录(生成后自动创建) 配置站点 编辑 hugo.toml: ...

2026年6月15日 · 3 分钟 · 523 字 · AIHugoBlog

Kubernetes:如何解决 k8s.gcr.io 拉取镜像失败问题

问题背景 由于网络限制,k8s.gcr.io 和 registry.k8s.io 在国内无法直接访问。在部署 Kubernetes 组件或安装 CSI、CNI 等插件时,经常会遇到: Error response from daemon: manifest for k8s.gcr.io/xxx not found: manifest unknown # 或 Failed to pull image "registry.k8s.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2" 方案一:域名替换(最简单,手动拉取时用) 将 k8s.gcr.io 或 registry.k8s.io 替换为国内可用的镜像站: 原始地址 替换为 k8s.gcr.io/xxx registry.lank8s.cn/xxx registry.k8s.io/xxx registry.lank8s.cn/xxx k8s.gcr.io/xxx m.daocloud.io/xxx registry.k8s.io/xxx m.daocloud.io/xxx 示例:NFS Subdir External Provisioner # 原始命令(会失败) docker pull registry.k8s.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2 # 替换为 lank8s.cn 镜像 docker pull registry.lank8s.cn/sig-storage/nfs-subdir-external-provisioner:v4.0.2 # 或使用 DaoCloud 镜像 docker pull m.daocloud.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2 # 拉取后重新打标签 docker tag registry.lank8s.cn/sig-storage/nfs-subdir-external-provisioner:v4.0.2 \ registry.k8s.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2 常用镜像站对比 镜像站 同步速度 稳定性 备注 registry.lank8s.cn ⚡ 快 ✅ 稳定 个人维护,长期可用 m.daocloud.io ⚡ 快 ✅ 稳定 DaoCloud 官方维护 gcr.mirrors.ustc.edu.cn 🐢 较慢 ⚠️ 有时断 中科大源 registry.aliyuncs.com/google_containers ⚡ 快 ✅ 稳定 阿里云,需拼接路径 方案二:配置 Docker / containerd 镜像加速(推荐,一劳永逸) Docker Engine 配置 编辑 /etc/docker/daemon.json: ...

2026年6月15日 · 2 分钟 · 320 字 · AIHugoBlog

Ollama 本地部署方法

1. 官网 https://ollama.com/ 2. 安装 curl -fsSL https://ollama.com/install.sh | sh 一键安装脚本会自动完成以下操作: 添加 Ollama APT 仓库 安装 Ollama 二进制文件 创建 ollama 系统用户 注册 ollama.service 系统服务 启动服务并设置开机自启 3. 环境配置 3.1 修改访问权限为所有 IP 默认 Ollama 只监听 127.0.0.1,局域网其他设备无法访问。修改为监听所有网络接口: vim /etc/systemd/system/ollama.service 在 [Service] 段下添加: Environment="OLLAMA_HOST=0.0.0.0" 重启服务: sudo systemctl daemon-reexec sudo systemctl restart ollama 3.2 更改模型存储位置 默认模型下载到 ~/.ollama/models/,系统盘空间不足时可迁移到数据盘: # 创建目标目录 mkdir -p /jgsteel/ollama # 修改目录所有者 chown -R ollama:ollama /jgsteel/ollama # 编辑服务配置 vim /etc/systemd/system/ollama.service 在 [Service] 段下添加: ...

2026年6月15日 · 2 分钟 · 262 字 · AIHugoBlog

PostgreSQL 新建只读查询用户(Read-Only User)

基础脚本 -- 创建用户 CREATE USER readonly WITH PASSWORD 'TJJe5CvU'; -- 授予连接数据库权限 GRANT CONNECT ON DATABASE jgsteel_prm TO readonly; -- 授予 schema 使用权限 GRANT USAGE ON SCHEMA public TO readonly; -- 授予现有表查询权限 GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly; -- 设置默认权限:未来新建的表也自动授予 SELECT ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly; 这个脚本能跑通,但有几个可以改进的地方。 生产环境强化版 -- ============================================ -- Create Read-Only User for PostgreSQL -- ============================================ -- Step 1: Create login role (idempotent) DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'readonly') THEN CREATE ROLE readonly WITH LOGIN PASSWORD 'TJJe5CvU'; RAISE NOTICE 'Role [readonly] created.'; ELSE RAISE NOTICE 'Role [readonly] already exists.'; END IF; END $$; -- Step 2: Grant CONNECT on target database GRANT CONNECT ON DATABASE jgsteel_prm TO readonly; -- Step 3: Switch to target database (run these inside the database) -- \c jgsteel_prm -- Step 4: Grant schema usage GRANT USAGE ON SCHEMA public TO readonly; -- Step 5: Grant SELECT on ALL existing tables GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly; -- Step 6: Set default privileges for future tables ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly; -- Step 7: (Optional) Grant SELECT on sequences if needed GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO readonly; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON SEQUENCES TO readonly; -- Step 8: (Optional) Revoke write permissions explicitly REVOKE INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public FROM readonly; 关键点解读 1. ALTER DEFAULT PRIVILEGES — 最容易遗漏的一步 GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly; 这条命令只对执行时已存在的表生效。未来新建的表不会自动获得权限。 ...

2026年6月15日 · 3 分钟 · 488 字 · AIHugoBlog

SQL Server 新建只读查询用户(Read-Only Query User)

基础脚本 创建一个只能执行 SELECT 查询的只读用户,标准做法如下: CREATE LOGIN onlyque WITH PASSWORD = '123456'; USE test; GO CREATE USER onlyque FOR LOGIN onlyque; USE test; GO GRANT SELECT ON SCHEMA::dbo TO onlyque; 这个脚本能跑通,但在生产环境下存在几个风险。 生产环境强化版 -- ============================================ -- Create Read-Only Query User for test database -- ============================================ -- Step 1: Create login at server level (with strong password) IF NOT EXISTS (SELECT 1 FROM sys.sql_logins WHERE name = 'onlyque') BEGIN CREATE LOGIN onlyque WITH PASSWORD = 'YourStr0ngP@ss2026' , DEFAULT_DATABASE = test , CHECK_POLICY = ON , CHECK_EXPIRATION = ON; PRINT 'Login [onlyque] created.'; END ELSE PRINT 'Login [onlyque] already exists.'; GO -- Step 2: Create database user USE test; GO IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE name = 'onlyque') BEGIN CREATE USER onlyque FOR LOGIN onlyque WITH DEFAULT_SCHEMA = dbo; PRINT 'User [onlyque] created in [test].'; END ELSE PRINT 'User [onlyque] already exists in [test].'; GO -- Step 3: Grant read-only permissions GRANT SELECT ON SCHEMA::dbo TO onlyque; -- Step 4: Explicitly deny write operations (defense in depth) DENY INSERT, UPDATE, DELETE ON SCHEMA::dbo TO onlyque; GO -- Step 5: Verify permissions SELECT dp.name AS principal_name, dp.type_desc, perm.permission_name, perm.state_desc, OBJECT_SCHEMA_NAME(perm.major_id) AS schema_name FROM sys.database_principals dp JOIN sys.database_permissions perm ON dp.principal_id = perm.grantee_principal_id WHERE dp.name = 'onlyque'; GO 关键改进点 1. 密码策略 — 拒绝弱口令 CHECK_POLICY = ON 强制使用 Windows 密码复杂度策略(大写 + 小写 + 数字 + 特殊字符,最少 8 位)。生产环境永远不要用 123456。 ...

2026年6月15日 · 2 分钟 · 330 字 · AIHugoBlog

Ubuntu 24.04 防火墙操作(iptables)

背景 Ubuntu 24.04 默认使用 nftables 作为底层防火墙,但 iptables 命令仍然可用(通过 iptables-nft 兼容层)。本文记录使用 iptables 管理端口的基本操作。 1. 查询当前开放的端口 iptables -L -n 输出示例: Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 如果想查看带行号的输出(方便后续删除),使用: iptables -L INPUT --line-numbers 2. 开启端口 2.1 添加规则 # 在 INPUT 链的第 5 条位置插入规则,放行 7777 端口 TCP 流量 iptables -I INPUT 5 -p tcp --dport 7777 -j ACCEPT 参数说明: ...

2026年6月15日 · 2 分钟 · 250 字 · AIHugoBlog

Ubuntu 虚拟机安装 OpenClaw(个人 AI 助手)

概述 OpenClaw 是一款个人 AI 助手工具,支持浏览器控制、系统操作、文件管理等功能。本文记录在 Ubuntu 虚拟机中安装 OpenClaw 的完整过程。 一、环境与前置准备 1.1 虚拟机配置要求 配置项 最低要求 推荐配置 CPU 2 vCPU 2-4 vCPU 内存 4 GB RAM 8 GB RAM 存储 20 GB SSD 40 GB+ SSD 系统 Ubuntu 22.04 LTS Ubuntu 22.04/24.04 LTS 网络 公网访问(可选) 稳定的外网连接 1.2 系统初始化和更新 # 更新系统软件包 sudo apt update && sudo apt upgrade -y # 安装必要工具 sudo apt install -y curl ca-certificates git sudo vim python3 make g++ libvips-dev 二、依赖环境安装 2.1 Node.js 安装 OpenClaw 依赖 Node.js 22+,建议提前安装: ...

2026年6月15日 · 2 分钟 · 272 字 · AIHugoBlog

Windows 如何实现重启后 C 盘自动还原(UWF 统一写入筛选器)

适用场景 🏫 学校机房 / 培训教室 — 学生每次登录都是干净环境 🏪 公共查询终端 / 自助机 — 防止用户随意修改系统 🧪 测试环境 — 每次重启自动还原,无需手动恢复快照 🏢 企业前台 / 展示机 — 保证系统长期稳定运行 前置条件 要求 说明 系统版本 Windows 10/11 专业版、企业版或教育版(家庭版不支持) 管理员权限 所有操作需在管理员模式下执行 数据备份 ⚠️ 启用前请备份 C 盘重要数据 操作步骤 1. 启用 UWF 功能 打开 控制面板 → 程序和功能 → 启用或关闭 Windows 功能,向下滚动找到 “设备锁定”,勾选并确认启用。 或者用 PowerShell 一键安装: # 管理员 PowerShell Enable-WindowsOptionalFeature -Online -FeatureName "Client-UnifiedWriteFilter" 安装完成后需要重启。 2. 启用 UWF 筛选器 以管理员身份打开 CMD,执行: :: 开启 UWF 筛选器 uwfmgr filter enable :: 仅保护 C 盘 uwfmgr volume protect c: 3. 重启生效 shutdown /r /t 0 重启后,C 盘的"重启还原"正式生效 — 所有对 C 盘的更改(新建文件、修改配置、安装软件)在重启后都会消失。 ...

2026年6月15日 · 2 分钟 · 253 字 · AIHugoBlog

禁止 22H2 版 Windows 10 出现 Windows 11 的跨版本升级提示

问题情况 近期微软为了强推 Windows 11,笔者的笔记本又出现了升级 Windows 11 的提示。烦人不说,还担心一不小心点错了,系统就给升了。 在更新界面点击暂停更新,设置延期时间后,系统暂未更新,但在系统更新界面还是有更新消息,如下: 感觉很烦人,而且暂停时间到了又会出现更新提示,不小心点错了就会给升了。禁用 Windows 更新可以解决,但禁用后系统又接收不到关键安全更新,不能保障系统安全。 问题解决 微软为保障企业客户的系统不会自动跨大版本升级,导致用户系统出现大面积兼容性问题,其实预留了版本控制通道,可以将 Windows 限制在特定版本内进行升级。 1. 检查当前 Windows 版本 可见当前版本为 Windows 10 22H2。 2. 修改组策略进行版本限制 单击开始菜单,在 Windows 系统工具中找到命令提示符: 输入 gpedit 打开本地组策略编辑器,依次展开: 计算机配置 → 管理模板 → Windows 组件 → Windows 更新 → 适用于企业的 Windows 更新 找到并双击 “选择目标功能更新版本”: 配置如下: 启用该策略 目标产品版本: Windows 10 目标功能更新版本: 22H2 点击确定保存。 3. 在注册表中核对验证 命令行中输入 regedit,打开注册表编辑器,依次展开到: ...

2026年6月15日 · 1 分钟 · 123 字 · AIHugoBlog

如何在 Ubuntu 22.04 上配置静态 IP 地址

步骤 1:打开终端 快捷键 Ctrl + Alt + T,或在应用程序菜单中搜索 “Terminal”。 步骤 2:检查网络接口名称 ip a 输出示例: 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 ... inet 192.168.1.xxx/24 ... 记录你的网络接口名称(如 ens33、eth0 或 enpXsX),下一步要用。 步骤 3:编辑 netplan 配置文件 Ubuntu 22.04 使用 netplan 管理网络,配置文件位于 /etc/netplan/: sudo vim /etc/netplan/00-installer-config.yaml 步骤 4:配置静态 IP 地址 原始内容(DHCP 模式): network: version: 2 renderer: networkd ethernets: ens33: dhcp4: true 修改为静态 IP(以 192.168.1.100/24,网关 192.168.1.1,DNS 114.114.114.114 为例): network: version: 2 renderer: networkd ethernets: ens33: dhcp4: false addresses: - 192.168.1.100/24 routes: - to: default via: 192.168.1.1 nameservers: addresses: - 114.114.114.114 - 8.8.8.8 注意: gateway4 在较新版本的 netplan 中已弃用,推荐使用 routes 方式配置网关。 ...

2026年6月15日 · 1 分钟 · 152 字 · AIHugoBlog