You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
4.3 KiB
4.3 KiB
Docker容器化部署指南
支付证书问题解决方案
本项目已经解决了Docker容器中支付证书路径失效的问题,支持多种证书加载方式。
目录结构
project-root/
├── Dockerfile
├── docker-compose.yml
├── certs/ # 证书目录(需要手动创建)
│ ├── wechat/ # 微信支付证书
│ │ ├── apiclient_key.pem
│ │ ├── apiclient_cert.pem
│ │ └── wechatpay_cert.pem
│ └── alipay/ # 支付宝证书
│ ├── app_private_key.pem
│ ├── appCertPublicKey.crt
│ ├── alipayCertPublicKey.crt
│ └── alipayRootCert.crt
├── logs/ # 日志目录
├── uploads/ # 上传文件目录
└── src/
部署步骤
1. 准备证书文件
创建证书目录并放置证书文件:
# 创建证书目录
mkdir -p certs/wechat
mkdir -p certs/alipay
# 复制微信支付证书到对应目录
cp /path/to/your/apiclient_key.pem certs/wechat/
cp /path/to/your/apiclient_cert.pem certs/wechat/
cp /path/to/your/wechatpay_cert.pem certs/wechat/
# 复制支付宝证书到对应目录
cp /path/to/your/app_private_key.pem certs/alipay/
cp /path/to/your/appCertPublicKey.crt certs/alipay/
cp /path/to/your/alipayCertPublicKey.crt certs/alipay/
cp /path/to/your/alipayRootCert.crt certs/alipay/
# 设置证书文件权限(只读)
chmod -R 444 certs/
2. 配置环境变量
创建 .env
文件(可选):
# 应用配置
SPRING_PROFILES_ACTIVE=prod
JAVA_OPTS=-Xms512m -Xmx1024m
# 数据库配置
MYSQL_ROOT_PASSWORD=root123456
MYSQL_DATABASE=modules
MYSQL_USER=modules
MYSQL_PASSWORD=8YdLnk7KsPAyDXGA
# Redis配置
REDIS_PASSWORD=redis_WSDb88
3. 构建和启动
# 构建应用
mvn clean package -DskipTests
# 启动所有服务
docker-compose up -d
# 查看服务状态
docker-compose ps
# 查看应用日志
docker-compose logs -f cms-app
4. 验证部署
# 检查应用健康状态
curl http://localhost:9200/actuator/health
# 检查证书是否正确加载
docker exec cms-java-app ls -la /app/certs/
证书加载模式
开发环境 (CLASSPATH)
- 证书文件放在
src/main/resources/certs/
目录下 - 打包时会包含在jar包中
- 适合开发和测试环境
生产环境 (VOLUME)
- 证书文件通过Docker挂载卷加载
- 证书文件在宿主机上,挂载到容器的
/app/certs
目录 - 支持证书文件的动态更新(重启容器后生效)
文件系统模式 (FILESYSTEM)
- 直接从文件系统路径加载证书
- 适合传统部署方式
配置说明
application.yml 配置
certificate:
load-mode: VOLUME # 证书加载模式
cert-root-path: /app/certs # 证书根目录
wechat-pay:
dev:
api-v3-key: "your-api-v3-key"
private-key-file: "apiclient_key.pem"
apiclient-cert-file: "apiclient_cert.pem"
wechatpay-cert-file: "wechatpay_cert.pem"
环境特定配置
- 开发环境:
application-dev.yml
- 使用CLASSPATH模式 - 生产环境:
application-prod.yml
- 使用VOLUME模式
故障排除
1. 证书文件找不到
# 检查证书文件是否存在
docker exec cms-java-app ls -la /app/certs/
# 检查文件权限
docker exec cms-java-app ls -la /app/certs/wechat/
2. 支付接口调用失败
# 查看应用日志
docker-compose logs cms-app | grep -i cert
# 检查证书配置
docker exec cms-java-app cat /app/application.yml | grep -A 10 certificate
3. 容器启动失败
# 查看详细错误信息
docker-compose logs cms-app
# 检查容器状态
docker-compose ps
安全建议
- 证书文件权限: 设置为只读权限 (444)
- 证书目录权限: 限制访问权限
- 敏感信息: 使用环境变量或Docker secrets管理敏感配置
- 网络安全: 使用内部网络,限制端口暴露
更新证书
- 停止应用容器:
docker-compose stop cms-app
- 更新证书文件到
certs/
目录 - 重启应用容器:
docker-compose start cms-app
监控和日志
- 应用日志:
./logs/
目录 - 容器日志:
docker-compose logs
- 健康检查:访问
/actuator/health
端点
通过以上配置,你的应用在Docker容器中就能正确加载支付证书了!