Sink

沉舟侧畔千帆过

  • 主页
  • 归档
  • 书籍
  • 书签
  • 技能树
  • 工具箱
  • LeetCode
  • 关于我
所有文章 友情链接 +1s

  • 主页
  • 归档
  • 书籍
  • 书签
  • 技能树
  • 工具箱
  • LeetCode
  • 关于我

Ubuntu 的软件源新格式 —— deb822

Published on 2025 / 02 / 06

Ubuntu 24.04 发布快一年,新安装的系统开始采用这个版本。发现这个新 LTS 的软件源配置文件变更为 DEB822 格式。默认源的路径为 /etc/apt/sources.list.d/ubuntu.sources。

清华源对这个的支持最完善,通过勾选还可以直接生成对应的配置文件。

https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/

  • ubuntu

展开全文 >>

续期过期 GPG 密钥

Published on 2024 / 03 / 22

git 提交提示 error: gpg failed to sign the data,发现 GPG 密钥过期。上次签发场景还历历在目,一晃几年就过去了。

本机 gpg 密钥相关的数据都在 ~/.gnupg 目录下,这次续期之后,可以备份这个目录,以后换电脑或者重装系统,之前的密钥数据都可以恢复。

续期流程如下:

  1. 查看密钥列表,找到过期的密钥 ID
  2. 续期密钥

查看密钥列表

终端执行

1
gpg --list-keys

列出的密钥列表中,ID后 8 位可以当成简化版密钥 ID,供后续使用。这里是 B0AF5E1C

1
2
3
4
5
/root/.gnupg/pubring.kbx
------------------------
pub rsa4096 2021-03-22 [SC] [expired: 2024-03-21]
5233A9D383EAD23BAEF6CB2D8CE00782B0AF5E1C
uid [ expired] ldsink <admin@ldsink.com>

续期密钥

进入 gpg 编辑模式

1
gpg --edit-key B0AF5E1C

输入 expire 命令,选择新的过期时间,这里再续 5 年

1
2
3
4
5
6
7
8
9
10
11
gpg> expire
Changing expiration time for the primary key.
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0) 5y
Key expires at Thu 22 Mar 2029 11:41:39 AM CST
Is this correct? (y/N) y

续期成功后,退出编辑模式。在查看密钥列表,可以看到密钥过期时间已经更新。备份一下数据,这 5 年这个密钥可以继续安心的签名。

  • gpg

展开全文 >>

PPPoE 拨号配置 IPv6

Published on 2023 / 06 / 22

背景

家里网络从联通更换到了移动,移动没有公网 IPv4 但是有公网 IPv6。联通时代搞定了 IPv4 之后停止了探索,这次目标搞定 IPv6。

IPv6 的知识来自于网络资料和 IPv6 和 IPv4 的主要区别?,配置过程主要参考 X86 软路由配置 IPv6 踩坑小记。

思路

目前的网络环境为:

移动光猫(桥接) ——> 小服务器(PPPoE 拨号及网关) ——> 其他设备(有线接入的台式机、无线AP的路由器)

小服务器负责 PPPoE 拨号,及使用 Dnsmasq 处理 IPv4 的 DHCP 和 DNS。其中 WAN 口接移动光猫,两个 LAN 口分别接台式机和无线路由器。无线路由器配置成 AP 模式作为一个有无线功能的交换机用。

IPv6 和 IPv4 区别很多,主要点是:

  1. 不需要 NAT,除开 fe80:: 这类保留网段,其他都能当公网用
  2. 分配 IP 的方式很多,考虑兼容性 SLAAC 应该是最好的

查了一圈资料,按照现在的网络拓扑结构,实现目标需要完成的步骤是:

  1. 小服务开启 IPv6 的转发
  2. PPPoE 拨号支持 IPv6,这样小服务器本身支持 IPv6
  3. PPPoE 能正确申请 IPv6 的 PD,然后绑定到网桥上,这样 LAN 口的设备可以使用 IPv6
  4. 正确配置通告报文(Router Advertisement),这样内网的设备生成 IPv6 地址后知道去何处通知自己存在

操作

启用 IPv6 转发

在 /etc/sysctl.conf 添加上:

1
2
3
4
5
6
7
8
net.ipv6.conf.all.forwarding=2
net.ipv6.conf.default.forwarding=2

net.ipv6.conf.all.accept_ra=2
net.ipv6.conf.default.accept_ra=2

net.ipv6.conf.all.use_tempaddr=2
net.ipv6.conf.default.use_tempaddr=2

上述三段分别为开启转发、接受 RA 和支持临时地址

在 pppoeconf 启用 IPv6

在 /etc/ppp/options 添加上

1
+ipv6

上述为在全局配置启用,也可以在拨号的配置文件 /etc/ppp/peers/dsl-provider 内添加。

