在阿里云低配置服务器上安装 Alpine Linux

近期有几个服务器到期,又对国内低流量、大带宽的服务器有一定需求(主要是用于内网穿透),于是入手了阿里云的 2C0.5G T6 突发性能实例。综合下来五年仅需不到 200 元,性价比极高。

然而云服务的一大特点是「块存储」,也就是硬盘收费很贵,算下来硬盘价格比服务器本身还高。因此选用一个体积较小的操作系统就显得尤为重要。早在之前 LMS 就已介绍了如何自定义 Alpine Linux 镜像以超低价格购买该配置的实例。然而对我来说,还有几个需要考虑的地方:

  • 希望使用 LUKS 加密,以防止阿里云的「自动化扫描硬盘」
  • 出于个人便好,想要使用 btrfs 文件系统
  • 由于内存较小,因此使用 x86-32 而非 x86-64 架构以节省内存占用

同时,不同于该文章使用 Hyper-V 创建虚拟机的方式,本文使用了笔者更加熟悉的 Proxmox VE。

本文所涉 Alpine Linux 版本为 3.21,未来更新版本的配置方式可能有所区别,敬请读者在操作时注意。

阅读更多

使用短域名提供 Docker 镜像

原理是基于方向代理,例如镜像源为 docker-library.example.com,想要使用 example.com/<仓库名> 或者 example.com/<用户名>/<仓库名> 的方式来访问镜像;同时正常的 HTTP 访问依然返回 HTML 页面。

需要注意的是,此方案会导致 /v2 开头的 URL 被路由到 Docker Registry,因此您设计的 Web 页面不能包含 /v2 开头的 URL。

Nginx 配置如下

1
2
3
4
5
6
7
8
9
10
11
12
13
location /v2 {
# 对于 example.com/<仓库名> ,默认路由到 _library 用户名(即 docker-library.example.com/_library/<仓库名>)
if ($uri ~ ^/v2/(?<image>[^/]+)/(?<resource>manifests|blobs)(?<suffix>/.*)?$) {
rewrite ^/v2/(?<image>[^/]+)/(?<resource>manifests|blobs)(?<suffix>/.*)?$ /v2/_library/$image/$resource$suffix last;
}
# 对于 example.com/<用户名>/<仓库名> ,路由到 docker-library.example.com/<用户名>/<仓库名>
if ($uri ~ ^/v2/(?<user>[^/]+)/(?<image>[^/]+)/(?<resource>manifests|blobs)(?<suffix>/.*)?$) {
rewrite ^/v2/(?<user>[^/]+)/(?<image>[^/]+)/(?<resource>manifests|blobs)(?<suffix>/.*)?$ /v2/$user/$image/$resource$suffix last;
}
proxy_pass https://docker-library.example.com;
proxy_set_header Host docker-library.example.com;
proxy_set_header X-Real-IP $remote_addr;
}

proxy_set_header 选项可以根据需要添加。

在 Debian 安装程序中跳过 Security 源

在 Debian 的联网安装(包括 Netboot 和联网的 CD 安装介质)过程中,Debian 安装程序会自动添加 Security 源到 /target/etc/apt/sources.list 中。该源固定域名为 security.debian.org,且会忽视在安装过程中选择的镜像源。

然而由于众所周知的原因,部分国内的服务器无法正常访问 Debian 的 Security 源,导致安装过程中无法下载更新。

为了解决这个问题,需要在 Debian 安装程序的 Configure APT 阶段终端自动安装程序。

阅读更多

防止 Nginx 的未授权解析和 SSL 源站泄露

对于境内备案网站,为了防止不法分子恶意将未授权域名解析到服务器,可以在 Nginx 上进行如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
server {
listen 80 default_server;
listen [::]:80 default_server;
return 444;
}

server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name _;
return 444;
ssl_reject_handshake on;
}

阅读更多

在 Systemd 中使用自动用户和运行时凭据

在传统的 Linux 运维中,如果需要使某个服务以非特权用户运行,一般会为其创建一个专门的用户,并配置 User 和 Group 字段。

在 Systemd 中,对于不需要精细控制权限的情况,则有更加简便的方法。

.service 服务单元配置文件中的 [Service] 部分,可以下面的配置项来启用这一功能:

1
2
3
4
5
[Service]
DynamicUser=yes
PrivateTmp=yes
PrivateUsers=yes
PrivateDevices=yes

如此,即无需在 [Service] 部分配置 User 和 Group 字段,Systemd 会自动为该服务创建一个临时用户,并在服务停止后删除该用户。

阅读更多