Files
server-deploy/certd/README.md

283 lines
6.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Certd 部署指南
SSL 证书自动化管理工具,支持自动申请、部署和续期 Let's Encrypt / 各种商用证书。
## 功能特性
- 自动申请 Let's Encrypt 免费 SSL 证书
- 支持阿里云、腾讯云、Cloudflare 等多种 DNS 提供商
- 自动部署证书到 Nginx、CDN、OSS 等
- 到期自动续期,无需人工干预
- Web 管理界面,可视化操作
## 技术栈
| 组件 | 版本 | 说明 |
|------|------|------|
| Certd | latest | SSL 证书自动化工具 |
| SQLite | 内置 | 轻量数据库,无需额外部署 |
| Nginx | 系统包 | 反向代理 + HTTPS 接入 |
| Docker | 最新版 | 容器运行环境 |
## 前置条件
1. 一台 Linux 服务器Ubuntu 22.04/24.04 推荐)
2. 一个已解析到服务器的域名(如 `cert.example.com`
3. 服务器 80/443 端口可从外网访问
## 目录结构
```
certd/
├── docker-compose.yml # 容器编排
├── .env.example # 配置模板
├── deploy.sh # 一键部署脚本
├── backup.sh # 备份脚本
├── nginx/
│ └── certd.conf # Nginx 反向代理配置
└── README.md # 本文件
```
服务器上的数据目录:
```
/data/certd/ # Certd 数据SQLite + 证书文件)
/var/backups/certd/ # 备份文件
```
## 快速部署
### 第一步:上传文件到服务器
```bash
# 在本地执行,上传 base 和 certd 目录
scp -r base/ certd/ root@<服务器IP>:/opt/
```
### 第二步:登录服务器执行部署
```bash
ssh root@<服务器IP>
# 如果是全新服务器,先安装基础环境
cd /opt/base
cp .env.example .env
# 可选:编辑 .env 配置 Docker 镜像加速
bash setup.sh
# 部署 Certd
cd /opt/certd
bash deploy.sh
# 首次运行会生成 .env按提示修改配置后重新运行
vi .env
bash deploy.sh
```
### 第三步:配置域名解析
在域名服务商(如阿里云 DNS添加 A 记录:
| 记录类型 | 主机记录 | 记录值 |
|----------|----------|--------|
| A | cert | `<服务器公网IP>` |
### 第四步:登录管理后台
1. 浏览器访问 `https://cert.yourdomain.com`
2. 默认账号: `admin`
3. 默认密码: `123456`
> **⚠️ 安全提醒:请立即修改默认密码!**
## 配置说明
### .env 配置项
| 变量 | 说明 | 默认值 |
|------|------|--------|
| `CERTD_DOMAIN` | 访问域名 | 必填 |
| `CERTBOT_EMAIL` | Let's Encrypt 邮箱 | 必填 |
| `CERTD_IMAGE` | Docker 镜像 | 阿里云镜像 |
| `CERTD_DATA_DIR` | 数据目录 | `/data/certd` |
| `BACKUP_DIR` | 备份目录 | `/var/backups/certd` |
| `RESET_ADMIN_PASSWD` | 重置管理员密码 | `false` |
### 重置管理员密码
如果忘记管理员密码:
```bash
cd /opt/certd
# 1. 修改 .env设置 RESET_ADMIN_PASSWD=true
vi .env
# 2. 重新创建容器restart 不会重新读取 .env必须用 up -d
docker compose up -d
# 3. 查看日志确认重置完成(出现"重置1号管理员用户密码完成"即可)
docker logs -f --tail 100 certd
# 4. 用默认密码 123456 登录(用户名为原管理员账号,如修改过请查看上一步日志)
# 5. 改回 RESET_ADMIN_PASSWD=false 并重新创建容器
vi .env
docker compose up -d
```
## 日常运维
### 查看日志
```bash
cd /opt/certd
docker compose logs -f
docker compose logs --tail 100
```
### 备份
```bash
cd /opt/certd
bash backup.sh
```
备份内容包括:
- SQLite 数据库 + 证书文件(`/data/certd`
- 部署配置(`docker-compose.yml` + `.env` + `nginx/`
备份文件保存在 `/var/backups/certd/`,自动清理 30 天前的旧备份。
> **提示**Certd 还内置了自动备份流水线功能,可在管理界面中配置定时备份和失败通知,详见「安全加固建议」章节。
### 恢复备份
```bash
# 查看可用备份
ls /var/backups/certd/
# 停止服务
cd /opt/certd && docker compose down
# 恢复数据
tar xzf /var/backups/certd/<日期>/certd-data.tar.gz -C /data/
# 重启服务
cd /opt/certd && docker compose up -d
```
### 升级
```bash
cd /opt/certd
# 1. 备份当前数据
bash backup.sh
# 2. 拉取新镜像
docker compose pull
# 3. 停止旧容器并启动新容器
docker compose down
docker compose up -d
# 4. 检查运行状态
docker compose ps
docker compose logs --tail 20
```
### 停止 / 启动
```bash
cd /opt/certd
docker compose down # 停止
docker compose up -d # 启动
docker compose restart # 重启
```
## 使用 Certd 管理证书
### 添加 DNS 授权
1. 登录 Certd 管理后台
2. 进入「授权管理」→「新增」
3. 选择 DNS 提供商(如阿里云)
4. 填入 AccessKey ID / Secret
### 创建证书流水线
1. 进入「证书管理」→「新增流水线」
2. 选择「Let's Encrypt」证书颁发机构
3. 填写要申请的域名(如 `*.example.com`
4. 选择 DNS 授权方式
5. 配置部署目标Nginx、CDN 等)
6. 点击「运行」
### 自动续期
Certd 会自动检查证书过期时间,在到期前自动续期并部署。默认检查间隔为每天一次。
## 安全加固建议
### 1. 修改管理员用户名
官方强烈建议修改默认的 `admin` 用户名。登录后前往「系统管理」→「用户管理」修改管理员账号的用户名,并建议注册一个名为 `admin` 的普通用户并设为禁用,防止被暴力破解。
### 2. 开启站点隐藏
Certd 设置好后日常很少需要访问,建议平时关闭站点访问入口,减少被攻击风险。前往「系统管理」→「系统设置」→「安全设置」→ 开启站点隐藏。
### 3. 启用 2FA 双重验证
Certd 支持 2FA 双重认证登录,建议在「个人设置」中开启。
### 4. 配置自动备份流水线
Certd 内置数据库自动备份功能。在管理界面中创建一个备份流水线,选择「数据库备份」任务,配置定时执行和失败通知,确保数据安全。详见[官方备份文档](https://certd.docmirror.cn/guide/use/backup/)。
## 故障排查
### 容器无法启动
```bash
# 查看容器状态
docker compose ps
# 查看详细日志
docker compose logs --tail 50
```
### SSL 证书申请失败
```bash
# 检查域名解析是否正确
dig cert.yourdomain.com
# 检查 80 端口是否可访问
curl -I http://cert.yourdomain.com
# 查看 Certbot 日志
cat /var/log/letsencrypt/letsencrypt.log
```
### 访问返回 502
```bash
# 检查 Certd 容器是否运行
docker compose ps
# 检查 7001 端口
curl -I http://127.0.0.1:7001
# 检查 Nginx 配置
nginx -t
```
## 端口说明
| 端口 | 协议 | 说明 |
|------|------|------|
| 80 | TCP | HTTP → HTTPS 重定向 |
| 443 | TCP | HTTPSNginx 反向代理) |
| 7001 | TCP | Certd HTTP仅监听 127.0.0.1 |