使用 wide-dhcpv6-client 申请 PD

给内网设备也分配对应的 IPv6 地址使用 Prefix delegation(前缀代理),简称 PD。简单来说就是我们向我们的上级路由发送 PD 请求,上级路由会分给我们一个前缀长度小于等于64的网段,然后我们就能将个网段划分成一个或者一些 /64 的网段接着向局域网内的设备分配,此时局域网内的设备的上级路由就是我们的网关。

为了实现这个功能,我们需要使用 wide-dhcpv6-client。

安装命令如下,因为使用 pppoeconf 拨号,所以安装 wide-dhcpv6-client 的时候要选择 ppp0 网卡作为申请 PD 的网卡

apt install wide-dhcpv6-client

如果开启了防火墙,需要开放 dhcpv6-client 服务对应的端口 546。我使用的 ufw,命令如下:

ufw allow dhcpv6-client

编辑 /etc/wide-dhcpv6/dhcp6c.conf,增加

1
2
3
4
5
6
7
8
9
10
interface ppp0 {
send ia-pd 0;
};

id-assoc pd 0 {
# use the interface connected to your LAN
prefix-interface br {
sla-id 1;
};
};

设置之后重启服务,检查 br 网卡是否分配到 Global 的 IPv6 地址

service wide-dhcpv6-client restart

使用 Dnsmasq 分配 IPv6 地址

最后需要向局域网设备发送 RA ,使用 SLAAC 来分配IP地址,这里我们使用了 Dnsmasq。在 Dnsmasq 的配置文件里加上:

1
2
3
enable-ra
dhcp-range=::,constructor:br0,ra-only,slaac
dhcp-option=option6:dns-server,[2400:3200::1],[2400:3200:baba::1] # 使用阿里 DNS

重启服务使配置生效

service dnsmasq restart

测试

完成配置后,访问 https://ipw.cn/ipv6/ 或者 https://test-ipv6.com/ 测试 IPv6 连接情况

  • IPv6

展开全文 >>

Linux 系统创建加密磁盘并自动挂载

Published on 2023 / 03 / 05 , Updated on 2023 / 04 / 01

现有一块移动硬盘通过 USB 接入小主机。目标:实现这个盘自动加密挂载到 Ubuntu,供其他服务使用。

创建磁盘分区和格式化

工具有 fdisk 和 parted,以往主要用 fdisk,所以这次用 parted,同时也尝试一下新的文件系统。

首先确定磁盘的信息。

parted -l

可以看到如下内容

1
2
3
Model: WD My Passport 0748 (scsi)
Disk /dev/sda: 2000GB
Sector size (logical/physical): 512B/512B

/dev/sda 这个设备就是我们的移动硬盘了。使用 parted 选择这个磁盘,开始操作。

parted /dev/sda

全新使用,磁盘上没有数据,可以随意修改。因为容量比较大,使用新的分区表类型,调整磁盘分区表到 gpt。

(parted) mklabel gpt

个人习惯把整个磁盘作为一个分区。

(parted) mkpart primary 0% 100%

parted 的操作就完成了。退出前可以用如下命令检查效果。

(parted) print

这样就建立好了磁盘分区。

磁盘加密并自动挂载

加密部分主要参考Linux「磁盘加密」完全指南,依赖系统软件 cryptsetup。

操作系统启动时候涉及磁盘挂载的顺序为:

  1. 前置加载
  2. 基于 /etc/crypttab 解密被加密的设备
  3. 基于 /etc/fstab 挂载磁盘到目录
  4. 后续加载

所以要实现自动挂载加密盘的思路就是:

  1. 在 /etc/crypttab 自动解密加密磁盘
  2. 在 /etc/fstab 自动挂载解密盘

查找资料过程中发现前几年 Linux 创建加密盘还比较麻烦,好在现在有 cryptsetup,方便简单了很多。确定思路就开始做。

创建加密密钥

用密码不太友好,短了不安全,长了记忆成本高。使用密钥文件来进行加密解密,再妥善管理备份密钥文件。

通过 dd 命令使用随机数生成一个 4KB 的密钥文件,保存到 /etc 目录下:

dd if=/dev/urandom of=/etc/cryptfs.key bs=1k count=4

创建加密磁盘

使用这个密钥,加密磁盘:

cryptsetup luksFormat /dev/sda1 /etc/cryptfs.key

1
2
3
4
5
WARNING!
========
This will overwrite data on /dev/sda1 irrevocably.

Are you sure? (Type 'yes' in capital letters):

根据提示输入大写的 YES 确认操作。这里是空磁盘,创建非常快。创建完成之后,可以使用 cryptsetup open 打开加密磁盘,解密的设备位于 /dev/mapper 目录下。

cryptsetup open –key-file=/etc/cryptfs.key /dev/sda1 sda1

格式化加密分区

