This commit is contained in:
www
2026-05-26 17:02:57 +08:00
parent 7f910ee22f
commit 0096805a49
14 changed files with 830 additions and 58 deletions

View File

@@ -0,0 +1,88 @@
<?php
use think\migration\Migrator;
use think\migration\db\Column;
class CreateServerNodeTable extends Migrator
{
public function up()
{
if (!$this->hasTable('server_node')) {
$this->table('server_node', ['id' => false])
->addColumn(Column::integer('sn_id')->setUnsigned()->setIdentity(true)->setComment('节点ID'))
->addColumn(Column::string('sn_name', 255)->setDefault('')->setComment('节点名称'))
->addColumn(Column::string('sn_code', 100)->setNullable(true)->setComment('节点编码'))
->addColumn(Column::string('sn_host', 255)->setDefault('')->setComment('SSH 主机/IP'))
->addColumn(Column::smallInteger('sn_port')->setUnsigned()->setDefault(22)->setComment('SSH 端口'))
->addColumn(Column::string('sn_username', 100)->setDefault('')->setComment('SSH 用户名'))
->addColumn(Column::string('sn_auth_type', 20)->setDefault('password')->setComment('认证方式: password/private_key'))
->addColumn(Column::text('sn_password')->setNullable(true)->setComment('SSH 密码'))
->addColumn(Column::mediumText('sn_private_key')->setNullable(true)->setComment('SSH 私钥'))
->addColumn(Column::text('sn_passphrase')->setNullable(true)->setComment('私钥口令'))
->addColumn(Column::string('sn_region', 100)->setNullable(true)->setComment('区域/环境'))
->addColumn(Column::string('sn_purpose', 255)->setNullable(true)->setComment('机器用途'))
->addColumn(Column::string('sn_project_dir', 500)->setNullable(true)->setComment('项目目录'))
->addColumn(Column::string('sn_log_dir', 500)->setNullable(true)->setComment('日志目录'))
->addColumn(Column::string('sn_nginx_dir', 500)->setNullable(true)->setComment('Nginx 配置目录'))
->addColumn(Column::text('sn_note')->setNullable(true)->setComment('备注'))
->addColumn(Column::tinyInteger('sn_status')->setUnsigned()->setDefault(1)->setComment('状态:1启用,0禁用'))
->addTimestamps('created_at', 'updated_at')
->addIndex(['sn_id'], ['type' => 'primary'])
->addIndex(['sn_code'], ['unique' => true])
->addIndex(['sn_status'])
->addIndex(['sn_host'])
->setComment('前端服务器节点')
->create();
return;
}
$Table = $this->table('server_node');
$this->addColumnIfMissing($Table, 'sn_name', Column::string('sn_name', 255)->setDefault('')->setComment('节点名称'));
$this->addColumnIfMissing($Table, 'sn_code', Column::string('sn_code', 100)->setNullable(true)->setComment('节点编码'));
$this->addColumnIfMissing($Table, 'sn_host', Column::string('sn_host', 255)->setDefault('')->setComment('SSH 主机/IP'));
$this->addColumnIfMissing($Table, 'sn_port', Column::smallInteger('sn_port')->setUnsigned()->setDefault(22)->setComment('SSH 端口'));
$this->addColumnIfMissing($Table, 'sn_username', Column::string('sn_username', 100)->setDefault('')->setComment('SSH 用户名'));
$this->addColumnIfMissing($Table, 'sn_auth_type', Column::string('sn_auth_type', 20)->setDefault('password')->setComment('认证方式: password/private_key'));
$this->addColumnIfMissing($Table, 'sn_password', Column::text('sn_password')->setNullable(true)->setComment('SSH 密码'));
$this->addColumnIfMissing($Table, 'sn_private_key', Column::mediumText('sn_private_key')->setNullable(true)->setComment('SSH 私钥'));
$this->addColumnIfMissing($Table, 'sn_passphrase', Column::text('sn_passphrase')->setNullable(true)->setComment('私钥口令'));
$this->addColumnIfMissing($Table, 'sn_region', Column::string('sn_region', 100)->setNullable(true)->setComment('区域/环境'));
$this->addColumnIfMissing($Table, 'sn_purpose', Column::string('sn_purpose', 255)->setNullable(true)->setComment('机器用途'));
$this->addColumnIfMissing($Table, 'sn_project_dir', Column::string('sn_project_dir', 500)->setNullable(true)->setComment('项目目录'));
$this->addColumnIfMissing($Table, 'sn_log_dir', Column::string('sn_log_dir', 500)->setNullable(true)->setComment('日志目录'));
$this->addColumnIfMissing($Table, 'sn_nginx_dir', Column::string('sn_nginx_dir', 500)->setNullable(true)->setComment('Nginx 配置目录'));
$this->addColumnIfMissing($Table, 'sn_note', Column::text('sn_note')->setNullable(true)->setComment('备注'));
$this->addColumnIfMissing($Table, 'sn_status', Column::tinyInteger('sn_status')->setUnsigned()->setDefault(1)->setComment('状态:1启用,0禁用'));
$this->addColumnIfMissing($Table, 'created_at', Column::timestamp('created_at')->setDefault('CURRENT_TIMESTAMP'));
$this->addColumnIfMissing($Table, 'updated_at', Column::timestamp('updated_at')->setDefault('CURRENT_TIMESTAMP')->setUpdate('CURRENT_TIMESTAMP'));
$this->addIndexIfMissing($Table, ['sn_code'], ['unique' => true]);
$this->addIndexIfMissing($Table, ['sn_status']);
$this->addIndexIfMissing($Table, ['sn_host']);
$Table->update();
}
public function down()
{
if ($this->hasTable('server_node')) {
$this->table('server_node')->drop()->save();
}
}
protected function addColumnIfMissing($table, string $columnName, Column $column): void
{
if (!$table->hasColumn($columnName)) {
$table->addColumn($column);
}
}
protected function addIndexIfMissing($table, array $columns, array $options = []): void
{
if (!$table->hasIndex($columns)) {
$table->addIndex($columns, $options);
}
}
}

