Files
JChargePointProtocol/docs/部署与配置.md
2025-10-28 14:39:06 +08:00

314 lines
10 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.
# 部署与配置
<cite>
**本文档引用的文件**
- [docker-compose.monolith.yml](file://docker/docker-compose.monolith.yml)
- [docker-compose.postgres.yml](file://docker/docker-compose.postgres.yml)
- [docker-compose.redis-standalone.yml](file://docker/docker-compose.redis-standalone.yml)
- [docker-compose.kafka.yml](file://docker/docker-compose.kafka.yml)
- [app-service.yml](file://jcpp-app-bootstrap/src/main/resources/app-service.yml)
- [protocol-service.yml](file://jcpp-protocol-bootstrap/src/main/resources/protocol-service.yml)
- [app.Dockerfile](file://docker/app.Dockerfile)
- [protocol.Dockerfile](file://docker/protocol.Dockerfile)
- [start.sh](file://docker/start.sh)
- [log4j2.xml](file://jcpp-app-bootstrap/src/main/resources/log4j2.xml)
- [log4j2.xml](file://jcpp-protocol-bootstrap/src/main/resources/log4j2.xml)
- [kafka.env](file://docker/kafka.env)
</cite>
## 目录
1. [Docker部署指南](#docker部署指南)
2. [核心配置文件详解](#核心配置文件详解)
3. [环境管理与配置](#环境管理与配置)
4. [部署后验证](#部署后验证)
## Docker部署指南
JChargePointProtocol项目提供了基于Docker的完整部署方案通过多个`docker-compose.*.yml`
文件实现模块化部署。用户可以根据需要选择部署单体服务、数据库、缓存和消息队列等组件。
### 单体服务部署
使用`docker-compose.monolith.yml`文件部署包含应用和协议处理功能的单体服务。该服务通过`app.Dockerfile`
构建暴露8080端口用于HTTP服务38001-38011端口用于不同协议的TCP监听。
```mermaid
graph TB
subgraph "单体服务"
App[jcpp-node-0]
App --> Undertow[Undertow Web服务器]
App --> Netty[Netty协议处理器]
end
App --> Postgres[PostgreSQL]
App --> Redis[Redis]
App --> Kafka[Kafka]
```
**图示来源**
- [docker-compose.monolith.yml](file://docker/docker-compose.monolith.yml)
- [app.Dockerfile](file://docker/app.Dockerfile)
**本节来源**
- [docker-compose.monolith.yml](file://docker/docker-compose.monolith.yml)
### 数据库部署
使用`docker-compose.postgres.yml`文件部署PostgreSQL数据库服务。该服务使用Bitnami提供的PostgreSQL镜像配置了持久化卷
`jcpp_pg_data`以确保数据持久化。数据库名为`jcpp`,默认用户名和密码均为`postgres`监听5432端口。
```mermaid
graph TB
subgraph "数据库服务"
Postgres[PostgreSQL]
Volume[jcpp_pg_data卷]
end
Postgres --> Volume
```
**图示来源**
- [docker-compose.postgres.yml](file://docker/docker-compose.postgres.yml)
**本节来源**
- [docker-compose.postgres.yml](file://docker/docker-compose.postgres.yml)
### 缓存部署
项目提供了三种Redis部署模式单机模式(`docker-compose.redis-standalone.yml`)、哨兵模式和集群模式。推荐在生产环境中使用集群模式以确保高可用性。单机模式配置了密码
`sanbing`监听6379端口。
```mermaid
graph TB
subgraph "缓存服务"
Redis[Redis]
end
Redis --> Password[密码认证]
```
**图示来源**
- [docker-compose.redis-standalone.yml](file://docker/docker-compose.redis-standalone.yml)
**本节来源**
- [docker-compose.redis-standalone.yml](file://docker/docker-compose.redis-standalone.yml)
### 消息队列部署
使用`docker-compose.kafka.yml`文件部署Kafka消息队列系统包含Zookeeper、Kafka Broker、Kafka Exporter和Kafka
UI四个组件。Zookeeper用于服务发现和配置管理Kafka Broker处理消息Kafka Exporter提供监控指标Kafka UI提供Web管理界面。
```mermaid
graph TB
Zookeeper[Zookeeper]
Kafka[Kafka Broker]
Exporter[Kafka Exporter]
UI[Kafka UI]
Kafka --> Zookeeper
Exporter --> Kafka
UI --> Kafka
```
**图示来源**
- [docker-compose.kafka.yml](file://docker/docker-compose.kafka.yml)
- [kafka.env](file://docker/kafka.env)
**本节来源**
- [docker-compose.kafka.yml](file://docker/docker-compose.kafka.yml)
## 核心配置文件详解
### 应用服务配置 (app-service.yml)
`app-service.yml`是应用服务的核心配置文件,定义了服务运行所需的各种参数。
#### 服务与Web服务器配置
- **server.port**: HTTP服务监听端口默认8080可通过`HTTP_BIND_PORT`环境变量覆盖
- **server.undertow**: Undertow服务器配置包括IO线程数(默认4)和工作线程数(默认128)
- **spring.datasource**: 数据库连接配置包括URL、用户名、密码和Hikari连接池大小(默认64)
#### 安全与认证配置
- **security.jwt**: JWT令牌配置包括过期时间、刷新令牌时间和签名密钥
- **security.settings.passwordPolicy**: 密码策略配置,定义密码最小长度(默认6)等安全要求
#### 缓存配置
- **cache.type**: 缓存类型,可选`caffeine`(本地缓存)或`redis`(分布式缓存)
- **redis**: Redis连接配置包括主机、端口、密码和连接池参数
#### 协议服务配置
- **service.type**: 服务类型,可选`monolith`(单体)、`app`(应用后端)或`protocol`(协议前置)
- **service.protocol.sessions**: 协议会话配置,包括默认不活动超时时间(默认600秒)
```mermaid
classDiagram
class AppServiceConfig {
+String server.port
+String server.undertow.threads.io
+String server.undertow.threads.worker
+String spring.datasource.url
+String spring.datasource.hikari.maximum-pool-size
+String security.jwt.tokenExpirationTime
+String cache.type
+String redis.password
+String service.type
+String service.protocol.sessions.default-inactivity-timeout-in-sec
}
```
**图示来源**
- [app-service.yml](file://jcpp-app-bootstrap/src/main/resources/app-service.yml)
**本节来源**
- [app-service.yml](file://jcpp-app-bootstrap/src/main/resources/app-service.yml)
### 协议服务配置 (protocol-service.yml)
`protocol-service.yml`是协议服务的核心配置文件,专注于协议处理相关的配置。
#### 服务类型与线程池
- **service.type**: 服务类型,默认为`protocol`,表示纯协议解析前置服务
- **service.thread-pool.sharding**: 分片线程池配置,包括并行度(默认8)和哈希函数
#### 协议监听器配置
- **service.protocols.*.listener.tcp.bind-port**: 不同协议版本的TCP监听端口如云快充V150使用38001端口
- **service.protocols.*.listener.tcp.worker-group-thread-count**: Netty工作线程组大小默认16
#### 消息转发配置
- **service.protocols.*.forwarder.type**: 消息转发类型,在协议服务中通常为`kafka`
- **service.protocols.*.forwarder.kafka.topic**: Kafka主题名称默认为`protocol_uplink`
```mermaid
classDiagram
class ProtocolServiceConfig {
+String service.type
+String service.thread-pool.sharding.parallelism
+String service.protocols.yunkuaichongV150.listener.tcp.bind-port
+String service.protocols.yunkuaichongV150.listener.tcp.worker-group-thread-count
+String service.protocols.yunkuaichongV150.forwarder.type
+String service.protocols.yunkuaichongV150.forwarder.kafka.topic
}
```
**图示来源**
- [protocol-service.yml](file://jcpp-protocol-bootstrap/src/main/resources/protocol-service.yml)
**本节来源**
- [protocol-service.yml](file://jcpp-protocol-bootstrap/src/main/resources/protocol-service.yml)
## 环境管理与配置
### 配置文件管理
项目通过Spring Boot的配置机制支持多环境配置。核心配置文件`app-service.yml``protocol-service.yml`中的所有参数都支持通过环境变量覆盖,遵循
`${ENV_VAR_NAME:default_value}`的格式。
#### 开发环境
在开发环境中,可以使用内存队列(`queue.type=memory`)来简化部署避免依赖Kafka。数据库连接可以指向本地PostgreSQL实例。
#### 生产环境
在生产环境中应使用完整的Docker Compose配置包括PostgreSQL、Redis集群和Kafka。配置文件应设置适当的线程池大小和连接池参数以应对高并发。
### 环境变量使用
环境变量是管理不同环境配置的主要方式。以下是一些关键的环境变量:
- **HTTP_BIND_PORT**: HTTP服务端口
- **SPRING_DATASOURCE_URL**: 数据库连接字符串
- **REDIS_PASSWORD**: Redis密码
- **KAFKA_SERVERS**: Kafka Broker地址列表
- **SERVICE_TYPE**: 服务类型
- **APP_LOG_LEVEL**: 应用日志级别
- **PROTOCOLS_LOG_LEVEL**: 协议日志级别
环境变量可以在`docker-compose.yml`文件的`environment`部分设置,也可以在启动脚本中通过`export`命令设置。
```mermaid
graph TD
A[环境变量] --> B[覆盖配置文件默认值]
B --> C{环境类型}
C --> D[开发环境]
C --> E[测试环境]
C --> F[生产环境]
D --> G[使用内存队列]
D --> H[本地数据库]
E --> I[独立测试数据库]
E --> J[独立Redis]
F --> K[集群化部署]
F --> L[高可用配置]
```
**图示来源**
- [app-service.yml](file://jcpp-app-bootstrap/src/main/resources/app-service.yml)
- [protocol-service.yml](file://jcpp-protocol-bootstrap/src/main/resources/protocol-service.yml)
**本节来源**
- [app-service.yml](file://jcpp-app-bootstrap/src/main/resources/app-service.yml)
- [protocol-service.yml](file://jcpp-protocol-bootstrap/src/main/resources/protocol-service.yml)
## 部署后验证
### 服务日志检查
部署后应首先检查服务日志以确认服务正常启动。日志配置由`log4j2.xml`文件定义,主要日志文件位于`logs/jcpp`目录下。
#### 日志文件说明
- **jcpp-app.log**: 应用服务主日志
- **jcpp-protocol.log**: 协议服务主日志
- **accesslog**: HTTP访问日志
- **gc.log**: JVM垃圾回收日志
- **heapdump**: 内存溢出时的堆转储文件
#### 日志级别配置
通过`APP_LOG_LEVEL``PROTOCOLS_LOG_LEVEL`环境变量可以控制日志级别。推荐在生产环境中使用`INFO`级别,在调试时使用`TRACE`级别。
```mermaid
graph TD
A[日志检查] --> B[查看启动日志]
B --> C{是否包含错误}
C --> |是| D[分析错误原因]
C --> |否| E[检查服务端口]
E --> F[验证API功能]
```
**图示来源**
- [log4j2.xml](file://jcpp-app-bootstrap/src/main/resources/log4j2.xml)
- [log4j2.xml](file://jcpp-protocol-bootstrap/src/main/resources/log4j2.xml)
**本节来源**
- [log4j2.xml](file://jcpp-app-bootstrap/src/main/resources/log4j2.xml)
- [log4j2.xml](file://jcpp-protocol-bootstrap/src/main/resources/log4j2.xml)
### API功能测试
通过调用API接口验证服务功能是否正常。主要测试以下功能
1. **健康检查**: 访问`/actuator/health`端点确认服务健康状态
2. **协议连接**: 使用TCP客户端连接协议端口(如38001)测试协议监听器是否正常工作
3. **核心业务API**: 调用充电桩管理、枪管理等API验证业务功能
测试时应确保所有依赖服务(PostgreSQL、Redis、Kafka)都已正常运行,并且网络连接正常。