现在加密分区就被挂载到了 /dev/mapper/sda1,使用 mkfs 格式化分区,通过补全发现 Ubuntu 现在支持的分区如下:

1
2
mkfs         mkfs.btrfs   mkfs.ext2    mkfs.ext4    mkfs.minix   mkfs.ntfs    mkfs.xfs
mkfs.bfs mkfs.cramfs mkfs.ext3 mkfs.fat mkfs.msdos mkfs.vfat

平时使用 ext4,这次尝试以下 btrfs。直接使用对应文件系统的命令,需要磁盘分区地址作为参数:

mkfs.btrfs /dev/mapper/sda1

自动解密并挂载

下面配置启动时候的默认解密,编辑 /etc/crypttab,增加如下内容

1
2
# <target name> <source device>         <key file>      <options>
sda1 /dev/sda1 /etc/cryptfs.key

<target name> 的部分,会作为 /dev/mapper 目录下映射出来的设备名称。设置完解密部分后,再将解密设备进行挂载。

<source device> 是挂载的设备,简单的可以直接用 /dev/sda1,但是这个在系统重启或者插入其他的磁盘的时候,可能发生变动。可以改成 uuid 的方式,更加保险。执行如下命令获取硬盘 uuid

sudo blkid

这个命令会显示当前全部的设备,找到我们这块磁盘的部分。

1
/dev/sda1: UUID="89c83d74-6f09-4210-90a1-5718d680b9dd" TYPE="crypto_LUKS" PARTLABEL="primary" PARTUUID="718e439b-f52f-427c-9571-999784104ef6"

然后就可以使用这个 UUID 来更新 /etc/crypttab 文件,下次就会基于 UUID 来处理设备,只要是这块硬盘,换 USB 插口也不会有问题。

1
2
# <target name> <source device>                            <key file>      <options>
sda1 UUID=89c83d74-6f09-4210-90a1-5718d680b9dd /etc/cryptfs.key

搞定了解密部分,剩下的就是编辑 /etc/fstab 自动把解密后的设备挂载到系统目录,供软件正常使用。增加如下内容

1
2
# <file system>  <mount point>  <type>  <options>       <dump>  <pass>
/dev/mapper/sda1 /mnt/sda1 btrfs defaults 0 0

完成这些操作,系统启动的时候可以自动解密,然后再将解密后的设备挂载到 /mnt/sda1,任务完成。

一些额外的工作

Backup LUKS header and keyslot area

未加密的情况下,机械硬盘某些扇区损坏,只会丢失这部分数据。加密的情况下,如果某些损坏的扇区刚好是 LUKS header 的数据,那会因为 LUKS 损坏而无法解密,造成整块磁盘的数据都不可用。

所以这个唯一的入口数据,需要做好必要的备份。参考 How to backup and restore LUKS header on Linux,主要使用 luksHeaderBackup。设备使用 /dev/disk/by-uuid/下拼接 UUID 的定位。

cryptsetup luksHeaderBackup /dev/disk/by-uuid/89c83d74-6f09-4210-90a1-5718d680b9dd –header-backup-file /mnt/backup.bin

这个文件备份到云上或者安全的位置,完成备份。

  • how-to

展开全文 >>

2022 总结和 2023 展望

Published on 2023 / 01 / 23

辞旧迎新,新年可期,兔年大吉!总结 2022,展望 2023。

微观个体

工作上的一些技术细节不赘述,整体上今年在开发环境和计算机网络这两块折腾的很开心。

开发环境

我是 Linux 党,但是因为开会需求,目前主系统是 Windows。之前使用 IDE 直接连接 WSL 做开发,近似 Linux 体验。缺点是 IDE 是以网络方式连接 WSL 内的文件系统,构建缓存索引的操作都非常慢且大量占用系统资源,每次切换分支带来文件变动,IDE 都需要大量时间来更新索引和缓存。

年初开始用 VMWare 虚拟机,在虚拟机内再装 IDE 然后进行开发。我机器配置不低,这样开发也还算顺畅。缺点也有:

  1. 系统资源占用多,降低续航
  2. Ubuntu 里面拼音输入法不好用,容易和 IDE 冲突,造成卡死

上面两个缺点属于可接受的范围,所以今年主要是这么做的。

最近 JetBrains Gateway 开始 beta。集中式的远程开发在工具方面终于开始就绪,年末进行了切换。

Visual Studio Code 也支持类似的功能

现在我的开发方式为本机的 IDE连接 本机 WSL / 远端服务器(有 IDE 引擎 + git 仓库)。目前远端为本机的 WSL,年后打算自己在家组一台服务器作为远端,把本机的作为备份。正常有网的情况都能连接服务器进行开发。服务器计算能力、网络环境都好于笔记本,这样的开发体验应该会不错。

