no message

This commit is contained in:
kuaifan 2025-05-05 00:09:24 +08:00
parent 5a0d1ac0c0
commit db3a17a2c8
3 changed files with 28 additions and 48 deletions

View File

@ -14,17 +14,16 @@ use App\Module\Base;
class AppsController extends AbstractController class AppsController extends AbstractController
{ {
public function test() public function up()
{ {
$appName = 'MysqlExposePort'; $appName = 'MysqlExposePort';
$dirPath = base_path('docker/apps/' . $appName); $dirPath = base_path('docker/apps/' . $appName);
$filePath = $dirPath . '/docker-compose.yml'; $filePath = $dirPath . '/docker-compose.yml';
$savePath = $dirPath . '/docker-compose-local.yml'; $savePath = $dirPath . '/docker-compose.doo.yml';
$res = Apps::generateDockerComposeYml($filePath, $savePath, [ $res = Apps::generateDockerComposeYml($filePath, $savePath, [
'config' => [ 'PROXY_PORT' => '33062',
'PROXY_PORT' => '33062',
]
]); ]);
if (!$res) { if (!$res) {
return Base::retError('生成docker-compose.yml失败'); return Base::retError('生成docker-compose.yml失败');
@ -32,4 +31,10 @@ class AppsController extends AbstractController
return Apps::dockerComposeUp($appName); return Apps::dockerComposeUp($appName);
} }
public function down()
{
$appName = 'MysqlExposePort';
return Apps::dockerComposeUp($appName, 'down');
}
} }

View File

@ -12,15 +12,15 @@ class Apps
* *
* @param string $filePath docker-compose.yml文件路径 * @param string $filePath docker-compose.yml文件路径
* @param string|null $savePath 保存文件路径,为空则覆盖原文件 * @param string|null $savePath 保存文件路径,为空则覆盖原文件
* @param array $params 可选参数,可包含ports、volumes、container_name和config配置 * @param array $params 可选参数,替换docker-compose.yml中的${XXX}变量
* @return bool 是否生成成功 * @return bool 是否生成成功
*/ */
public static function generateDockerComposeYml(string $filePath, ?string $savePath = null, array $params = []): bool public static function generateDockerComposeYml(string $filePath, ?string $savePath = null, array $params = []): bool
{ {
// 应用名称 // 应用名称
$appName = basename(dirname($filePath)); $appName = basename(dirname($filePath));
$appName = preg_replace('/(?<!^)([A-Z])/', '-$1', $appName); $serviceName = preg_replace('/(?<!^)([A-Z])/', '-$1', $appName);
$appName = 'dootask-app-' . strtolower($appName); $serviceName = 'dootask-app-' . strtolower($serviceName);
// 网络名称 // 网络名称
$networkName = 'dootask-networks-' . env('APP_ID'); $networkName = 'dootask-networks-' . env('APP_ID');
@ -35,7 +35,7 @@ class Apps
} }
// 设置服务名称 // 设置服务名称
$content['name'] = $appName; $content['name'] = $serviceName;
// 删除所有现有网络配置 // 删除所有现有网络配置
unset($content['networks']); unset($content['networks']);
@ -43,45 +43,19 @@ class Apps
// 添加网络配置 // 添加网络配置
$content['networks'][$networkName] = ['external' => true]; $content['networks'][$networkName] = ['external' => true];
// 查找要修改的服务 foreach ($content['services'] as &$service) {
$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];
// 更新网络配置
$service['networks'] = [$networkName]; $service['networks'] = [$networkName];
// 处理ports参数 // 处理现有的volumes配置
if (isset($params['ports'])) { if (isset($service['volumes'])) {
$service['ports'] = $params['ports']; $service['volumes'] = array_map(function($volume) use ($appName) {
} if (str_starts_with($volume, './') || str_starts_with($volume, '../')) {
// 替换相对路径为绝对路径
// 处理volumes参数 return '${HOST_PWD}/docker/apps/' . $appName . '/' . ltrim($volume, './');
if (isset($params['volumes'])) { }
$service['volumes'] = $params['volumes']; return $volume;
} }, $service['volumes']);
// 处理container_name参数
if (isset($params['container_name'])) {
$service['container_name'] = $params['container_name'];
} }
} }
@ -90,8 +64,7 @@ class Apps
// 替换${XXX}格式变量 // 替换${XXX}格式变量
$yamlContent = preg_replace_callback('/\$\{(.*?)\}/', function($matches) use ($params) { $yamlContent = preg_replace_callback('/\$\{(.*?)\}/', function($matches) use ($params) {
$varName = $matches[1]; return $params[$matches[1]] ?? $matches[0];
return $params['config'][$varName] ?? $varName;
}, $yamlContent); }, $yamlContent);
// 写回文件 // 写回文件

View File

@ -246,6 +246,8 @@ services:
volumes: volumes:
- ./:/var/www - ./:/var/www
- /var/run/docker.sock:/var/run/docker.sock - /var/run/docker.sock:/var/run/docker.sock
environment:
HOST_PWD: "${PWD}"
network_mode: host network_mode: host
restart: unless-stopped restart: unless-stopped