环境准备:Linux基础操作回顾、Docker与Docker Compose安装、ACME客户端安装
说实话,做边缘网关证书续签这件事,环境准备是最容易被忽略的一环。我见过太多人一上来就急着跑命令,结果卡在权限、网络、依赖这些基础问题上,折腾半天才发现是环境没搭好。这一章,咱们就把地基打牢。
2.1 Linux基础操作回顾
你可能会想:「Linux基础还要讲?」嗯,我理解。但边缘网关的环境往往比服务器更苛刻——资源有限、网络不稳定、甚至没有图形界面。有些操作你平时觉得简单,到了现场就抓瞎。
2.1.1 文件系统与权限
证书文件最怕什么?权限不对。我曾经在客户现场排查了整整两个小时,最后发现是证书文件权限设成了 777,ACME 客户端死活不认。
核心原则:证书私钥必须只有 root 或证书管理用户可读,建议 600 或 400。
# 查看文件权限
ls -la /etc/ssl/certs/
# 修改权限
chmod 600 /etc/ssl/private/domain.key
# 修改所有者
chown root:root /etc/ssl/private/domain.key
2.1.2 网络与防火墙
ACME 协议需要从 Let's Encrypt 服务器拉取证书,同时要验证域名所有权。说白了,你的网关必须能访问外网,而且 80 或 443 端口要开放。
| 端口 | 方向 | 用途 |
|---|---|---|
| 80/tcp | 入站 | HTTP-01 验证(Let's Encrypt 回访) |
| 443/tcp | 入站 | TLS-ALPN-01 验证 |
| 53/udp | 出站 | DNS-01 验证(DNS API 方式) |
我的经验:如果网关在内网,建议提前用 curl -I https://acme-v02.api.letsencrypt.org 测试连通性。别等到部署时才发现网络不通。
2.1.3 定时任务基础
证书自动续签的核心就是 cron。你想想看,证书有效期只有 90 天,手动续?不现实。
# 编辑定时任务
crontab -e
# 每天凌晨 3 点检查证书
0 3 * * * /usr/bin/certbot renew --quiet
注意:边缘网关的时间可能不准。如果系统时间偏差超过 5 分钟,ACME 验证会失败。建议先配好 NTP。
2.2 Docker 与 Docker Compose 安装
为什么用 Docker?说白了,隔离性好、环境一致、部署简单。我在多个边缘项目里都用 Docker 跑 ACME 客户端,从来没出过环境冲突的问题。
2.2.1 安装 Docker
不同发行版安装方式略有差异,但核心步骤差不多。我以 Ubuntu/Debian 为例:
# 更新包索引
sudo apt update
# 安装依赖
sudo apt install -y ca-certificates curl gnupg lsb-release
# 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加稳定版仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装 Docker Engine
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
# 启动并设置开机自启
sudo systemctl enable docker
sudo systemctl start docker
# 验证安装
sudo docker --version
避坑指南:我曾经在树莓派上装 Docker,忘了加 --arch 参数,结果拉下来的镜像全是 x86 的,跑都跑不起来。ARM 设备一定要确认架构。
2.2.2 安装 Docker Compose
Docker Compose 用来编排多容器。虽然 ACME 客户端通常单容器就够了,但后续你可能需要配合 Nginx、Certbot 一起跑,Compose 就派上用场了。
# 下载最新版 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装
docker-compose --version
注意:如果下载速度慢,可以用国内镜像源。我一般用 https://get.daocloud.io/docker/compose/releases/download/ 替换官方地址。
2.3 ACME 客户端安装
ACME 客户端是证书续签的主角。市面上主流的有两个:acme.sh 和 Certbot。我个人更倾向 acme.sh,原因后面说。
2.3.1 安装 acme.sh
acme.sh 是纯 Shell 脚本,轻量、无依赖,特别适合边缘网关这种资源受限的环境。
# 一键安装
curl https://get.acme.sh | sh
# 或者用 wget
wget -O - https://get.acme.sh | sh
# 重新加载 shell 配置
source ~/.bashrc
# 验证安装
acme.sh --version
安装完成后,acme.sh 会自动创建定时任务,每天检查证书是否需要续签。这一点非常省心。
acme.sh 的优势:
- 纯 Shell 实现,无 Python/Node 依赖
- 支持 100+ DNS API(阿里云、腾讯云、AWS Route53 等)
- 自动续签,无需额外配置
- 支持 ECC 证书(更小、更快)
2.3.2 安装 Certbot
Certbot 是 Let's Encrypt 官方推荐的客户端,功能强大,但依赖 Python 环境。如果你的网关资源充裕,可以考虑。
# Ubuntu/Debian
sudo apt update
sudo apt install -y certbot
# 验证安装
certbot --version
# 或者用 snap(推荐)
sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
我的建议:如果网关是 x86 架构、内存大于 512MB,用 Certbot 没问题。如果是 ARM 或内存紧张,acme.sh 更合适。
2.3.3 两种客户端对比
| 特性 | acme.sh | Certbot |
|---|---|---|
| 语言 | Shell | Python |
| 依赖 | 无 | Python 3 + 若干包 |
| 安装体积 | ~500KB | ~50MB |
| DNS API 支持 | 100+ | 有限(需插件) |
| 自动续签 | 内置 cron | 需 systemd timer 或 cron |
| ECC 证书 | 原生支持 | 需额外参数 |
2.4 本章知识体系
下面这张图帮你理清环境准备的脉络:
2.5 验证环境
装完别急着走,先验证一下环境是否正常。我习惯写一个简单的检查脚本:
#!/bin/bash
# 环境检查脚本
echo "=== 系统信息 ==="
uname -a
echo "=== Docker 版本 ==="
docker --version
echo "=== Docker Compose 版本 ==="
docker-compose --version
echo "=== ACME 客户端 ==="
if command -v acme.sh &> /dev/null; then
acme.sh --version
elif command -v certbot &> /dev/null; then
certbot --version
else
echo "未安装 ACME 客户端"
fi
echo "=== 网络连通性 ==="
curl -I https://acme-v02.api.letsencrypt.org --connect-timeout 5
我的习惯:把这个脚本保存为 check-env.sh,每次部署新网关都跑一遍。省得漏掉什么。