这个方式目前的缺点是配置无法正常同步,并且部分插件无法在 Gateway 里面使用。官方有这个相关的 Issue,清楚这个问题,但是目前没有支持的计划。这类远端开发架构的产品刚推出,我理解 JetBrains 目前肯定有很多更加重要的问题需要先解决。希望他们工作顺利,之后有资源来完善这块,让我之后有更加好的体验。

计算机网络

今年对计算机网络这块理解也更加深入,细分成 实例 和 抽象 两块。

实例

实例指组成计算机网络的各个独立设备、配件的概念。2021年末自己组了主机,当时诉求还只是为了让显卡带的动 4K 屏幕。今年随着配件降价,和想帮同事装机,看着各种介绍科普视频,对各个配件的了解反而比去年自己装机的时候有了大的进步。总结如下:

  • CPU: 制程、功耗、架构、A/I 家的代数和特点
  • 内存:DDR 区别,频率,时序
  • 显卡:位宽、显存、CUDA
  • 主板:BIOS、规格(ITX、M-ATX)
  • 硬盘:
    • 协议:SATA、PCIE、M2 接口
    • 机械:3.5寸转速、功耗区别
    • 固态:M2 PCIE 3 / PCIE 4 x4
  • 网卡:有线 / 无线,网速
  • 散热:机箱风道、风冷方案、水冷方案
  • 电源:功率、转化率(80 Plus)、型号(ATX、SFX、1U)

路由器、NAS 和其他树莓派等小型嵌入式设备大同小异也都包含在这个里面,基本组成也都是这些。

表现是有向垃圾佬转变的趋势,闲暇时间会想淘二手低成本组装一个高性能、稳定的 软路由 / 服务器 / NAS 等等等等。毕竟几十块钱的双路服务器和云服务上开出的实例相比,太便宜了。好在工作上需要测试数据库,需要一些常开的低成本机器,新的一年可以考虑组几台节约成本。还有目前主要玩的都是 x86 指令集,未来服务信创需要一些 arm 的机器(就是不想用 mac,不想用云厂商的 arm),新的一年有机会也尝试一下。

抽象

今年业务上部分服务开始用 k8s (这东西好归好,重也是真重),服务编排比单节点的 docker-compose 复杂很多,对服务之间的组网方式有了更加深入的理解。今年也服务了更多的客户,了解了更多的网络管理方式。根据异常表现在抽象的网络拓扑结构中定位问题的能力肯定也比一年有提高。

这块比较有成就感的是使用某 v 开头的软件做了一个自动分发流量的软路由,无感知科学上课。这类工具很棒的点是有详细的配置文档。V4 版本的配置文档我仔细的看了一遍,在看的过程中,可以根据各个配置项的介绍,反推到计算机网络中各个层级、各个位置对流量的处理方式。这种方式我感觉可以帮助人很顺利、有实感的理解抽象的计算机网络,推荐给大家。

还有个今年实际动手操作的,内网穿透,用的 frp。以前了解过花生壳,但是没上手过。现在有服务器有公网IP,用开源方案解决更安心。

2023 年有个小目标,搞定自己的私有化存储,把备份的数据从几块移动硬盘转移到这个里面。这里现在的初步想法是:

  1. 不会买现成的 NAS 解决方案
  2. 要实现高安全性,但不采用 RAID1 / RAID5 之类的磁盘列阵,采用 Ceph 之类的分布式文件系统

分布式文件存储系统之前有了解,但是没实践。今年有空研究一下 & 动手搭建出来。好了之后配合内网穿透,各种玩法都能做出来。

宏观社会

2022 年因为疫情加上大会,整体是求稳。没有激进政策,在别人都是激进政策的情况下,就会显得保守。开完经济会议后,最近这一个月的政策变化的又有点大,一下子从冬天进入了夏天。应该对 2023 年保持乐观预期。大环境总体趋势是容易赚的钱赚的差不多了,需要赚辛苦钱。几个大厂都在降本增效,长期来看,我觉得是个好事情。

挤泡泡

很直接的一个问题,一个技术,怎么样应用可以快速变现?我个人把技术应用的方向简单的分为三类(变现速度从快到慢):

  1. 旁氏类:创造概念吸引大量热钱(“虚拟货币”、Web3)
  2. 信息差:利用信息技术比竞争对手更快更准确得到信息,创造收益(纯金融应用等)
  3. 能效类:提高社会整体生产力,由此创造收入

用切蛋糕来举例,上述应用分别对应:

  1. 零和博弈,在已有的蛋糕里面怎么从别人那里多切过来
  2. 在做大蛋糕的过程中,在新增的蛋糕里面获得更多(甚至可能是全部)的蛋糕
  3. 加快做蛋糕的速度,让蛋糕变得更大,这样每个人都能获得更多的蛋糕

