diff --git a/.env.example b/.env.example index 218f3c1..ea202d3 100644 --- a/.env.example +++ b/.env.example @@ -107,3 +107,5 @@ DASHBOARD_BIRTHDAY_PATH=/birthdays TRUSTED_PROXIES= NODE_TYPE=master +NODE_ID= +NODE_IP= diff --git a/app/Console/Commands/Cluster/Sync.php b/app/Console/Commands/Cluster/Sync.php index 9406649..245e878 100644 --- a/app/Console/Commands/Cluster/Sync.php +++ b/app/Console/Commands/Cluster/Sync.php @@ -34,7 +34,7 @@ public function handle(): int { $this->info('正在下载配置。'); - $node_type = config('settings.node_type'); + $node_type = config('settings.node.type'); if ($node_type === 'master') { $confirm = $this->ask('主节点同步将会恢复上一次数据,确定吗?', 'yes'); diff --git a/app/Console/Commands/Cluster/Upload.php b/app/Console/Commands/Cluster/Upload.php index 9c5cf45..07d53f0 100644 --- a/app/Console/Commands/Cluster/Upload.php +++ b/app/Console/Commands/Cluster/Upload.php @@ -31,7 +31,7 @@ class Upload extends Command */ public function handle(): int { - $node_type = config('settings.node_type'); + $node_type = config('settings.node.type'); if ($node_type === 'slave') { $this->info('正在同步从节点配置文件。'); diff --git a/app/Console/Commands/Init.php b/app/Console/Commands/Init.php index b36d130..184b33d 100644 --- a/app/Console/Commands/Init.php +++ b/app/Console/Commands/Init.php @@ -4,6 +4,7 @@ use Illuminate\Console\Command; use Illuminate\Support\Facades\Artisan; +use Illuminate\Support\Str; use Symfony\Component\Console\Command\Command as CommandAlias; class Init extends Command @@ -29,20 +30,37 @@ class Init extends Command */ public function handle(): int { - $this->info('正在删除 bootstrap/cache 目录。'); - $cache_path = base_path('bootstrap/cache'); - $files = glob($cache_path . '/*'); - foreach ($files as $file) { - if (is_file($file)) { - unlink($file); - } + // 重写 .env 文件中的 NODE_ID + $this->info('正在重写 .env 文件中的 NODE_ID。'); + + $node_id = Str::random(8); + + if (config('settings.node.type') === 'master') { + $node_id = 'master'; } - Artisan::call('route:clear'); - Artisan::call('config:clear'); - Artisan::call('view:clear'); + $env = file_get_contents(base_path('.env')); - Artisan::call('optimize'); + $env = preg_replace('/^NODE_ID=.*$/m', 'NODE_ID=' . $node_id, $env); + + file_put_contents(base_path('.env'), $env); + + if (!config('settings.node.ip')) { + $this->error('请先配置节点 IP。'); + return CommandAlias::FAILURE; + } + + // 刷新配置缓存 + $this->info('正在刷新配置缓存。'); + Artisan::call('config:cache'); + + // redis 创建一个 hash + $this->info('正在创建 Redis hash。'); + $redis = app('redis')->connection(); + $redis->hset('nodes', $node_id, [ + 'type' => config('settings.node.type'), + 'id' => $node_id, + ]); return CommandAlias::SUCCESS; } diff --git a/config/settings.php b/config/settings.php index 005ebc6..99ac69f 100644 --- a/config/settings.php +++ b/config/settings.php @@ -15,5 +15,9 @@ 'base_url' => env('DASHBOARD_BASE_URL', 'https://dash.laecloud.com'), 'birthday_path' => env('DASHBOARD_BIRTHDAY_PATH', '/birthdays'), ], - 'node_type' => env('NODE_TYPE', 'master') + 'node' => [ + 'type' => env('NODE_TYPE', 'master'), + 'id' => env('NODE_ID'), + 'ip' => env('NODE_IP'), + ] ];