From db3a17a2c8a2d59fe91ef0de87ceb98b8bd22dfb Mon Sep 17 00:00:00 2001 From: kuaifan Date: Mon, 5 May 2025 00:09:24 +0800 Subject: [PATCH] no message --- app/Http/Controllers/Api/AppsController.php | 15 ++++-- app/Module/Apps.php | 59 ++++++--------------- docker-compose.yml | 2 + 3 files changed, 28 insertions(+), 48 deletions(-) diff --git a/app/Http/Controllers/Api/AppsController.php b/app/Http/Controllers/Api/AppsController.php index 758e1c73d..7d634a570 100755 --- a/app/Http/Controllers/Api/AppsController.php +++ b/app/Http/Controllers/Api/AppsController.php @@ -14,17 +14,16 @@ use App\Module\Base; class AppsController extends AbstractController { - public function test() + public function up() { $appName = 'MysqlExposePort'; + $dirPath = base_path('docker/apps/' . $appName); $filePath = $dirPath . '/docker-compose.yml'; - $savePath = $dirPath . '/docker-compose-local.yml'; + $savePath = $dirPath . '/docker-compose.doo.yml'; $res = Apps::generateDockerComposeYml($filePath, $savePath, [ - 'config' => [ - 'PROXY_PORT' => '33062', - ] + 'PROXY_PORT' => '33062', ]); if (!$res) { return Base::retError('生成docker-compose.yml失败'); @@ -32,4 +31,10 @@ class AppsController extends AbstractController return Apps::dockerComposeUp($appName); } + + public function down() + { + $appName = 'MysqlExposePort'; + return Apps::dockerComposeUp($appName, 'down'); + } } diff --git a/app/Module/Apps.php b/app/Module/Apps.php index 63bedcc86..593068370 100644 --- a/app/Module/Apps.php +++ b/app/Module/Apps.php @@ -12,15 +12,15 @@ class Apps * * @param string $filePath docker-compose.yml文件路径 * @param string|null $savePath 保存文件路径,为空则覆盖原文件 - * @param array $params 可选参数,可包含ports、volumes、container_name和config配置 + * @param array $params 可选参数,替换docker-compose.yml中的${XXX}变量 * @return bool 是否生成成功 */ public static function generateDockerComposeYml(string $filePath, ?string $savePath = null, array $params = []): bool { // 应用名称 $appName = basename(dirname($filePath)); - $appName = preg_replace('/(? true]; - // 查找要修改的服务 - $mainService = null; - $firstService = null; - - foreach ($content['services'] as $name => $service) { - // 记录第一个服务 - if ($firstService === null) { - $firstService = $name; - } - - // 检查是否有labels.main=true的服务 - if (isset($service['labels']['main']) && $service['labels']['main'] === true) { - $mainService = $name; - break; - } - } - - // 确定要修改的服务名称 - $targetService = $mainService ?? $firstService; - - if ($targetService !== null) { - $service = &$content['services'][$targetService]; - - // 更新网络配置 + foreach ($content['services'] as &$service) { + // 确保所有服务都有网络配置 $service['networks'] = [$networkName]; - // 处理ports参数 - if (isset($params['ports'])) { - $service['ports'] = $params['ports']; - } - - // 处理volumes参数 - if (isset($params['volumes'])) { - $service['volumes'] = $params['volumes']; - } - - // 处理container_name参数 - if (isset($params['container_name'])) { - $service['container_name'] = $params['container_name']; + // 处理现有的volumes配置 + if (isset($service['volumes'])) { + $service['volumes'] = array_map(function($volume) use ($appName) { + if (str_starts_with($volume, './') || str_starts_with($volume, '../')) { + // 替换相对路径为绝对路径 + return '${HOST_PWD}/docker/apps/' . $appName . '/' . ltrim($volume, './'); + } + return $volume; + }, $service['volumes']); } } @@ -90,8 +64,7 @@ class Apps // 替换${XXX}格式变量 $yamlContent = preg_replace_callback('/\$\{(.*?)\}/', function($matches) use ($params) { - $varName = $matches[1]; - return $params['config'][$varName] ?? $varName; + return $params[$matches[1]] ?? $matches[0]; }, $yamlContent); // 写回文件 diff --git a/docker-compose.yml b/docker-compose.yml index 525701749..ac1bd285d 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -246,6 +246,8 @@ services: volumes: - ./:/var/www - /var/run/docker.sock:/var/run/docker.sock + environment: + HOST_PWD: "${PWD}" network_mode: host restart: unless-stopped