一个中立的技术,比如区块链。可以发行“虚拟货币”构造旁氏类快速积累财富;也可以利用不可篡改的特性,开发电子合同解决多方的信任问题,降低交易成本。前者来钱非常快,但是不创造任何社会价值,甚至有非常大的外负性。后者商业模式都不确定,成功了可以降低商业成本,但是即使有价值也不一定有盈利。如果没有外部因素介入,一定是劣币驱逐良币,更多的人基于现实因素考虑选择短期内收益更高的方式。我自己不会去碰第一类,第二类能接受但是感觉社会价值不大,第三类路很难,个人的收益也不一定最大,但是对社会整体式有意义的。不好的经济环境可以有效的挤泡泡,淘汰掉第一类的应用,沉淀下能为整体创造价值的应用。

2022 年的整体环境就在挤泡泡,并且大方向慢慢从做蛋糕到分蛋糕转变,强调公平的分配。某些行业特殊的超额收益一定会慢慢的回归正常,这个需要自己调整好心态。毕竟整个社会更加公平,对大部分个体而言,一定是好事情。

小周期

我不会给朋友任何股票买卖建议,毕竟赚了也不分我钱,亏了就要埋怨我
以下仅供参考,不提供任何投资建议,朋友们需要独立思考然后做出自己的投资决策

我们的 A 股市场一般是 3-5 年一个小周期,可以参考这条微博,引用如下:

1
2
3
4
5
6
7
8
9
10
11
12
大家回想了一下,最近几年的牛熊顶底:
1、2005年-熊底;
2、2007年-牛顶;
3、2008年-熊底;
4、2009年-牛顶;
5、2012年-熊底;
6、2015年-牛顶;
7、2018年-熊底;
8、2020年-牛顶;
9、2022年-熊底?

注意时间差,2005-2007-2009-2012-2015-2018-2020-2022,除了2008年这个异常值因为2007年的6124超级牛市过于激烈导致筑底过于激烈(还有一个原因是全球金融危机)以外,跨度一直是稳定在2-3年,对不对。

去年大部分时间是个下坡路,年末 2 个月开始反弹,可以期待现在是一个小周期的上升方向。

产业升级

欧美打工人为啥 WLB,我们为啥 996。因为他们有更多的高端产业,能够创造更多的产业附加值,溢出流到个体上,就有更好的福利。所以作为中国打工人,需要关注国家整体的产业升级情况。虽然他不直接影响我们的工作,但他影响我们基础生活水平的下限。

芯片

首先提一本书,余盛的《芯片战争》,被推荐了但是还没看,今年会看完。

芯片设计感觉有长足进步。龙芯 2022 年的几款产品看起来都不错,3A5000 系列个人应用应该已经到 Zen1 的水平,这个其实够用了。现在混乱的点是指令集太多,国内信创 x86、ARM、RISC-V、MIPS 和 LoongArch,几个指令集,导致研发力量分散,形成生态也慢。好处是一定会有激烈的竞争,整下来的一定是相对有竞争优势的。未来应该会集中到一两个里面,个人比较看好 RISC-V 和 LoongArch,一个作为社区主导的开放架构,一个作为商业公司主导的开放架构。x86 本身就是要被替代的,MIPS 已经死了。现在 ARM 最为主流,但是他后面还是商业公司主导,自主可控性质上感觉差点意思。

芯片制造应该是遇到困难了,毕竟制造业得一步步踩坑,不像信息产业。去年关键技术上没什么好的消息。值得一提的是投资这个的大基金反腐,一锅端了一群人。希望扫清垃圾之后认清现实,好好努力,早日实现突破。

去年长江存储弯道超车,已经率先量产了使用 XTacking 3.0 技术 232 层堆叠的存储芯片。我已经买了两块致态的硬盘以示支持。希望未来长存在存储芯片领域,可以有更大的市场占有率。

汽车

我不买车,但是不妨碍我看车。去年新能源市场,比亚迪已经暴捶其他主机厂。技术积累厚积薄发。年末还发布了仰望,仰望这车是真牛逼(我贫瘠的语言只会说这两个字),易四方这种精准的四轮独立控制技术,和互联网厂商造车是不同的技术应用思路。现在的“智能”是联通各个系统,思路还是互联网打通系统,提高信息流转这一套,相对容易实现。信息化精准控制各个部件,类比下来就是改造基础物理条件了,需要长期的测试和技术积累,这是真正的技术壁垒。希望以后我需要买车的时候,要么有钱买得起仰望,要么技术进步,这些功能已经下放到普通款。

父上如果今年想换车,怂恿买千山翠,不然就等 2024 年新款。

据说比亚迪去年 3W 校招指标,去年应届毕业生 1000W,仅比亚迪一家,贡献了全国 1/333 的校招。在这种裁员缩招的大环境下,应该更能感受占据高端产业后,对个人的发展和工作有哪些影响。

