当前为烧饼博客的博客内容。查看全部
  • Showfom9
    近几年我越来越不爱用搜索引擎找博客了,搜一个技术问题,前几页经常是采集站、营销软文和批量生成的内容。 社交平台也差不多。算法觉得您喜欢什么,就追着喂什么。刷起来很省事,想顺着一个人的文章慢慢读下去却不容易。 我认识的那些博客作者其实还在写,只是不太容易在搜索和信息流里碰到他们。于是,我做了一个叫「博客大联盟」的网站。 1、博客大联盟是什么 博客大联盟 是一个独立博客目录,顺便聚合每个博客的 RSS。 它的前身是我手工维护的朋友博客友链聚合 peng.you。后来实在嫌手工维护太麻烦,干脆写了个小系统,把博客名片和 RSS 聚合都自动化了。 每个博客都有一张名片,上面是名称、作者、简介、标签和最新文章。系统定时读取 RSS,新文章按照发布时间排列。没有猜你喜欢,也没有什么神奇的推荐算法,您可以翻目录、看标签,或者直接搜博客名称和作者。 目前暂时没打算把这货做成另一个信息流平台。先把各处的独立博客放到一个目录里,让大家能互相找到,这就够了。 2、怎么加入博客大联盟 整个流程是登录、填写资料、自动检查、验证域名,最后等管理员审核。 2.1 登录 打开 bo.ke,使用 GitHub 或 Go…
  • Showfom8
    这篇文章从一次博客重构说起,反思这些年从 WordPress、静态博客到 AI vibe coding 的不断折腾。技术和工具当然能让博客更快、更漂亮,但它们终究只是载体。真正能留下来的,不是框架、封面图或动画,而是一个人真实写下的文字和思考。与其追逐每一个新工具,不如回归初心,慢慢写博客,让文字重新成为博客的核心。 前言 从大学开始算起,本人写博客也快 20 年了。 这 20 年里,我见过各种各样的博客站点,也见过不少小伙伴从入坑到弃坑,再入坑,再弃坑。有的人写博客,是为了记录技术和生活上的点滴;有的人写博客,是为了 SEO,提高排名,顺便推广自己的产品;有的人写博客,是为了赚钱;更多的人,可能和我一样,纯属折腾。 从折腾 WordPress 主题和插件,到折腾静态化 HTML 博客程序,再到如今用 AI vibe coding 定制自己的博客系统,工具一代一代换,框架一轮一轮火。等夜深人静的时候,你大概也应该停下来问问自己:写博客的目的到底是什么? 是为了把网站做得更炫吗?是为了用上最新的框架吗?是为了让 Lighthouse 跑满分吗?还是为了把脑子里那些乱七八糟的想法,尽量诚实…
  • Showfom5
    本文将指导如何升级 Ubuntu 24.04 Noble Numbat 到 Ubuntu 26.04 Resolute Raccoon。 相关教程:Ubuntu 22.04 Jammy 升级 Ubuntu 24.04 Noble。 准备工作 除非你是物理服务器,以及没有用过奇奇怪怪定制或修改的内核的 KVM 构架的 VPS 和云主机,否则升级大版本更新内核是有一定机率导致 Grub 加载失败的,切记备份重要数据! OpenVZ 和 LXC 构架的 VPS 是无法升级的,因为他们没有自己独立的内核 再强调一遍,一定要备份重要数据! Ubuntu 26.04 LTS 已经正式发布,不过 Ubuntu LTS 版本的自动升级提示通常会等到第一个小版本发布后才会开放。如果你在 Ubuntu 26.04.1 LTS 发布前从 Ubuntu 24.04 LTS 升级,do-release-upgrade 需要加上 -d 参数。 以下操作需要在 root 用户下完成,请使用 sudo -i 或 su root 切换到 root 用户进行操作 更新系统 首先需要更新你当前的系统 apt update …
  • Showfom
    本文介绍在 WSL 2 中使用 Docker 的桥接模式(bridge network)访问 HTTPS 时出现超时问题的解决方法。 最近一直在 Windows 下使用基于 WSL 2 的 Debian 进行开发。许多场景下需要使用 Docker 构建镜像,但过程中遇到一个奇怪的问题,在 Docker 容器内部访问 HTTP 站点时一切正常: $ docker run --rm curlimages/curl time curl -s http://ip.gs 192.0.2.2 real 0m 0.02s user 0m 0.00s sys 0m 0.00s 一旦切换为 HTTPS,访问就会明显变慢,并且有一定概率出现超时: $ docker run --rm curlimages/curl time curl -s https://ip.gs 192.0.2.2 real 0m 6.52s user 0m 0.00s sys 0m 0.00s 然而,如果将 Docker 切换到 Host 模式(--network=host),访问又恢复正常: $ docker run --rm -…
  • Showfom
    本文将介绍在 Debian 或 Ubuntu 下使用 nginx-acme 自动签发并配置 SSL 证书的方法。 本文适合 Debian Stable 和 Ubuntu LTS,请使用 root 用户进行操作。 1、什么是 nginx-acme nginx-acme 是 Nginx 官方开发的基于 ACME 协议自动签发 SSL 证书的模块,隔壁 Caddy 都出了几百年的功能, Nginx 也终于赶上了。 和 Nginx 使用 C 语言开发不同,这个模块是用 Rust 语言开发的,这里就不做评价。 这个模块支持 RFC8555、RFC8737、RFC8738 和 draft-ietf-acme-profiles 等规范,目前我实际测试下来已经基本可以用于生产环境。 2、安装 N.WTF 这里我们使用烧饼博客打包的 N.WTF,这个项目已经集成了 nginx-acme 模块,可以做到开箱即用。 首先,安装一些必要的软件包: sudo apt update sudo apt upgrade -y sudo apt install curl vim wget gnupg dpkg apt-…
  • Showfom
    本文将介绍使用 acme.sh 配置 Let's Encrypt 为 IP 地址签发 SSL 证书。 之前写过一篇使用 acme.sh 签发证书的教程,但在很长一段时间里,Let's Encrypt 只能给域名签发证书。 经过几个月的测试之后,现在终于可以对 IP 地址 下手了。 为什么要给 IP 签发证书 在很多场景下,我们并不一定需要域名,但确实需要 HTTPS。比如: DNS over HTTPS(DoH)服务无需依赖域名解析 直接通过 IP 提供 DoH 服务,避免「为了安全先做一次不安全的域名解析」这种哲学问题。 Web 服务默认站点隐藏真实域名 默认站点只暴露 IP,不暴露真实域名,顺便还能挡掉一部分不太礼貌的爬虫。 临时服务或测试环境 临时起个服务,只想加个锁,不想再去 DNS 那边折腾。 避免证书透明日志(Certificate Transparency Log)暴露域名,保护隐私 有些域名不太想出现在公开日志里,低调一点总是好的。 准备工作 首先更新 acme.sh 到最新版本: acme.sh --upgrade 因为 IP 证书目前只能通过 http-01 和 t…
  • Showfom
    RDAP.SS 是一个基于 RDAP 协议的 Whois 查询网站,本文介绍 RDAP 协议以及如何使用。 1、什么是 RDAP 协议? RDAP,全称 Registration Data Access Protocol,由 IETF(互联网工程任务组)制定,主要用于查询以下注册信息: 域名(Domain) IP 地址(IPv4 / IPv6) ASN(自治系统号) 它定义在 RFC 7480、7481、7482、7483、7484 等系列标准中。 2、RDAP 和 Whois 协议的区别 以下是对两者主要区别的总结: 比较项目 WHOIS RDAP 传输协议 基于 TCP 文本协议 基于 HTTPS RESTful API 数据格式 纯文本、非结构化 JSON 格式、结构化 国际化支持 差,编码不统一 完全支持 UTF-8 安全性 无加密、无认证 支持 HTTPS、OAuth 分布式查询 依靠人工跳转 内置 bootstrap 机制,可自动重定向至正确注册局 标准化程度 各注册局格式不同 格式统一,易于机器读取与解析 在传统的 Whois 协议中,用户需要给 Whois 服务器的 4…
  • Showfom
    本文将指导如何在 Debian 下使用 extrepo 配置第三方软件源。 什么是 extrepo? extrepo 用于管理 Debian 中的外部软件源。 在没有 extrepo 之前,想要使用未被 Debian 官方打包的软件,用户通常需要手动编写 APT 配置文件、以 root 身份运行未经签名的脚本,或安装一个包含所有系统配置的未签名 .deb 包。 遗憾的是,这些方法都不是很安全。 打个比方,我们要添加 Docker 的软件源,有三种方式。 第一种是传统的 One-Line Style: curl -sSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor > /usr/share/keyrings/docker-ce.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-ce.gpg] https://download.docker.com/linux/debian $…
  • Showfom
    本文将介绍在升级 Debian 系统后,GitLab 的 PostgreSQL 数据库无法正常启动的问题。 背景前提 本文的 GitLab 是基于官方源安装的,具体安装和升级方法限于篇幅,不再阐述。 我们从 Debian 11 升级到 Debian 12 后,再更新 GitLab 会发现如下报错: gitlab [execute] WARNING: database "postgres" has a collation version mismatch DETAIL: The database was created using collation version 2.31, but the operating system provides version 2.36. 或者从 Debian 12 升级到 Debian 13 后更新 GitLab 也会有如下报错: WARNING: database “gitlabhq_production” has a collation version mismatch DETAIL: The database was created using …
  • Showfom
    本文将指导如何升级 Debian 12 Bookworm 到 Debian 13 Trixie。 相关教程:Debian 11 Bullseye 升级 Debian 12 Bookworm。 准备工作 除非你是物理服务器,以及没有用过奇奇怪怪定制或修改的内核的 KVM 构架的 VPS 和云主机,否则升级大版本更新内核是有一定机率导致 Grub 加载失败的,切记备份重要数据! OpenVZ 6 和 LXC 构架的 VPS 是无法升级的,因为他们没有自己独立的内核 再强调一遍,一定要备份重要数据! 以下操作需要在 root 用户下完成,请使用 sudo -i 或 su root 切换到 root 用户进行操作 更新系统 首先需要更新你当前的系统 apt update apt upgrade -y apt full-upgrade -y apt autoclean apt autoremove -y 如果内核更新了,可以重启让最新的内核生效,也可以直接进行升级。 升级系统 首先更新 apt 源,替换 bookworm 为 trixie: sed -i 's/bookworm/trixie/g…
  • Showfom
    本文将指导如何升级 Ubuntu 22.04 Jammy Jellyfish 到 Ubuntu 24.04 Noble Numbat。 相关教程:Ubuntu 20.04 Focal Fossa 升级 Ubuntu 22.04 Jammy Jellyfish。 准备工作 除非你是物理服务器,以及没有用过奇奇怪怪定制或修改的内核的 KVM 构架的 VPS 和云主机,否则升级大版本更新内核是有一定机率导致 Grub 加载失败的,切记备份重要数据! OpenVZ 和 LXC 构架的 VPS 是无法升级的,因为他们没有自己独立的内核 再强调一遍,一定要备份重要数据! 以下操作需要在 root 用户下完成,请使用 sudo -i 或 su root 切换到 root 用户进行操作 更新系统 首先需要更新你当前的系统 apt update apt upgrade -y apt dist-upgrade -y apt autoclean apt autoremove -y 如果内核更新了,可以重启让最新的内核生效,也可以直接进行升级。 升级系统 这里有两种升级系统的方法,第一种是使用 do-rele…
  • Showfom
    本文将指导如何在 Linux 下使用 Docker 和 Docker Compose 安装 FreshRSS 开源 RSS 聚合器服务。 PS:本文同时适用于任何可安装 Docker 的 Linux 发行版。 什么是 FreshRSS? FreshRSS 是一款免费且开源的 RSS 聚合器,设计用于帮助用户集中管理和阅读来自不同网站的新闻源。它具有高效、轻量的特点,并且支持多用户使用。 安装 Docker 和 Docker Compose Debian 和 Ubuntu 系统请参考本站教程。 其他 Linux 系统可以使用 Docker 官方的脚本安装 Docker 和 Docker Compose: curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh 安装 FreshRSS 这里我们使用 PostgreSQL 数据库,首先创建一个目录用于存放 FreshRSS 的配置文件和数据库文件: mkdir -p /opt/freshrss cd /opt/freshrss 然后创建一个 docker-comp…
  • Showfom
    本文将指导如何升级 Debian 11 Bullseye 到 Debian 12 Bookworm。 相关教程:Debian 10 Buster 升级 Debian 11 Bullseye。 准备工作 除非你是物理服务器,以及没有用过奇奇怪怪定制或修改的内核的 KVM 构架的 VPS 和云主机,否则升级大版本更新内核是有一定机率导致 Grub 加载失败的,切记备份重要数据! OpenVZ 6 和 LXC 构架的 VPS 是无法升级的,因为他们没有自己独立的内核 再强调一遍,一定要备份重要数据! 以下操作需要 root 权限,本文命令均已带上 sudo 前缀,请确保当前用户拥有 sudo 权限;或者直接使用 root 用户操作并省略命令中的 sudo。 更新系统 首先需要更新你当前的系统 sudo apt update sudo apt upgrade -y sudo apt dist-upgrade -y sudo apt autoclean sudo apt autoremove -y 如果内核更新了,可以重启让最新的内核生效,也可以直接进行升级。 升级系统 首先更新 apt 源,替…
  • Showfom
    本文将指导如何在 Debian 和 Ubuntu 开启 SSH 的 RSA Key 登录。 以下操作需要 root 权限,本文命令均已带上 sudo 前缀,请确保当前用户拥有 sudo 权限;或者直接使用 root 用户操作并省略命令中的 sudo。 自从 OpenSSH 8.3 开始,RSA Key 登录默认被禁用,并被认为不安全。 所以自从 Ubuntu 22.04 和 Debian 12 开始,如果某些古老的业务需要使用 RSA Key 登录,你需要手动开启 RSA Key 登录。 开启 RSA Key 登录 我们不需要修改 /etc/ssh/sshd_config 这个系统默认的 SSH 配置文件,只需要添加一个 /etc/ssh/sshd_config.d/enable_rsa_keys.conf 配置文件即可: sudo bash -c 'cat > /etc/ssh/sshd_config.d/enable_rsa_keys.conf << EOF HostKeyAlgorithms +ssh-rsa PubkeyAcceptedKeyTypes +ss…
  • Showfom
    以下操作需要 root 权限,本文命令均已带上 sudo 前缀,请确保当前用户拥有 sudo 权限;或者直接使用 root 用户操作并省略命令中的 sudo。其中 docker 命令未加 sudo:建议把当前用户加入 docker 用户组(sudo usermod -aG docker $USER,重新登录生效),或自行为 docker 命令加上 sudo。 1、什么是 HTTP/3 和 QUIC? HTTP/3 是一种基于 QUIC (Quick UDP Internet Connections) 协议的 HTTP 协议版本,它是 HTTP/2 的后继者,旨在改进 Web 性能和安全性。 HTTP/3 与之前的 HTTP 协议有很大的不同,最明显的区别是它使用 QUIC 协议而不是 TCP 协议来传输数据。 QUIC 是一种由 Google 开发的协议,基于 UDP,它在保持安全性的同时提供更快的连接和更少的延迟。与 TCP 不同,QUIC 允许多个请求同时在同一连接上进行,从而减少了网络拥塞和握手延迟的影响。 总的来说,HTTP/3 的设计目标是通过减少延迟和提高性能,为 Web …
  • Showfom
    本文将指导使用 xcaddy 自定义编译 Caddy。 以下操作需要 root 权限,本文命令均已带上 sudo 前缀,请确保当前用户拥有 sudo 权限;或者直接使用 root 用户操作并省略命令中的 sudo。 上一篇文章介绍了如何安装使用 Caddy,但是 Caddy 的功能有时候并不能满足业务需求,如果想要使用更多的功能,就需要自定义编译 Caddy。 xcaddy 是 Caddy 官方制作的用于自定义编译 Caddy 的工具,它可以帮助我们快速的编译出符合自己需求的 Caddy。 安装 xcaddy 我们按照官方的安装方法,首先,安装一些必要的软件包: sudo apt update sudo apt upgrade -y sudo apt install curl vim wget gnupg dpkg apt-transport-https lsb-release ca-certificates 然后按照官方教程安装 Go: wget https://go.dev/dl/go1.24.5.linux-amd64.tar.gz sudo rm -rf /usr/local/…
  • Showfom
    本文将指导如何在 Debian 和 Ubuntu 下安装 Caddy。 以下操作需要 root 权限,本文命令均已带上 sudo 前缀,请确保当前用户拥有 sudo 权限;或者直接使用 root 用户操作并省略命令中的 sudo。 什么是 Caddy? Caddy 是一款开源的 Web 服务器,它设计简单,易于使用,并且有很多强大的功能。它可以自动处理 TLS (SSL),并且可以使用中间件扩展功能。 Caddy 采用简单的配置语法,可以轻松配置路由,反向代理,重定向,缓存和其他功能。它还支持 HTTP/2,QUIC (HTTP/3) 和 WebSockets 协议,可以提供快速的网络性能。 为什么尝试 Caddy? 对我来说比较简单的原因是 nginx-quic 这个项目一直未发布正式版,想要一款简单的能支持 HTTP/3 的 Web 服务器软件,目前来说 Caddy 的选择是最合适的。 Caddy 还支持自动化证书,对于懒人来说特别合适。 安装 Caddy 我们按照官方的安装方法,首先,安装一些必要的软件包: sudo apt update sudo apt upgrade -y …
  • Showfom
    本文将指导如何在 Debian 11 和 Ubuntu 22.04 下手工添加 Swap 分区。 以下操作需要 root 权限,本文命令均已带上 sudo 前缀,请确保当前用户拥有 sudo 权限;或者直接使用 root 用户操作并省略命令中的 sudo。 准备工作 首先,检查你的系统是否已经有 Swap 分区: sudo swapon -s 或 free -m 如果没有返回结果或者 free -m 中 Swap 一列数值是 0,则表示你的系统没有 Swap 分区。 创建 SWAP 分区 我们可以使用 fallocate 命令创建一个 1GB 大小的 Swap 分区: sudo fallocate -l 1G /swapfile 如果这个命令无法使用,请安装 util-linux 包: sudo apt install util-linux 然后设置这个文件的权限: sudo chmod 600 /swapfile 然后激活 SWAP 分区 sudo mkswap /swapfile sudo swapon /swapfile 此时,你可以使用 sudo swapon -s 或 fre…
  • Showfom
    本文将介绍在 Nginx 配置简易 A/B 测试的姿势。 背景前提 有时候我们需要简单的做一些 A/B 测试,并不需要复杂的判断条件,这时候我们可以用到 Nginx 的 ngx_http_split_clients_module 模块。 安装 ngx_http_split_clients_module 模块 一般来说这个模块已经自带,如果没有的话推荐安装我们打包的 N.WTF 配置 Nginx 这里举例,我们想要 20% 的用户跳转到网址 https://example.com/,30% 的用户跳转到网址 https://example.org/,剩下的跳转到网址 https://examle.edu/: split_clients "${remote_addr}AAA" $variant { 20% https://example.com/; 30% https://example.org/; * https://example.edu/; } server { listen 80; listen [::]:80; server_name _; return 302 ${varian…
  • Showfom
    本文将指导在 KDE Plasma 下关闭单击打开文件或文件夹。 前言 对于从 Windows 或 macOS 迁移到 Linux 的用户,需要花费很多时间来适应各种不习惯的操作,在 KDE Plasma 下,有一个默认设置,单击即可打开某个文件或者文件夹,这让很多用户感到非常不适应。 解决方法 参考这个帖子,打开 System Settings -> Workspace Behavior -> General Behavior,然后找到 Clicking files or folders,把默认的 Opens them 改成 Selects them: 好了,解决了这个非常不习惯的操作。