mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2025-03-14 17:54:44 +08:00
fix(runtime): fix issue with install extensions failed in php runtime (#8071)
This commit is contained in:
parent
d3efd02d69
commit
7f7731a52e
@ -235,7 +235,7 @@ func (n NginxService) Build(req request.NginxBuildReq) error {
|
||||
return err
|
||||
}
|
||||
buildTask.AddSubTask("", func(t *task.Task) error {
|
||||
if err = cmd2.ExecWithLogFile(fmt.Sprintf("docker compose -f %s build", nginxInstall.GetComposePath()), 15*time.Minute, t.Task.LogFile); err != nil {
|
||||
if err = cmd2.ExecWithLogger(fmt.Sprintf("docker compose -f %s build", nginxInstall.GetComposePath()), t.Logger, 15*time.Minute); err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = compose.DownAndUp(nginxInstall.GetComposePath())
|
||||
|
@ -739,7 +739,7 @@ func (r *RuntimeService) InstallPHPExtension(req request.PHPExtensionInstallReq)
|
||||
}
|
||||
installTask.AddSubTask("", func(t *task.Task) error {
|
||||
installCmd := fmt.Sprintf("docker exec -i %s %s %s", runtime.ContainerName, "install-ext", req.Name)
|
||||
err = cmd2.ExecWithLogFile(installCmd, 15*time.Minute, t.Task.LogFile)
|
||||
err = cmd2.ExecWithLogger(installCmd, t.Logger, 15*time.Minute)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -751,7 +751,7 @@ func (r *RuntimeService) InstallPHPExtension(req request.PHPExtensionInstallReq)
|
||||
return err
|
||||
}
|
||||
commitCmd := fmt.Sprintf("docker commit %s %s", runtime.ContainerName, runtime.Image)
|
||||
err = cmd2.ExecWithLogFile(commitCmd, 15*time.Minute, t.Task.LogFile)
|
||||
err = cmd2.ExecWithLogger(commitCmd, t.Logger, 15*time.Minute)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -574,7 +574,7 @@ func unInstallPHPExtension(runtime *model.Runtime, delExtensions []string) error
|
||||
delMap := make(map[string]struct{})
|
||||
for _, ext := range phpExtensions {
|
||||
for _, del := range delExtensions {
|
||||
if ext.Check == del {
|
||||
if ext.Name == del {
|
||||
delMap[ext.Check] = struct{}{}
|
||||
_ = fileOP.DeleteFile(path.Join(dir, "extensions", ext.File))
|
||||
_ = fileOP.DeleteFile(path.Join(dir, "conf", "conf.d", "docker-php-ext-"+ext.Check+".ini"))
|
||||
|
@ -1,6 +1,7 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"context"
|
||||
"errors"
|
||||
@ -100,6 +101,50 @@ func ExecWithLogFile(cmdStr string, timeout time.Duration, outputFile string) er
|
||||
return nil
|
||||
}
|
||||
|
||||
func ExecWithLogger(cmdStr string, logger *log.Logger, timeout time.Duration) error {
|
||||
cmd := exec.Command("bash", "-c", cmdStr)
|
||||
|
||||
stdoutPipe, err := cmd.StdoutPipe()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
stderrPipe, err := cmd.StderrPipe()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := cmd.Start(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
go func() {
|
||||
scanner := bufio.NewScanner(stdoutPipe)
|
||||
for scanner.Scan() {
|
||||
logger.Print(scanner.Text())
|
||||
}
|
||||
}()
|
||||
go func() {
|
||||
scanner := bufio.NewScanner(stderrPipe)
|
||||
for scanner.Scan() {
|
||||
logger.Print(scanner.Text())
|
||||
}
|
||||
}()
|
||||
|
||||
done := make(chan error, 1)
|
||||
go func() {
|
||||
done <- cmd.Wait()
|
||||
}()
|
||||
|
||||
after := time.After(timeout)
|
||||
select {
|
||||
case <-after:
|
||||
_ = cmd.Process.Kill()
|
||||
return buserr.New("ErrCmdTimeout")
|
||||
case err := <-done:
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
func ExecContainerScript(containerName, cmdStr string, timeout time.Duration) error {
|
||||
cmdStr = fmt.Sprintf("docker exec -i %s bash -c '%s'", containerName, cmdStr)
|
||||
out, err := ExecWithTimeOut(cmdStr, timeout)
|
||||
|
@ -127,13 +127,6 @@
|
||||
<span>
|
||||
{{ $t('runtime.extendHelper') }}
|
||||
</span>
|
||||
<!-- <el-link
|
||||
target="_blank"
|
||||
type="primary"
|
||||
:href="globalStore.docsUrl + '/user_manual/websites/php/#php_1'"
|
||||
>
|
||||
{{ $t('php.toExtensionsList') }}
|
||||
</el-link> -->
|
||||
<span
|
||||
class="custom-link"
|
||||
@click="openLink(globalStore.docsUrl + '/user_manual/websites/php/#php_1')"
|
||||
@ -225,7 +218,7 @@ const phpSources = globalStore.isIntl
|
||||
? [
|
||||
{
|
||||
label: i18n.global.t('runtime.default'),
|
||||
value: 'https://dl-cdn.alpinelinux.org',
|
||||
value: 'https://deb.debian.org',
|
||||
},
|
||||
{
|
||||
label: i18n.global.t('runtime.xtom'),
|
||||
@ -259,7 +252,7 @@ const phpSources = globalStore.isIntl
|
||||
},
|
||||
{
|
||||
label: i18n.global.t('commons.table.default'),
|
||||
value: 'https://dl-cdn.alpinelinux.org',
|
||||
value: 'https://deb.debian.org',
|
||||
},
|
||||
];
|
||||
|
||||
|
@ -5,6 +5,9 @@
|
||||
<el-tag v-for="(ext, index) in extensions" :key="index" type="info" class="mr-1 mt-1">{{ ext }}</el-tag>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<div class="mt-5">
|
||||
<TableSearch @search="searchByName()" v-model:searchName="searchName" />
|
||||
</div>
|
||||
<div class="mt-5">
|
||||
<el-text>{{ $t('runtime.popularExtension') }}</el-text>
|
||||
</div>
|
||||
@ -44,6 +47,8 @@ const extensions = ref([]);
|
||||
const supportExtensions = ref([]);
|
||||
const loading = ref(false);
|
||||
const taskLogRef = ref();
|
||||
const searchName = ref('');
|
||||
const data = ref([]);
|
||||
|
||||
const handleClose = () => {
|
||||
open.value = false;
|
||||
@ -113,10 +118,21 @@ const search = async () => {
|
||||
try {
|
||||
const res = await GetPHPExtensions(runtime.value.id);
|
||||
extensions.value = res.data.extensions;
|
||||
supportExtensions.value = res.data.supportExtensions;
|
||||
data.value = res.data.supportExtensions;
|
||||
searchByName();
|
||||
} catch (error) {}
|
||||
};
|
||||
|
||||
const searchByName = () => {
|
||||
if (searchName.value === '') {
|
||||
supportExtensions.value = data.value;
|
||||
return;
|
||||
}
|
||||
supportExtensions.value = data.value.filter((ext) =>
|
||||
ext.name.toLowerCase().includes(searchName.value.toLowerCase()),
|
||||
);
|
||||
};
|
||||
|
||||
const acceptParams = (req: Runtime.Runtime): void => {
|
||||
open.value = true;
|
||||
runtime.value = req;
|
||||
|
@ -98,7 +98,7 @@
|
||||
|
||||
<CreateRuntime ref="createRef" @close="search" @submit="openCreateLog" />
|
||||
<OpDialog ref="opRef" @search="search" />
|
||||
<Log ref="logRef" @close="search" />
|
||||
<Log ref="logRef" @close="search" :heightDiff="280" />
|
||||
<Extensions ref="extensionsRef" @close="search" />
|
||||
<AppResources ref="checkRef" @close="search" />
|
||||
<ExtManagement ref="extManagementRef" @close="search" />
|
||||
|
Loading…
x
Reference in New Issue
Block a user