新年展望

  1. 2023 年身体健康,实现旅游自由和电影自由
    1. 出行政策稳定,可以出去看看
    2. 最近的三体电视剧很棒,明天出门看流浪地球2
  2. 工作顺利,服务的客户数量可以上一两个数量级
  3. 大环境回暖,冒险精神慢慢恢复

展开全文 >>

🕯

Published on 2022 / 11 / 30

赴戍登程口占示家人

展开全文 >>

比 Nginx 更加有趣的 Caddy!

Published on 2022 / 10 / 06

最近把自己和公司的 Web 服务器都从 Nginx 切换成了 Caddy,主要原因是 HTTPS 证书申请太麻烦。之前的 Nginx 如果使用 Let’s Encrypt 的证书,代理程序会自动修改网站的配置文件,不太方便通过 git 来管理这些配置。刚好更换 Caddy 一起解决了这些问题。几年前就看过 Caddy 的相关介绍,但是没有真正使用。现在最新的 Caddy 已经到 2.0 版本,这次实际使用体验下来,Caddy 吸引我的几个功能点如下:

  • Caddyfile,比 JSON 和 Nginx 的默认配置方式有好玩
  • 自动 HTTPS,默认 DV 证书,可以支持到通配符证书
  • Go 开发,写自己的模块比 Nginx 的 Lua 模块方便
  • 不停机热更新

Caddyfile

Caddyfile 是 Caddy 的配置文件,官方文档定义是人类方便使用的一种配置文件(这句话让我想到以前的 Toml 😊),我赞同这个点。Caddyfile 确实比 JSON 有意思多了!官方有个简单的对比表格 JSON vs. Caddyfile,我复制到下面:

JSON Caddyfile
Easy to generate Easy to craft by hand
Easily programmable Awkward to automate
Extremely expressive Moderately expressive
Full range of Caddy functionality Most of Caddy functionality
Allows config traversal Cannot traverse within Caddyfile
Partial config changes Whole config changes only
Can be exported Cannot be exported
Compatible with all API endpoints Compatible with some API endpoints
Documentation generated automatically Documentation is hand-written
Ubiquitous Niche
More efficient More computational
Kind of boring Kind of fun

自己配置过程中,主要按照官网的图例(如下)进行修改。各个部分参照着进行修改,可以很快地完成配置。

Caddyfile Visual

不同于 Nginx 需要拆分很多个文件,使用 Caddy 将一个站点的全部配置放在一个 Caddyfile 内。得益于 Caddyfile 精简的结构和强大的表达能力,Caddyfile 可以由很少的内容表示复杂的配置!一个 PR 将成百上千行的 Nginx 配置替换成几十行 Caddyfile,感觉超级棒!

这个站点的配置如下:

1
2
3
4
5
6
7
8
9
ldsink.com {
header Strict-Transport-Security max-age=31536000;
root * /var/www/blog
file_server
}

www.ldsink.com {
redir https://ldsink.com{uri}
}

Caddy 也可以很方便的代理 WebSocket 的流量,在某些时候很有用,如下:

1
2
3
4
5
@websockets {
header Connection *Upgrade*
header Upgrade websocket
}
reverse_proxy @websockets localhost:1024

可能因为 Caddy 是使用 Go 开发,Caddyfile 保留了一些 Go 的特点,他的缩进使用 Tab,不是我们常用 Python 的 4 个空格。修改完配置文件以后,可以使用 Caddy 自带的 fmt 命令加上 --overwrite 格式化并覆盖配置文件(写这个文章前几天还是 -overwrite,然后更新了,此时就是 -- 了)。进入配置文件所在目录,执行如下命令:

caddy fmt –overwrite

自动 HTTPS,支持通配符证书

Caddy 的一大特点就是自动 HTTPS,默认的配置都是 HTTPS 的,只需要使用 80 和 443 端口就可以自动在 Let’s Encrypt 或者 ZeroSSL 签发证书并正确配置。Caddy 除了自动搞定开始的签发和配置,还可以在证书过期前自动进行续签。对于我们这种小站而言,只要 DNS 设置正确,就再也不用担心各种证书问题,Caddy 都能帮忙自动搞定。

Caddy 还支持修改 ACME 设置更改 SSL 证书的提供商,不过这个属于高级用法,我没用过,有需要的可以自己翻文档。这里介绍一下怎么通过插件把 Caddy 和 DNSPod 结合,自动签发通配符证书。

首先需要安装一个第三方模块,让 Caddy 可以调用 DNSPod 的接口。

caddy add-package github.com/caddy-dns/dnspod

然后需要去 DNSPod 申请一个 Token 供 Caddy 使用,链接如下:

https://console.dnspod.cn/account/token/token

申请好 Token 后,需要添加到 Caddyfile 内。可以结合模块的介绍,填入对应的配置。

