Docker 部署
PKI Trust Manager Docker 部署指南,涵盖前提条件、配置、许可、验证、维护和安全。
Securetron 新一代 PKI Trust Manager 简化证书管理,支持 TLS、PQC、ADCS / MS CA、AWS CA、Azure Vault 等多种环境。内置智能证书发现和高级通知服务,提供治理能力,并通过 SCEP、EST 和 ACME 实现自动化证书续期,帮助避免服务中断。
PKI Trust Manager Docker 部署指南
目录
前提条件
软件要求
- Docker Engine 20.10.0 或更高版本
- Docker Compose 2.0.0 或更高版本
- 用于版本控制的 Git
- SSL/TLS 证书(用于生产部署)
访问要求
- 能够访问 Docker Hub/Registry 以拉取镜像
- SQL Server 客户端工具(可选,用于数据库管理)
- 部署服务器的管理员权限
网络要求
- 开放端口:1433 (SQL)、5053 (Web UI)、443 (HTTPS)
- 出站 SMTP 访问权限(端口 2525 或您的 SMTP 端口)
- 能够解析服务主机名的 DNS
系统要求
最低硬件配置
- CPU:4 核(x64 架构)
- RAM:至少 8 GB,建议 16 GB
- 存储:50 GB 可用磁盘空间(建议 SSD)
- 网络:1 Gbps 网络接口
建议的生产配置
- CPU:8 核或更多
- RAM:32 GB
- 存储:200 GB 或更多,并采用 RAID 配置
- 备份:定期备份卷的策略
架构概述
┌─────────────────────────────────────────────────────────────┐
│ PKI Trust Manager Stack │
├─────────────────┬─────────────────┬─────────────────────────┤
│ Nginx Proxy │ Web UI (CMS) │ SQL Server │
│ (SSL/TLS) │ Port: 5228 │ Port: 1433 │
│ Port: 443 │ │ │
└─────────────────┴─────────────────┴─────────────────────────┘
│ │ │
└────────────────┼──────────────────┘
│
Application Bridge Network
设置说明
1. 克隆/准备部署目录#
mkdir -p /opt/pki-trust-manager
cd /opt/pki-trust-manager2. 创建目录结构#
mkdir -p {certs,license,config}3. 创建 Docker Compose 文件#
使用提供的配置创建 docker-compose.yaml:
cat > docker-compose.yaml << 'EOF'
[PASTE PROVIDED DOCKER-COMPOSE.YAML CONTENT HERE]
EOF4. 创建环境文件#
创建 .env 文件以设置环境变量:
**安全警告:**以下示例中的密码和密钥仅为占位符。生产部署前请将其替换为独有且安全的值;切勿复用或公开真实凭据。
cat >.env << 'EOF'
# Database Configuration
SQL_SA_PASSWORD=YourStrong@Password123
SQL_DATABASE=PKIDBEE
SQL_PORT=1433
# Web Application
PKIMAIN_TAG=latest
CMSWEB_PORT=5053
ENV_MODE=Cloud
TRUST_LEVEL=Public
# Admin Configuration
ADMIN_USERNAME=superadmin
ADMIN_PASSWORD=YourAdminPass123!
[email protected]
# Authentication
LOGIN_VALIDITY=15
OTP_NAME=PKI-Trust-Manager
EMAIL_VERIFICATION=true
# Email/SMTP Configuration
SMTP_SERVER=mail.smtp2go.com
SMTP_PORT=2525
SMTP_AUTH=true
SMTP_SSL=true
SMTP_USERNAME=your_smtp_username
SMTP_PASSWORD=your_smtp_password
SMTP_SENDER_NAME="PKI Trust Manager"
[email protected]
# Certificate Expiry Settings
EXPIRY_START_RANGE=30
EXPIRY_END_RANGE=3
EXPIRY_NOTIFY_INTERVAL=1
EXPIRY_SCAN_INTERVAL=30
# SCEP Configuration
SCEP_OTP_VALIDITY=525600
# Licensing (Contact Securetron for these values)
LICENSE_SERVER_URL=http://localhost:7001
LICENSE_API_KEY=your_license_api_key
CMSWEB_CLIENT_ID=webcore-001
LICENSE_OFFLINE_MODE=true
LICENSE_ONLINE_VALIDATION=false
LICENSE_PUBLIC_KEY=your_public_key_here
# Logging
LOG_LEVEL=Information
LOG_LEVEL_MS=Warning
# Nginx
NGINX_HTTPS_PORT=443
EOF配置
SSL/TLS 证书设置#
- 将 SSL 证书放入
certs/目录:
# Certificate files
certs/
├── cert.crt # SSL Certificate
└── key.pem # Private Key- 测试时可生成自签名证书:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout certs/key.pem \
-out certs/cert.crt \
-subj "/C=US/ST=State/L=City/O=Organization/CN=pki.yourdomain.com"Nginx 配置#
创建 nginx.conf:
events {
worker_connections 1024;
}
http {
upstream pki_web {
server cmsweb.local:5228;
}
server {
listen 443 ssl http2;
server_name pki.yourdomain.com;
ssl_certificate /etc/nginx/cert.crt;
ssl_certificate_key /etc/nginx/key.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# Security headers
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
location / {
proxy_pass http://pki_web;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
}
# Health check endpoint
location /health {
proxy_pass http://pki_web/health;
access_log off;
}
}
}环境变量
关键安全变量
| 变量 | 说明 | 默认值 | 必需 |
|---|---|---|---|
SQL_SA_PASSWORD | SQL Server SA 密码 | PKI_Strong@Pass123 | 是 |
ADMIN_PASSWORD | 超级管理员密码 | happy | 是 |
SMTP_PASSWORD | SMTP 身份验证密码 | - | 是 |
LICENSE_API_KEY | 许可服务器 API 密钥 | - | 是 |
LICENSE_PUBLIC_KEY | 用于验证许可的公钥 | - | 是 |
数据库配置
- 确保
SQL_SA_PASSWORD符合复杂度要求。 - 生产部署前更改默认密码。
- 生产环境可考虑使用 Docker secrets。
- 在生产环境中使用 MSSQL 时,采用 BYOL 或使用您自己的 MSSQL Server。
电子邮件配置
- 配置有效的 SMTP 凭据。
- 设置适当的发件人邮箱。
- 部署后测试邮件功能。
许可设置
- 向 Securetron 获取许可文件(https://securetron.net/contact/)。
- 将许可文件放入
license/目录:
license/
├── product.lic
└── validation.key- 在
.env中配置许可参数:- 在隔离网络环境中设置
LICENSE_OFFLINE_MODE=true。 - 云部署时设置
LICENSE_ONLINE_VALIDATION=true。 - 联系 Securetron 获取
LICENSE_API_KEY和LICENSE_PUBLIC_KEY。
- 在隔离网络环境中设置
部署步骤
1. 初始部署#
# Set proper permissions
chmod 600 certs/key.pem
chmod 644 certs/cert.crt
# Pull images
docker-compose pull
# Start services
docker-compose up -d
# View logs
docker-compose logs -f2. 验证部署#
# Check container status
docker-compose ps
# Check SQL Server health
docker exec sqlserver /opt/mssql-tools18/bin/sqlcmd \
-S localhost -U sa \
-P "${SQL_SA_PASSWORD}" \
-Q "SELECT name FROM sys.databases"
# Check web application
curl -k https://localhost/health3. 初始设置#
- 访问 Web UI:
https://your-server-domain。 - 使用
.env中的超级管理员凭据登录。 - 完成初始配置:
- 配置组织设置。
- 设置证书颁发机构。
- 配置通知模板。
- 添加用户帐户。
验证与测试
健康检查
# Database health
docker-compose exec sqlserver /opt/mssql-tools18/bin/sqlcmd \
-S localhost -U sa -P "${SQL_SA_PASSWORD}" \
-Q "SELECT 1"
# Application health
curl -f https://localhost/health
# SSL verification
openssl s_client -connect localhost:443 -servername pki.yourdomain.com功能测试
- 用户身份验证:使用管理员凭据登录。
- 证书操作:签发测试证书。
- 电子邮件通知:触发测试通知。
- SCEP 协议:测试 SCEP 注册(如已配置)。
- 备份/恢复:测试数据库备份功能。
故障排除
常见问题
1. SQL Server 连接问题
# Check SQL Server logs
docker-compose logs sqlserver
# Verify network connectivity between containers
docker-compose exec cmsweb ping sqlserver.local2. Web 应用无法启动
# Check application logs
docker-compose logs cmsweb
# Verify environment variables
docker-compose exec cmsweb env | grep ConnectionStrings3. SSL/TLS 问题
# Verify certificate permissions
ls -la certs/
# Test Nginx configuration
docker-compose exec nginx nginx -t4. 许可验证失败
- 确认
license/目录中存在许可文件。 - 检查到许可服务器的网络连接。
- 验证许可到期日期。
日志位置
- 应用日志:容器日志 (
docker-compose logs cmsweb) - 数据库日志:容器日志 (
docker-compose logs sqlserver) - Nginx 日志:容器日志 (
docker-compose logs nginx) - Docker 日志:
journalctl -u docker.service
维护
备份流程
# Database backup
docker-compose exec sqlserver /opt/mssql-tools18/bin/sqlcmd \
-S localhost -U sa -P "${SQL_SA_PASSWORD}" \
-Q "BACKUP DATABASE [${SQL_DATABASE}] TO DISK='/var/opt/mssql/backup/$(date +%Y%m%d).bak'"
# Configuration backup
tar czf pki-backup-$(date +%Y%m%d).tar.gz \
docker-compose.yaml .env nginx.conf certs/ license/更新流程
# Pull latest images
docker-compose pull
# Restart services
docker-compose up -d
# Cleanup old images
docker image prune -f监控
- 资源监控:CPU、内存和磁盘使用情况。
- 证书到期:监控证书有效期。
- 应用日志:定期检查错误。
- 数据库大小:监控数据库增长情况。
安全强化
- 定期更新:保持 Docker 和镜像为最新版本。
- 密码轮换:定期更新密码。
- 访问控制:限制对部署目录的访问。
- 网络安全:正确配置防火墙规则。
- 审计日志:启用并监控审计记录。
- 用户 MFA:使用内置 TOTP MFA 或 Enterprise SSO (SAML / OpenID)。
支持
如需技术支持:
注意:本部署指南适用于 PKI Trust Manager 2.x。请始终参阅适用于具体版本的官方文档。