将 hexo 博客部署到 Cloudflare Pages

背景

以前做活动买了一台阿里云的轻量级服务器部署博客,近期快到了发现续费挺贵,就不打算续了,准备把博客迁移走。需求有几点,

  • 稳定且尽可能费用低,免费更好。
  • 访问速度好,尽可能保证国内海外都有好的访问体验。
  • 方便迁移和部署。

综合考虑之后,决定迁移到 Cloudflare 上来。公司不少服务使用的都是 CF,功能强大,同时对于个人来讲,它提供的免费服务也非常适合我们部署一些个人服务。不得不说, Cloudflare 真是一家有格局的公司。

Cloudflare 部署方式

我的博客是基于 hexo,Cloudflare 上有两种常见的部署方式。

  1. Cloudflare Pages 部署
    类似于 GitHub Pages 的静态网站托管服务,直接可以部署在 Cloudflare 的几个百数据中心上。

  2. Cloudflare Workers 部署
    Cloudflare Workers Site 可以与常见的静态网站生成器(Hexo、Hugo、Jekyll、Gatsby 等)兼容。Cloudflare Workers Site 是 Cloudflare Workers 提供了 KV Storage(Workers KV)以后开发出的一个功能,将静态文件存储在 KV Storage 中,Cloudflare Workers 从 KV 存储中获取文件并以 HTTP 响应的形式返回,实现静态网站托管。

这两种方式都尝试了下,相对而言,Cloudflare Pages 方式更简便一些,本文主要介绍此方式。

前期准备

注册 Cloudflare 账号。

在 Cloudflare 中添加需要管理的域名。
【Website】-【Add a site】,填入你的域名,如 immaxfang.com ,选择免费版本即可,然后根据提示修改 DNS 。
由于我的博客域名在阿里云,需要先在阿里云域名管理里进行修改,将域名的 DNS 设置为 Cloudflare 的。

【k8s 入门】Kubernetes v1.25 创建 ServiceAccount 未生成 Secret 问题

说明

kubernetes v1.24.0 更新之后进行创建 ServiceAccount 不会自动生成 Secret 需要对其手动创建。

网上的很多教程都没有创建 Secret 这步,应该是之前版本的教程,笔者使用的是 v1.25 版本,这部分需要特别添加。
以下以创建一个 jenkins 用户为例,演示下在新版本下如何操作。该用户的作用是后续会在 jenkins 中调度集群。

【踩坑日记】nginx server_name 配置多域名的坑

问题介绍

项目配置了多个域名,如下,php 代码中有获取 $_SERVER['SERVER_NAME'] 的值。

1
2
3
4
server {
server_name a.demo.com b.demo.com;
...
}

当访问 a.demo.com 时,其获取的值是符合预期的。但是当访问 b.demo.com 时,其获取的值还是 a.demo.com,导致代码中的判断出现错误。

说说 Redis 事务

Redis 事务简介

Redis 只是提供了简单的事务功能。其本质是一组命令的集合,事务支持一次执行多个命令,在事务执行过程中,会顺序执行队列中的命令,其他客户端提交的命令请求不会插入到本事务执行命令序列中。命令的执行过程是顺序执行的,但不能保证原子性。无法像 MySQL 那样,有隔离级别,出了问题之后还能回滚数据等高级操作。后面会详细分析。

Redis 事务基本指令

Redis 提供了如下几个事务相关的基础指令。

说说 Redis pipeline

Redis 客户端和服务端之间是采用 TCP 协议进行通信的,是基于 Request/Response 这种一问一答的模式,即请求一次响应一次。

普通模式

我们先来看下普通模式下,一条 Redis 命令的简要执行过程:

  • 客户端发送一条命令给 redis-server,阻塞等待 redis-server 应答
  • redis-server 接收到命令,执行命令
  • redis-server 将结果返回给客户端

Hexo 修改默认文章路径

修改文章默认 url

在 hexo 中新建的文章,默认的 url 路径是 年/月/日/标题 这样的格式,这其实是不利于 SEO 的。

可以通过修改配置文件 _config.yml 来调整 hexo 生成文章的展示链接。

默认的配置如下:

1
permalink: :year/:month/:day/:title/  

此处笔者修改为如下内容:

认识 Redis client-output-buffer-limit 参数与源码分析

概述

Redis 的 client-output-buffer-limit 可以用来强制断开无法足够快从 redis 服务器端读取数据的客户端。
保护机制规则如下:

  1. [hard limit] 大小限制,当某一客户端缓冲区超过设定值后,直接关闭连接。
  2. [soft limit] 持续时间限制,当某一客户端缓冲区持续一段时间占用过大空间时关闭连接。

该参数一般用在以下几类客户端中:

  • 普通 client,包括 monitor
  • 主从同步时的 slave client
  • Pub/Sub 模式中的 client

【Prometheus+Grafana 系列】监控 MySQL 服务

前言

前面的一篇文章已经介绍了 docker-compose 搭建 Prometheus + Grafana 服务。当时实现了监控服务器指标数据,是通过 node_exporter。Prometheus 还可用来监控很多服务,比如常见的 MySQL。本文就介绍如何通过 mysqld_exporter 来监控 MySQL 指标。

下载安装包

1
2
3
4
5
cd /opt
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz
tar xvf mysqld_exporter-0.14.0.linux-amd64.tar.gz
mv mysqld_exporter-0.14.0.linux-amd64 mysqld_exporter
mv /opt/mysqld_exporter /usr/local/