1
2
3
4
5
6
7
8
9
10
11
12
# 这里我做成了一个 snippet,方便重复使用
(dnspod) {
tls {
dns dnspod <DNSPOD_TOKEN_ID>,<DNSPOD_TOKEN>
}
}

*.ldsink.com {
import dnspod
# 以下是正常的内容
...
}

最后重新加载配置,自动的通配符证书应该就生效了。

caddy reload

这里特别夸一下,Caddy 支持不停机热更新。如果新的配置文件有错误,Caddy 会自动回滚到上一个有效的配置,保证服务持续可用。

目前的问题

前面夸了很多,Caddy 确实很好,但也不是十全十美,他也有一些小问题,这里也说明一下。使用过程中注意和规避掉这些缺点,Caddy 就可以在生产环境中替换 Nginx 使用。

首先明确一点,Caddy 本体就是个独立的可执行二进制文件。想要集成任何模块,做的事情其实是 Caddy 加上模块的源代码一起重新编译出一个新的二进制文件。这种方式让 Caddy 变得简单和轻量,某种意义上也带来了一些麻烦。

我最开始使用 Ubuntu 的包管理方式安装 Caddy,这种方式有个严重的问题:之后所有的更新(apt update && apt upgrade -y),只会更新成不带第三方插件版本的最新的 Caddy。我们使用 caddy add-package 命令安装的任何第三方扩展,更新后都会丢失,例如上面的 DNSPod 模块。

Tips: 查看安装的模块可以使用命令 caddy list-modules

想要在更新成携带第三方模块版本的 Caddy,需要使用自带的升级命令:

caddy upgrade

我现在的做法是,通过 apt 安装完 Caddy 后,马上去 /etc/apt/sources.list.d 内删除源。只通过 apt 安装,后续的更新都走自带的升级命令。这样做,可以保持第三方模块存在。

不过这样做也有一个坑,需要注意:caddy 自带的更新,会将现在的可执行文件直接备份,然后下载新的文件到对面的目录。如果这个时候网络中断导致更新没有完成,那么 caddy 文件会损坏,需要手动把备份文件恢复。否则如果此时遇到 caddy 进程重启,新的 caddy 将无法启动。

更新时候的日志信息如下,遇到问题恢复也简单,把 .tmp 后缀的备份文件重新恢复成原始文件就好。

mv /usr/bin/caddy.tmp /usr/bin/caddy

1
2
3
4
{
"current_path": "/usr/bin/caddy",
"backup_path": "/usr/bin/caddy.tmp"
}

展开全文 >>

MaxCompute 简单调研

Published on 2022 / 05 / 29

简介

文档 | 控制台

  • 产品定位定位:云数据仓库
  • 支持内部表和外部表(MaxCompute 2.0版本开始支持外部表)
  • 产品上,和阿里云内部的 DataWorks 和 Quick BI 打通
  • 数据上,可以通过数据集成功能加载不同数据源(例如 MySQL)的数据,也可以通过数据集成把 MaxCompute 的数据导出到各种业务数据库。

MaxCompute产品架构

MaxCompute的项目发挥什么作用?

  • 项目(Project)是MaxCompute的基本组织单元,类似于传统数据库的Database或Schema的概念,是进行多用户隔离和访问控制的主要边界。
  • 项目中包含多个对象,例如表(Table)、资源(Resource)、函数(Function)和实例(Instance)等。
  • 一个用户可以同时拥有多个项目的权限。
  • 通过安全授权,可以在一个项目访问另一个项目中的对象。

MaxCompute常见错误信息如何理解,怎么定位问题?

MaxCompute的常见报错信息编号有规范定义,格式为:异常编号:通用描述 - 上下文相关说明。其中SQL、MapReduce、Tunnel的错误信息是不一样的。更多错误信息,请参见错误码概述。

核心概念的层次结构

MaxCompute核心概念的层次结构

关键性里程碑

MaxCompute关键性里程碑

使用

连接方式

  1. 浏览器,MaxCompute 控制台-查询编辑器
  2. PC,MaxCompute客户端(odpscmd)
  3. 集成开发环境工具,用于 IntelliJ IDEA

生态对接

基本都是 Java 生态,提供 Connector,使用 JDBC 连接。Python 提供了 SDK,需要开发。

连接页面,是否需要根据不同的数据源的形式,实现不同的标签说明?

MaxCompute的生态架构

其他

  • 产品:构建与优化数据仓库
  • 开发:SQL及函数
  • 安全:权限管理
  • 规范:数据模型架构规范
  • 演示:公开数据集

展开全文 >>

奈飞文化手册

Published on 2022 / 05 / 17

尽信书,不如无书。 —— 孟子

一个人的命运啊,当然要靠自我奋斗,但是也要考虑到历史的行程。 —— 长者

