从命令行到Web面板:用Domain Admin搭建你的私有域名与SSL证书监控平台(Docker部署指南)
在数字化资产管理的日常工作中,域名和SSL证书的有效期监控往往是最容易被忽视却后果最严重的环节之一。我曾亲眼见证一个日均百万流量的电商平台因域名过期未续费导致72小时服务中断,直接损失超过千万。这种"低级错误"在技术团队中并不罕见——当企业拥有数十个分布式业务域名时,仅靠人工记录和日历提醒显然力不从心。
Domain Admin正是为解决这一痛点而生的开源解决方案。与传统whois命令行工具不同,它通过可视化面板集中展示所有域名的注册信息、SSL证书状态和到期时间,支持邮件、钉钉等多渠道预警,甚至能自动生成续费工单。本文将分享如何用Docker Compose快速搭建这套系统,并实现与企业现有运维体系的深度集成。
1. 环境准备与Docker部署
1.1 硬件资源规划
对于中小规模部署(监控≤50个域名),建议以下最低配置:
| 资源类型 | 推荐配置 | 说明 |
|---|---|---|
| CPU | 2核 | 需支持x86_64架构 |
| 内存 | 2GB | 实际占用约800MB |
| 存储 | 10GB SSD | 数据库增长约1MB/域名/年 |
| 网络 | 1Mbps带宽 | 每域名检测产生约5KB流量 |
生产环境建议部署在独立内网服务器,避免与业务容器争抢资源。测试环境可使用本地开发机,以下是我的MacBook Pro实测数据:
# 资源占用监控命令 docker stats --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}" CONTAINER CPU % MEM USAGE domain-admin 0.5% 145MiB / 1.2GiB postgres 0.3% 85MiB / 512MiB1.2 一键部署方案
Domain Admin官方提供全功能Docker镜像,使用docker-compose.yml实现依赖服务编排:
version: '3' services: app: image: mouday/domain-admin:latest ports: - "8000:8000" volumes: - ./data:/app/data environment: - DB_URL=postgresql://postgres:123456@db:5432/domain_admin depends_on: - db restart: unless-stopped db: image: postgres:13-alpine volumes: - pg_data:/var/lib/postgresql/data environment: - POSTGRES_PASSWORD=123456 - POSTGRES_DB=domain_admin restart: unless-stopped volumes: pg_data:启动服务只需执行:
mkdir -p ./data && chmod 777 ./data docker-compose up -d注意:首次启动约需2分钟完成数据库初始化,访问
http://服务器IP:8000使用默认账号admin/123456登录。
2. 核心功能配置实战
2.1 域名监控体系搭建
添加监控域名时,系统会自动通过WHOIS协议获取以下信息字段:
- 注册商信息
- 注册人联系方式
- DNS服务器列表
- 注册日期/到期日期
- 域名状态(如clientTransferProhibited)
批量导入技巧:准备CSV文件按以下格式保存,通过Web界面"批量导入"功能一次性添加:
domain,group,comment example.com,生产环境,主站域名 api.example.com,生产环境,移动端接口 blog.example.org,营销系统,官方博客实际项目中我发现个隐藏功能:对.com.cn这类复合后缀域名,需要手动指定WHOIS服务器才能正确查询。例如添加阿里云域名时,在"高级设置"中填写:
WHOIS服务器 = whois.aliyun.com2.2 SSL证书监控配置
与传统域名监控不同,SSL证书检测需要特殊处理:
- 端口扫描:默认检测443端口,但微服务架构下可能有多个HTTPS端点
- 证书链验证:中间证书过期同样会导致浏览器告警
- SAN检测:多域名证书需检查所有备用名称(Subject Alternative Name)
在"证书管理"页面添加监控时,支持三种检测模式:
| 检测模式 | 适用场景 | 检测频率 | 网络要求 |
|---|---|---|---|
| 主动连接 | 公网可访问服务 | 实时 | 需出站443端口 |
| 被动解析 | 仅上传证书文件 | 手动 | 无 |
| 代理检测 | 内网服务/NAT穿透 | 定时 | 需配置代理 |
对于内网服务,我推荐使用Nginx反向代理实现证书暴露:
server { listen 8443; server_name _; ssl_certificate /path/to/internal.crt; ssl_certificate_key /path/to/internal.key; location / { return 200 '{"status":"OK"}'; add_header Content-Type application/json; } }3. 告警通知与集成方案
3.1 多级预警阈值设置
合理的预警时间梯度能避免告警疲劳:
# 预警规则示例 - 在config.py中自定义 ALERT_RULES = { "domain": [ {"days": 30, "level": "warning", "channels": ["email"]}, {"days": 7, "level": "critical", "channels": ["sms", "dingtalk"]} ], "ssl": [ {"days": 45, "level": "warning", "channels": ["email"]}, {"days": 15, "level": "critical", "channels": ["wecom"]} ] }3.2 企业微信机器人集成
在"通知设置"中选择Webhook类型,填写机器人地址:
https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=你的KEY消息模板支持Markdown语法,这是我的团队正在使用的版本:
**域名紧急告警** > 类型:${type} > 名称:${name} > 剩余天数:${days}天 > 到期时间:${expire_date} 请立即处理:[点击续费](${renew_url})4. 高级功能与系统集成
4.1 API自动化管理
Domain Admin提供完整的REST API,适合纳入DevOps流水线。获取API Token后,可用curl管理资源:
# 获取域名列表 curl -X GET "http://localhost:8000/api/domain" \ -H "Authorization: Bearer your_token" # 添加新域名 curl -X POST "http://localhost:8000/api/domain" \ -H "Content-Type: application/json" \ -d '{"domain": "new.example.com", "group": "测试环境"}'4.2 Prometheus监控集成
暴露/metrics端点供Prometheus抓取,关键指标包括:
domain_expire_days域名剩余天数ssl_expire_days证书剩余天数last_check_timestamp最后检测时间
Grafana仪表盘配置示例:
SELECT min(domain_expire_days) as min_days, avg(domain_expire_days) as avg_days FROM metrics WHERE time > now() - 1h GROUP BY domain_group4.3 数据备份策略
采用双备份机制确保数据安全:
- 数据库每日dump:
docker exec -t domain-admin_db pg_dump -U postgres domain_admin > backup_$(date +%F).sql- 配置文件版本控制:
git add data/config.json git commit -m "update domain config"在Kubernetes环境中,建议通过VolumeClaimTemplate实现持久化存储自动备份。