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);
}
}
}