no message

This commit is contained in:
kuaifan 2025-05-08 23:02:31 +08:00
parent 959b30c788
commit b9180a4426
2 changed files with 52 additions and 32 deletions

View File

@ -132,7 +132,7 @@ class AppsController extends AbstractController
} }
/** /**
* @api {post} api/apps/update_status 04. 更新应用状态 * @api {post} api/apps/update/status 04. 更新应用状态
* *
* @apiVersion 1.0.0 * @apiVersion 1.0.0
* @apiGroup apps * @apiGroup apps
@ -145,7 +145,7 @@ class AppsController extends AbstractController
* @apiSuccess {String} msg 返回信息(错误描述) * @apiSuccess {String} msg 返回信息(错误描述)
* @apiSuccess {Object} data 更新结果 * @apiSuccess {Object} data 更新结果
*/ */
public function updateStatus() public function update__status()
{ {
$appName = Request::input('app_name'); $appName = Request::input('app_name');
$status = Request::input('status'); $status = Request::input('status');
@ -172,10 +172,8 @@ class AppsController extends AbstractController
'status' => $status 'status' => $status
]; ];
// 如果状态是安装成功,记录完成时间 // 更新nginx配置
if ($status === 'installed') { Apps::nginxUpdate($appName);
// todo 安装完成要更新nginx配置
}
// 保存配置 // 保存配置
if (Apps::saveAppLocalInfo($appName, $updateData)) { if (Apps::saveAppLocalInfo($appName, $updateData)) {
@ -184,7 +182,7 @@ class AppsController extends AbstractController
return Base::retError('更新状态失败'); return Base::retError('更新状态失败');
} }
} }
/** /**
* @api {get} api/apps/logs 05. 获取应用日志 * @api {get} api/apps/logs 05. 获取应用日志
* *
@ -204,33 +202,33 @@ class AppsController extends AbstractController
{ {
$appName = Request::input('app_name'); $appName = Request::input('app_name');
$lines = intval(Request::input('lines', 50)); $lines = intval(Request::input('lines', 50));
if (empty($appName)) { if (empty($appName)) {
return Base::retError('应用名称不能为空'); return Base::retError('应用名称不能为空');
} }
// 限制获取行数 // 限制获取行数
if ($lines <= 0) { if ($lines <= 0) {
$lines = 50; $lines = 50;
} else if ($lines > 2000) { } else if ($lines > 2000) {
$lines = 2000; $lines = 2000;
} }
// 日志文件路径 // 日志文件路径
$logFile = base_path('docker/logs/apps/' . $appName . '.log'); $logFile = base_path('docker/logs/apps/' . $appName . '.log');
if (!file_exists($logFile)) { if (!file_exists($logFile)) {
return Base::retSuccess('日志返回成功', [ return Base::retSuccess('日志返回成功', [
'log' => '' 'log' => ''
]); ]);
} }
// 读取日志文件最后几行 // 读取日志文件最后几行
$output = []; $output = [];
$cmd = 'tail -n ' . $lines . ' ' . escapeshellarg($logFile); $cmd = 'tail -n ' . $lines . ' ' . escapeshellarg($logFile);
exec($cmd, $output); exec($cmd, $output);
$logContent = implode("\n", $output); $logContent = implode("\n", $output);
return Base::retSuccess('日志返回成功', [ return Base::retSuccess('日志返回成功', [
'log' => $logContent 'log' => $logContent
]); ]);

View File

@ -111,30 +111,12 @@ class Apps
$result['generate'] = $res['data']; $result['generate'] = $res['data'];
// 执行docker-compose命令 // 执行docker-compose命令
$res = self::curl("apps/{$command}/{$appName}"); $res = self::curl("apps/{$command}/{$appName}?callback_url=" . urlencode('http://nginx/api/apps/update/status'));
if (Base::isError($res)) { if (Base::isError($res)) {
return $res; return $res;
} }
$result['compose'] = $res['data']; $result['compose'] = $res['data'];
// nginx配置文件处理 // todo 要单独处理
$nginxFile = $versionInfo['path'] . '/nginx.conf';
$nginxTarget = base_path('docker/nginx/apps/' . $appName . '.conf');
if (file_exists($nginxTarget)) {
unlink($nginxTarget);
}
if (file_exists($nginxFile)) {
if ($command === 'up') {
copy($nginxFile, $nginxTarget);
}
// 重启nginx
$res = self::curl("nginx/reload");
if (Base::isError($res)) {
return $res;
}
$result['nginx'] = $res['data'];
}
// 返回结果 // 返回结果
return Base::retSuccess("success", $result); return Base::retSuccess("success", $result);
} }
@ -150,6 +132,46 @@ class Apps
return self::dockerComposeUp($appName, $version, 'down'); return self::dockerComposeUp($appName, $version, 'down');
} }
/**
* 更新nginx配置
* @param string $appName
* @return array
*/
public static function nginxUpdate(string $appName): array
{
// 获取本地安装信息
$localInfo = self::getAppLocalInfo($appName);
// nginx配置文件处理
$nginxFile = base_path('docker/apps/' . $appName . '/' . $localInfo['installed_version'] . '/nginx.conf');
$nginxTarget = base_path('docker/nginx/apps/' . $appName . '.conf');
$needReload = false;
if (file_exists($nginxTarget)) {
unlink($nginxTarget);
$needReload = true;
}
if (file_exists($nginxFile) && $localInfo['status'] === 'installed') {
copy($nginxFile, $nginxTarget);
$res = self::curl("nginx/test");
if (Base::isError($res)) {
unlink($nginxTarget);
return $res;
}
$needReload = true;
}
// 重启nginx
if ($needReload) {
$res = self::curl("nginx/reload");
if (Base::isError($res)) {
return $res;
}
}
// 返回结果
return Base::retSuccess("success");
}
/** /**
* 获取应用信息 * 获取应用信息
* @param string $appName 应用名称 * @param string $appName 应用名称