更新基础架构

This commit is contained in:
技术老胡
2026-01-27 09:07:38 +08:00
parent 28f1a2855c
commit 4a34feec54
36 changed files with 1289 additions and 540 deletions

View File

@@ -15,7 +15,7 @@
use support\Request;
return [
'debug' => true,
'debug' => getenv('APP_DEBUG') ?? true,
'error_reporting' => E_ALL,
'default_timezone' => 'Asia/Shanghai',
'request_class' => Request::class,

View File

@@ -14,7 +14,7 @@
return [
'files' => [
base_path() . '/app/functions.php',
base_path() . '/support/functions.php',
base_path() . '/support/Request.php',
base_path() . '/support/Response.php',
]

View File

@@ -14,7 +14,7 @@
*/
return [
'default' => 'file',
'default' => getenv('CACHE_DRIVER') ?? 'file',
'stores' => [
'file' => [
'driver' => 'file',

View File

@@ -1,84 +1,25 @@
<?php
/**
* MPay V2 支付系统 - 数据库配置
* 基于webman标准配置格式支持MySQL 5.7+
*
* 配置说明:
* - 字符集utf8mb4支持完整的UTF-8字符集包括emoji
* - 排序规则utf8mb4_unicode_ciUnicode标准排序
* - 连接池支持连接池管理提高性能仅支持swoole/swow驱动
* - 读写分离:支持主从数据库配置
*/
return [
// 默认数据库连接
'default' => env('DB_CONNECTION', 'mysql'),
// 数据库连接配置
return [
'default' => getenv('DB_CONNECTION') ?? 'mysql',
'connections' => [
// 主数据库配置
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '192.168.31.200'),
'port' => env('DB_PORT', 3306),
'database' => env('DB_DATABASE', 'mpay_v2'),
'username' => env('DB_USERNAME', 'mpay_v2'),
'password' => env('DB_PASSWORD', 'pXfNWELALrwAAt88'),
'unix_socket' => '',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => env('DB_PREFIX', ''),
'strict' => true,
'engine' => 'InnoDB',
'pool' => [
'max_connections' => env('DB_POOL_MAX_CONNECTIONS', 20),
'min_connections' => env('DB_POOL_MIN_CONNECTIONS', 3),
'wait_timeout' => env('DB_POOL_WAIT_TIMEOUT', 3),
'idle_timeout' => env('DB_POOL_IDLE_TIMEOUT', 60),
'heartbeat_interval' => env('DB_POOL_HEARTBEAT_INTERVAL', 50),
'driver' => getenv('DB_DRIVER') ?? 'mysql',
'host' => getenv('DB_HOST') ?? '127.0.0.1',
'port' => getenv('DB_PORT') ?? '3306',
'database' => getenv('DB_DATABASE') ?? '',
'username' => getenv('DB_USERNAME') ?? '',
'password' => getenv('DB_PASSWORD') ?? '',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_general_ci',
'prefix' => getenv('DB_PREFIX') ?? '',
'strict' => true,
'engine' => null,
'options' => [
PDO::ATTR_EMULATE_PREPARES => false, // Must be false for Swoole and Swow drivers.
],
],
// 读库配置(主从分离)
'mysql_read' => [
'driver' => 'mysql',
'host' => env('DB_READ_HOST', env('DB_HOST', '192.168.31.200')),
'port' => env('DB_READ_PORT', env('DB_PORT', 3306)),
'database' => env('DB_READ_DATABASE', env('DB_DATABASE', 'mpay_v2')),
'username' => env('DB_READ_USERNAME', env('DB_USERNAME', 'mpay_v2')),
'password' => env('DB_READ_PASSWORD', env('DB_PASSWORD', 'pXfNWELALrwAAt88')),
'unix_socket' => '',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => env('DB_PREFIX', ''),
'strict' => true,
'engine' => 'InnoDB',
'pool' => [
'max_connections' => 15,
'min_connections' => 2,
'wait_timeout' => 3,
'idle_timeout' => 60,
'heartbeat_interval' => 50,
],
],
// 写库配置(主从分离)
'mysql_write' => [
'driver' => 'mysql',
'host' => env('DB_WRITE_HOST', env('DB_HOST', '192.168.31.200')),
'port' => env('DB_WRITE_PORT', env('DB_PORT', 3306)),
'database' => env('DB_WRITE_DATABASE', env('DB_DATABASE', 'mpay_v2')),
'username' => env('DB_WRITE_USERNAME', env('DB_USERNAME', 'mpay_v2')),
'password' => env('DB_WRITE_PASSWORD', env('DB_PASSWORD', 'pXfNWELALrwAAt88')),
'unix_socket' => '',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => env('DB_PREFIX', ''),
'strict' => true,
'engine' => 'InnoDB',
'pool' => [
'max_connections' => 10,
'min_connections' => 2,
'max_connections' => 5,
'min_connections' => 1,
'wait_timeout' => 3,
'idle_timeout' => 60,
'heartbeat_interval' => 50,

12
config/jwt.php Normal file
View File

@@ -0,0 +1,12 @@
<?php
return [
// JWT 密钥,生产环境建议从 .env 读取
'secret' => getenv('JWT_SECRET') ?: 'mpay-secret',
// 过期时间(秒)
'ttl' => (int)(getenv('JWT_TTL') ?: 7200),
// 签名算法
'alg' => getenv('JWT_ALG') ?: 'HS256',
];

View File

@@ -1,4 +1,5 @@
<?php
/**
* This file is part of webman.
*
@@ -12,4 +13,9 @@
* @license http://www.opensource.org/licenses/mit-license.php MIT License
*/
return [];
return [
// 超全局中间件-覆盖插件
'@' => [
app\common\middleware\Cors::class, //跨域中间件
],
];

View File

@@ -1,4 +1,5 @@
<?php
/**
* MPay V2 支付系统 - Redis配置
* Redis 6.0+ 缓存和队列配置
@@ -7,91 +8,16 @@
return [
// 默认Redis连接
'default' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', ''),
'port' => env('REDIS_PORT', 6379),
'database' => env('REDIS_DATABASE', 0),
'host' => getenv('REDIS_HOST') ?? '127.0.0.1',
'password' => getenv('REDIS_PASSWORD') ?? '',
'port' => getenv('REDIS_PORT') ?? 6379,
'database' => getenv('REDIS_DATABASE') ?? 0,
'pool' => [
'max_connections' => env('REDIS_POOL_MAX_CONNECTIONS', 20),
'min_connections' => env('REDIS_POOL_MIN_CONNECTIONS', 5),
'wait_timeout' => env('REDIS_POOL_WAIT_TIMEOUT', 3),
'idle_timeout' => env('REDIS_POOL_IDLE_TIMEOUT', 60),
'heartbeat_interval' => env('REDIS_POOL_HEARTBEAT_INTERVAL', 50),
],
'options' => [
'prefix' => env('CACHE_PREFIX', 'mpay_v2_'),
],
],
// 缓存专用Redis连接
'cache' => [
'host' => env('REDIS_CACHE_HOST', env('REDIS_HOST', '127.0.0.1')),
'password' => env('REDIS_CACHE_PASSWORD', env('REDIS_PASSWORD', '')),
'port' => env('REDIS_CACHE_PORT', env('REDIS_PORT', 6379)),
'database' => env('REDIS_CACHE_DATABASE', 1),
'pool' => [
'max_connections' => 15,
'min_connections' => 3,
'max_connections' => 20,
'min_connections' => 5,
'wait_timeout' => 3,
'idle_timeout' => 60,
'heartbeat_interval' => 50,
],
'options' => [
'prefix' => env('CACHE_PREFIX', 'mpay_v2_cache_'),
],
],
// 队列专用Redis连接
'queue' => [
'host' => env('REDIS_QUEUE_HOST', env('REDIS_HOST', '127.0.0.1')),
'password' => env('REDIS_QUEUE_PASSWORD', env('REDIS_PASSWORD', '')),
'port' => env('REDIS_QUEUE_PORT', env('REDIS_PORT', 6379)),
'database' => env('REDIS_QUEUE_DATABASE', 2),
'pool' => [
'max_connections' => 10,
'min_connections' => 2,
'wait_timeout' => 3,
'idle_timeout' => 60,
'heartbeat_interval' => 50,
],
'options' => [
'prefix' => env('QUEUE_PREFIX', 'mpay_v2_queue_'),
],
],
// 会话存储Redis连接
'session' => [
'host' => env('REDIS_SESSION_HOST', env('REDIS_HOST', '127.0.0.1')),
'password' => env('REDIS_SESSION_PASSWORD', env('REDIS_PASSWORD', '')),
'port' => env('REDIS_SESSION_PORT', env('REDIS_PORT', 6379)),
'database' => env('REDIS_SESSION_DATABASE', 3),
'pool' => [
'max_connections' => 10,
'min_connections' => 2,
'wait_timeout' => 3,
'idle_timeout' => 60,
'heartbeat_interval' => 50,
],
'options' => [
'prefix' => 'mpay_v2_session_',
],
],
// JWT黑名单Redis连接
'jwt_blacklist' => [
'host' => env('REDIS_JWT_HOST', env('REDIS_HOST', '127.0.0.1')),
'password' => env('REDIS_JWT_PASSWORD', env('REDIS_PASSWORD', '')),
'port' => env('REDIS_JWT_PORT', env('REDIS_PORT', 6379)),
'database' => env('REDIS_JWT_DATABASE', 4),
'pool' => [
'max_connections' => 5,
'min_connections' => 1,
'wait_timeout' => 3,
'idle_timeout' => 60,
'heartbeat_interval' => 50,
],
'options' => [
'prefix' => 'mpay_v2_jwt_blacklist_',
],
],
];

View File

@@ -1,4 +1,5 @@
<?php
/**
* This file is part of webman.
*
@@ -13,9 +14,31 @@
*/
use Webman\Route;
use support\Response;
use support\Request;
// 管理后台路由
require_once base_path() . '/app/routes/admin.php';
// 默认路由兜底
Route::fallback(function (Request $request) {
// 处理预检请求
if (strtoupper($request->method()) === 'OPTIONS') {
$response = response('', 204);
$response->withHeaders([
'Access-Control-Allow-Credentials' => 'true',
'Access-Control-Max-Age' => '86400',
'Access-Control-Allow-Origin' => $request->header('origin', '*'),
'Access-Control-Allow-Methods' => $request->header('access-control-request-method', '*'),
'Access-Control-Allow-Headers' => $request->header('access-control-request-headers', '*'),
]);
return $response;
}
});
/**
* 关闭默认路由
*/
Route::disableDefaultRoute();

View File

@@ -1,4 +1,5 @@
<?php
/**
* This file is part of webman.
*
@@ -18,6 +19,6 @@
return [
'enable' => true,
'middleware' => [ // Static file Middleware
//app\middleware\StaticFile::class,
app\common\middleware\StaticFile::class,
],
];
];