189 lines
4.3 KiB
Markdown
189 lines
4.3 KiB
Markdown
# 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. 准备证书文件
|
||
|
||
创建证书目录并放置证书文件:
|
||
|
||
```bash
|
||
# 创建证书目录
|
||
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` 文件(可选):
|
||
|
||
```bash
|
||
# 应用配置
|
||
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. 构建和启动
|
||
|
||
```bash
|
||
# 构建应用
|
||
mvn clean package -DskipTests
|
||
|
||
# 启动所有服务
|
||
docker-compose up -d
|
||
|
||
# 查看服务状态
|
||
docker-compose ps
|
||
|
||
# 查看应用日志
|
||
docker-compose logs -f cms-app
|
||
```
|
||
|
||
### 4. 验证部署
|
||
|
||
```bash
|
||
# 检查应用健康状态
|
||
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 配置
|
||
|
||
```yaml
|
||
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. 证书文件找不到
|
||
|
||
```bash
|
||
# 检查证书文件是否存在
|
||
docker exec cms-java-app ls -la /app/certs/
|
||
|
||
# 检查文件权限
|
||
docker exec cms-java-app ls -la /app/certs/wechat/
|
||
```
|
||
|
||
### 2. 支付接口调用失败
|
||
|
||
```bash
|
||
# 查看应用日志
|
||
docker-compose logs cms-app | grep -i cert
|
||
|
||
# 检查证书配置
|
||
docker exec cms-java-app cat /app/application.yml | grep -A 10 certificate
|
||
```
|
||
|
||
### 3. 容器启动失败
|
||
|
||
```bash
|
||
# 查看详细错误信息
|
||
docker-compose logs cms-app
|
||
|
||
# 检查容器状态
|
||
docker-compose ps
|
||
```
|
||
|
||
## 安全建议
|
||
|
||
1. **证书文件权限**: 设置为只读权限 (444)
|
||
2. **证书目录权限**: 限制访问权限
|
||
3. **敏感信息**: 使用环境变量或Docker secrets管理敏感配置
|
||
4. **网络安全**: 使用内部网络,限制端口暴露
|
||
|
||
## 更新证书
|
||
|
||
1. 停止应用容器:`docker-compose stop cms-app`
|
||
2. 更新证书文件到 `certs/` 目录
|
||
3. 重启应用容器:`docker-compose start cms-app`
|
||
|
||
## 监控和日志
|
||
|
||
- 应用日志:`./logs/` 目录
|
||
- 容器日志:`docker-compose logs`
|
||
- 健康检查:访问 `/actuator/health` 端点
|
||
|
||
通过以上配置,你的应用在Docker容器中就能正确加载支付证书了!
|