初始化

This commit is contained in:
乘风
2026-01-05 10:11:01 +08:00
parent 3c4851b9ca
commit f1056bab01
99 changed files with 28576 additions and 36 deletions

View File

@@ -0,0 +1,74 @@
<?php
/**
* 数据采集任务配置
*
* 说明:
* - 此配置文件仅保留数据库同步任务等系统级任务
* - 其他数据采集任务通过数据库 data_collection_tasks 表进行管理和配置
* - 数据库中的任务支持启动、暂停、删除等操作,由前端界面进行管理
* - 每个任务配置:数据源引用、业务处理类、调度规则、分片配置
* - 数据处理逻辑在业务代码中实现
*/
return [
// 全局配置
'global' => [
// 分布式锁配置
'distributed_lock' => [
'driver' => 'redis',
'ttl' => 300,
'retry_times' => 3,
'retry_delay' => 1000,
],
// 错误处理配置
'error_handling' => [
'max_retries' => 3,
'retry_delay' => 5,
'circuit_breaker' => [
'enabled' => true,
'failure_threshold' => 10,
'recovery_timeout' => 60,
],
],
],
// 采集任务列表(配置文件中的任务)
'tasks' => [
// 数据库同步任务(实时同步源数据库到目标数据库)
// 注意:这是一个系统级任务,通过配置文件管理,不从数据库加载
'database_sync' => [
'name' => '数据库实时同步',
'enabled' => false,
// 源数据库(从 data_sources.php 引用)
'source_data_source' => 'kr_mongodb',
// 目标数据库(从 data_sources.php 引用)
'target_data_source' => 'sync_mongodb',
// 业务处理类
'handler_class' => \app\service\DataCollection\Handler\DatabaseSyncHandler::class,
// 调度配置(数据库同步是持续运行的,不需要定时调度)
'schedule' => [
'cron' => null, // 不需要 Cron启动后持续运行
'enabled' => false, // 禁用定时调度,启动后持续运行
],
// 分片配置(每个 Worker 可以监听不同的数据库)
'sharding' => [
'strategy' => 'by_database', // 按数据库分片
'shard_count' => 1,
],
// 同步状态存储配置
'sync_state' => [
'storage' => 'file', // 使用文件存储进度DatabaseSyncService 使用文件)
'key_prefix' => 'database_sync:',
],
// 注意:业务逻辑相关配置(数据库列表、排除规则、性能配置等)
// 已移到 DatabaseSyncHandler 类中,使用默认值或从独立配置读取
],
],
];

63
config/data_sources.php Normal file
View File

@@ -0,0 +1,63 @@
<?php
/**
* 数据源连接配置
*
* 说明:
* - 所有数据库连接的配置集合
* - 只包含连接信息,不包含业务逻辑
* - 可以被其他配置引用(如任务采集配置)
*/
return [
// 卡若的数据库(爬虫抓取的业务数据库)
'kr_mongodb' => [
'type' => 'mongodb',
'host' => getenv('KR_MONGODB_HOST'),
'port' => (int)getenv('KR_MONGODB_PORT'),
'database' => getenv('KR_MONGODB_DATABASE'),
'username' => getenv('KR_MONGODB_USER'),
'password' => getenv('KR_MONGODB_PASSWORD'),
'auth_source' => getenv('KR_MONGODB_AUTH_SOURCE'),
'options' => [
'ssl' => false,
'connectTimeoutMS' => 3000,
'socketTimeoutMS' => 5000,
'authMechanism' => 'SCRAM-SHA-256',
],
],
// 标签数据库(主机标签数据库)
'tag_mongodb' => [
'type' => 'mongodb',
'host' => getenv('TAG_MONGODB_HOST') ?: '192.168.1.106',
'port' => (int)(getenv('TAG_MONGODB_PORT') ?: 27017),
'database' => getenv('TAG_MONGODB_DATABASE') ?: 'ckb',
'username' => getenv('TAG_MONGODB_USER') ?: 'ckb',
'password' => getenv('TAG_MONGODB_PASSWORD') ?: '123456',
'auth_source' => getenv('TAG_MONGODB_AUTH') ?: 'ckb',
'options' => [
'ssl' => false,
'connectTimeoutMS' => 3000,
'socketTimeoutMS' => 5000,
'authMechanism' => 'SCRAM-SHA-256',
],
],
// 同步目标数据库主机同步KR数据库
'sync_mongodb' => [
'type' => 'mongodb',
'host' => getenv('SYNC_MONGODB_HOST'),
'port' => (int)getenv('SYNC_MONGODB_PORT'),
'database' => getenv('SYNC_MONGODB_DATABASE') ?: 'KR',
'username' => getenv('SYNC_MONGODB_USER'),
'password' => getenv('SYNC_MONGODB_PASS'),
'auth_source' => getenv('SYNC_MONGODB_AUTH'),
'options' => [
'ssl' => false,
'connectTimeoutMS' => 3000,
'socketTimeoutMS' => 5000,
'authMechanism' => 'SCRAM-SHA-256',
],
],
];