批判的看管理学/成功学书籍,思考内容里面举例和结果之间的因果关系是否成立。找到真正的关键因素。

Netflix MindMaster

几次成功的转型

2006-2007

结果:实现从邮政递送DVD到网络流媒体播放的转型;

历史行程:

  • 互联网条件成熟,带宽提高,Youtube崛起

自我奋斗:

  • 算法推荐!

2011Q3

结果:从网络播放旧内容到通过外部制片公司创作新内容,如《纸牌屋》;

历史行程:

  • 第一个在流媒体播放的主流电视剧《纸牌屋》
    • 演员 + 导演Kevin Spacey (Margin Call)
    • 播放方式

自我奋斗:

  • 数据分析!!

核心护城河:为用户提供优质内容。

小Lin姐的 【硬核商业分析】Netflix《鱿鱼游戏》背后最大赢家,网飞的崛起之路

  • books

展开全文 >>

从收藏夹观察网址变化趋势

Published on 2022 / 04 / 30

五一前夕,我花了点时间使用扩展 Bookmarks Organizer 整理了十年间在浏览器内积累的近千个书签。根据网址的变化,记录一些个人对趋势的观察。

HTTPS 全面普及

最为明显的特征是 HTTPS 全面普及,几乎没有 HTTP 的网页。收藏夹一些政府部门,甚至包括银行官网(非个人网银页面),传统意义上比较顽固的页面都进行了更新,部署了 HTTPS。

网址更短,更精简

这块主要是四个变化方向:

  1. 域名精简。现在有了更多的顶级域名,很多网站不再拘泥传统的 com 域名。可以会变成更短更合适的其他顶级域名(持有成本甚至可能更低)。技术类网站,io、ai、dev、pro 等都是非常好的选择,例如 celeryproject.org => celeryq.dev 、tylermcginnis.com => ui.dev
  2. 移除 www 前缀。比如本站和 Github.com。这个有很多例子,就不举例了
  3. 和 2 有关,移除 www 后,一些功能会独立成二级域名,从而缩短网址长度。例如 www.domain.com/(blog/bbs/doc) 直接更换成二级域名的方式 (blog/bbs/doc).domain.com
  4. uri 精简。早期很多文章域名采用 WordPress 带日期的方式。/articles/2022/04/30/three-passions 会直接变成 /three-passions

cn 域名增多

一部分国内网站,曾经的顶级域名优先使用 .com,现在切换成了 .cn。这部分也分为两类:

  1. 就是喜欢 .cn 的,其他主域名都跳转 .cn。比如 moegirl.org => moegirl.org.cn
  2. 走出去,国际化。.com 作为国际化首页,.cn 服务本土。比如 InfoQ

政府站点质量上升

以前政府网站质量一言难尽,现在感觉重视起来了。域名,内容和网站本身安全性等各个方面都有了很多提升。现在厅级以下应该不让独立建站,挂靠上级网站下对应的模块。以前长沙市长沙县泉塘街道的 url.gov.cn 这样有意思的域名以后应该难再见到了。

法院、工商、财政相关的信息获取难度比以前大大降低,而且看得出有些部门审美是在线的。

全国社会组织查询

  • 旧:https://www.chinanpo.gov.cn/search/orgcx.html
  • 新:https://chinanpo.mca.gov.cn/

储蓄国债发行

  • 旧:2021年数据已经停止更新,就不放出来了
  • 新:http://gks.mof.gov.cn/ztztz/guozaiguanli/gzfxdzs/

个人站点大量消失

社会环境和商业模式变化,很多个人站点因为各种原因都消失了。

产品发展进化

很多好的产品随着时代落幕,也有更多好的产品变得更加成熟。一些产品或者服务被收购,网址更新成集团网址。这里提两个和我的主业没关系的网站,以前偏社区,现在正式商业化运作,希望他们未来更加美好。

  • Tushare:www.tushare.org => tushare.pro
  • vn.py:vnpy.com

展开全文 >>

« Prev 123…16Next »
Copyrights © 2009 - 2025 Sink. All Rights Reserved.
Hexo Illya
  • 所有文章
  • 友情链接
  • +1s

tag:

  • ubuntu
  • dns
  • deepin
  • rfc
  • django
  • database
  • work
  • python
  • greenplum
  • postgres
  • how-to
  • linux
  • react
  • firefox
  • nginx
  • vijos
  • go
  • toml
  • tools
  • usaco
  • IPv6
  • gpg

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

  • 浮云计算
  • 成成个人学习小站
  • Victor 的自留地
  • amtoaer
  • lxkaka
  • 酷壳CooShell
  • 曜彤.手记

一个人的命运啊,当然要靠自我奋斗,但是也要考虑到历史的行程。

很惭愧,就做了一点微小的工作,谢谢大家。