View File

@@ -179,6 +179,40 @@ CREATE TABLE `plan_task` (
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `server_node`
--
DROP TABLE IF EXISTS `server_node`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `server_node` (
`sn_id` int unsigned NOT NULL AUTO_INCREMENT,
`sn_name` varchar(255) NOT NULL DEFAULT '' COMMENT '节点名称',
`sn_code` varchar(100) DEFAULT NULL COMMENT '节点编码',
`sn_host` varchar(255) NOT NULL DEFAULT '' COMMENT 'SSH 主机/IP',
`sn_port` smallint unsigned NOT NULL DEFAULT '22' COMMENT 'SSH 端口',
`sn_username` varchar(100) NOT NULL DEFAULT '' COMMENT 'SSH 用户名',
`sn_auth_type` varchar(20) NOT NULL DEFAULT 'password' COMMENT '认证方式: password/private_key',
`sn_password` text COMMENT 'SSH 密码',
`sn_private_key` mediumtext COMMENT 'SSH 私钥',
`sn_passphrase` text COMMENT '私钥口令',
`sn_region` varchar(100) DEFAULT NULL COMMENT '区域/环境',
`sn_purpose` varchar(255) DEFAULT NULL COMMENT '机器用途',
`sn_project_dir` varchar(500) DEFAULT NULL COMMENT '项目目录',
`sn_log_dir` varchar(500) DEFAULT NULL COMMENT '日志目录',
`sn_nginx_dir` varchar(500) DEFAULT NULL COMMENT 'Nginx 配置目录',
`sn_note` text COMMENT '备注',
`sn_status` tinyint unsigned NOT NULL DEFAULT '1' COMMENT '状态:1启用,0禁用',
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`sn_id`) USING BTREE,
UNIQUE KEY `sn_code` (`sn_code`) USING BTREE,
KEY `sn_status` (`sn_status`) USING BTREE,
KEY `sn_host` (`sn_host`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='前端服务器节点';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `subject_fomart`
--