60
config/encryption.php Normal file
View File

@@ -0,0 +1,60 @@
<?php
/**
* 加密配置
*
* 用于身份证等敏感数据的加密和哈希
*/
return [
// AES 加密配置
'aes' => [
// 加密密钥32字节256位
// 注意:生产环境应使用环境变量或密钥管理服务,不要硬编码
// 使用 getenv() 获取环境变量,如果不存在则使用默认值
// 默认密钥至少32字符实际使用时会被 SHA256 哈希处理)
'key' => getenv('ENCRYPTION_AES_KEY') ?: 'your-32-byte-secret-key-here-12345678',
// 加密方法
'cipher' => 'AES-256-CBC',
// IV 长度(字节)
'iv_length' => 16,
],
// 哈希配置
'hash' => [
// 哈希算法(用于身份证哈希)
'algorithm' => 'sha256',
// 是否使用盐值(可选,增强安全性)
'use_salt' => true,
// 盐值(如果启用)
// 使用 getenv() 获取环境变量,如果不存在则使用默认值
'salt' => getenv('ENCRYPTION_HASH_SALT') ?: 'your-hash-salt-here',
],
// 脱敏配置
'masking' => [
// 身份证脱敏规则保留前6位和后4位中间用*替代
'id_card' => [
'prefix_length' => 6,
'suffix_length' => 4,
'mask_char' => '*',
],
// 手机号脱敏规则保留前3位和后4位中间用*替代
'phone' => [
'prefix_length' => 3,
'suffix_length' => 4,
'mask_char' => '*',
],
// 邮箱脱敏规则:保留@前的前2位和@后的域名
'email' => [
'prefix_length' => 2,
'mask_char' => '*',
],
],
];

81
config/queue.php Normal file
View File

@@ -0,0 +1,81 @@
<?php
/**
* RabbitMQ 消息队列配置
*
* 用于标签系统的异步消息处理
*/
return [
'default' => 'rabbitmq',
'connections' => [
'rabbitmq' => [
'driver' => 'rabbitmq',
'host' => getenv('RABBITMQ_HOST') ?: '127.0.0.1',
'port' => (int)(getenv('RABBITMQ_PORT') ?: 5672),
'user' => getenv('RABBITMQ_USER') ?: 'guest',
'password' => getenv('RABBITMQ_PASSWORD') ?: 'guest',
'vhost' => getenv('RABBITMQ_VHOST') ?: '/',
'timeout' => 10, // 连接超时时间(秒)
// 队列配置
'queues' => [
// 数据同步队列:外部数据源轮询后推送的数据
'data_sync' => [
'name' => 'data_sync_queue',
'durable' => true, // 队列持久化
'auto_delete' => false,
'arguments' => [],
],
// 标签计算队列:消费记录写入后触发标签计算
'tag_calculation' => [
'name' => 'tag_calculation_queue',
'durable' => true, // 队列持久化
'auto_delete' => false,
'arguments' => [],
],
],
// 交换机配置
'exchanges' => [
'data_sync' => [
'name' => 'data_sync_exchange',
'type' => 'direct',
'durable' => true,
'auto_delete' => false,
],
'tag_calculation' => [
'name' => 'tag_calculation_exchange',
'type' => 'direct',
'durable' => true,
'auto_delete' => false,
],
],
// 路由键配置
'routing_keys' => [
'data_sync' => 'data.sync',
'tag_calculation' => 'tag.calculation',
],
],
],
// 消息配置
'message' => [
'delivery_mode' => 2, // 消息持久化2 = 持久化)
'content_type' => 'application/json',
],
// 消费者配置
'consumer' => [
'data_sync' => [
'prefetch_count' => 10, // 每次处理10条消息批量处理
'no_ack' => false, // 需要确认消息
],
'tag_calculation' => [
'prefetch_count' => 1, // 每次只处理一条消息
'no_ack' => false, // 需要确认消息
],
],
];