2
0
mirror of https://github.com/acepanel/panel.git synced 2026-02-04 18:27:13 +08:00

feat: add phpmyadmin

This commit is contained in:
耗子
2023-07-22 18:01:16 +08:00
parent 903218dabb
commit cb5d9acf3f
7 changed files with 236 additions and 11 deletions

View File

@@ -0,0 +1,81 @@
package phpmyadmin
import (
"os"
"regexp"
"strings"
"github.com/goravel/framework/contracts/http"
"panel/app/http/controllers"
"panel/pkg/tools"
)
type PhpMyAdminController struct {
}
func NewPhpMyAdminController() *PhpMyAdminController {
return &PhpMyAdminController{}
}
func (c *PhpMyAdminController) Info(ctx http.Context) {
if !controllers.Check(ctx, "phpmyadmin") {
return
}
files, err := os.ReadDir("/www/server/phpmyadmin")
if err != nil {
controllers.Error(ctx, http.StatusBadRequest, "找不到 phpMyAdmin 目录")
return
}
var phpmyadmin string
for _, f := range files {
if strings.HasPrefix(f.Name(), "phpmyadmin_") {
phpmyadmin = f.Name()
}
}
if len(phpmyadmin) == 0 {
controllers.Error(ctx, http.StatusBadRequest, "找不到 phpMyAdmin 目录")
return
}
conf := tools.ReadFile("/www/server/vhost/phpmyadmin.conf")
match := regexp.MustCompile(`listen\s+(\d+);`).FindStringSubmatch(conf)
if len(match) == 0 {
controllers.Error(ctx, http.StatusBadRequest, "找不到 phpMyAdmin 端口")
return
}
controllers.Success(ctx, http.Json{
"phpmyadmin": phpmyadmin,
"port": match[1],
})
}
func (c *PhpMyAdminController) SetPort(ctx http.Context) {
if !controllers.Check(ctx, "phpmyadmin") {
return
}
port := ctx.Request().Input("port")
if len(port) == 0 {
controllers.Error(ctx, http.StatusBadRequest, "端口不能为空")
return
}
conf := tools.ReadFile("/www/server/vhost/phpmyadmin.conf")
conf = regexp.MustCompile(`listen\s+(\d+);`).ReplaceAllString(conf, "listen "+port+";")
tools.WriteFile("/www/server/vhost/phpmyadmin.conf", conf, 0644)
if tools.IsRHEL() {
tools.ExecShell("firewall-cmd --zone=public --add-port=" + port + "/tcp --permanent")
tools.ExecShell("firewall-cmd --reload")
} else {
tools.ExecShell("ufw allow " + port + "/tcp")
tools.ExecShell("ufw reload")
}
tools.ExecShell("systemctl reload openresty")
controllers.Success(ctx, nil)
}

View File

@@ -0,0 +1,14 @@
package phpmyadmin
var (
Name = "phpMyAdmin"
Author = "耗子"
Description = "phpMyAdmin 是一个以 PHP 为基础,以 Web-Base 方式架构在网站主机上的 MySQL 数据库管理工具。"
Slug = "phpmyadmin"
Version = "5.2.1"
Requires = []string{}
Excludes = []string{}
Install = `bash /www/panel/scripts/phpmyadmin/install.sh`
Uninstall = `bash /www/panel/scripts/phpmyadmin/uninstall.sh`
Update = `bash /www/panel/scripts/phpmyadmin/uninstall.sh && bash /www/panel/scripts/phpmyadmin/install.sh`
)

View File

@@ -10,6 +10,7 @@ import (
"panel/app/plugins/openresty"
"panel/app/plugins/php74"
"panel/app/plugins/php80"
"panel/app/plugins/phpmyadmin"
)
// PanelPlugin 插件元数据结构
@@ -114,6 +115,18 @@ func (r *PluginImpl) All() []PanelPlugin {
Uninstall: php80.Uninstall,
Update: php80.Update,
})
p = append(p, PanelPlugin{
Name: phpmyadmin.Name,
Author: phpmyadmin.Author,
Description: phpmyadmin.Description,
Slug: phpmyadmin.Slug,
Version: phpmyadmin.Version,
Requires: phpmyadmin.Requires,
Excludes: phpmyadmin.Excludes,
Install: phpmyadmin.Install,
Uninstall: phpmyadmin.Uninstall,
Update: phpmyadmin.Update,
})
return p
}

View File

@@ -0,0 +1,92 @@
<!--
Name: phpMyAdmin 管理器
Author: 耗子
Date: 2023-07-22
-->
<title>phpMyAdmin</title>
<div class="layui-fluid" id="component-tabs">
<div class="layui-row">
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-header">phpMyAdmin 信息</div>
<div class="layui-card-body">
<blockquote class="layui-elem-quote layui-quote-nm">访问地址:<span
id="phpmyadmin-info">获取中...</span></blockquote>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
<legend>基本设置</legend>
</fieldset>
<div class="layui-form" lay-filter="phpmyadmin_setting">
<div class="layui-form-item">
<label class="layui-form-label" style="font-size: 13px;">访问端口</label>
<div class="layui-input-inline">
<input type="text" name="phpmyadmin_port" value="获取中ing..." class="layui-input"
disabled>
</div>
<div class="layui-form-mid layui-word-aux">查看 / 修改 phpMyAdmin 访问端口</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn layui-btn-sm" lay-submit
lay-filter="phpmyadmin_setting_submit">确认修改
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
layui.use(['index', 'code', 'table', 'form'], function () {
let $ = layui.$
, form = layui.form
, admin = layui.admin;
// 获取phpmyadmin信息
admin.req({
url: "/api/plugins/phpmyadmin/info"
, type: 'get'
, success: function (result) {
if (result.code !== 0) {
layer.alert('phpMyAdmin 信息获取失败,可能已损坏!', {
icon: 2
});
return false;
}
// 获取当前域名
let hostname = window.location.hostname;
// 拼接phpmyadmin访问地址
let phpmyadmin_url = 'http://' + hostname + ':' + result.data.port + '/' + result.data.phpmyadmin;
$('#phpmyadmin-info').html('<a href="' + phpmyadmin_url + '" target="_blank">' + phpmyadmin_url + '</a>');
$('input[name=phpmyadmin_port]').val(result.data.port);
$('input').attr('disabled', false);
form.render();
}
});
// 监听phpmyadmin设置提交
form.on('submit(phpmyadmin_setting_submit)', function (data) {
data.field.port = data.field.phpmyadmin_port;
index = layer.msg('请稍候...', {icon: 16, time: 0, shade: 0.3});
admin.req({
url: "/api/plugins/phpmyadmin/port"
, type: 'post'
, data: data.field
, success: function (result) {
layer.close(index);
if (result.code !== 0) {
layer.alert('phpMyAdmin设置失败可能已损坏', {
icon: 2
});
return false;
}
layer.msg('设置成功', {
icon: 1
});
}
});
});
});
</script>

View File

@@ -3,12 +3,13 @@ package routes
import (
"github.com/goravel/framework/contracts/route"
"github.com/goravel/framework/facades"
"panel/app/http/controllers/plugins/mysql57"
"panel/app/http/controllers/plugins/php80"
"panel/app/http/controllers/plugins/mysql57"
"panel/app/http/controllers/plugins/mysql80"
"panel/app/http/controllers/plugins/openresty"
"panel/app/http/controllers/plugins/php74"
"panel/app/http/controllers/plugins/php80"
"panel/app/http/controllers/plugins/phpmyadmin"
"panel/app/http/middleware"
)
@@ -123,4 +124,9 @@ func Plugin() {
route.Post("installExtension", php80Controller.InstallExtension)
route.Post("uninstallExtension", php80Controller.UninstallExtension)
})
facades.Route().Prefix("api/plugins/phpmyadmin").Middleware(middleware.Jwt()).Group(func(route route.Route) {
phpMyAdminController := phpmyadmin.NewPhpMyAdminController()
route.Get("info", phpMyAdminController.Info)
route.Post("port", phpMyAdminController.SetPort)
})
}

View File

@@ -22,7 +22,7 @@ ARCH=$(uname -m)
OS=$(source /etc/os-release && { [[ "$ID" == "debian" ]] && echo "debian"; } || { [[ "$ID" == "centos" ]] || [[ "$ID" == "rhel" ]] || [[ "$ID" == "rocky" ]] || [[ "$ID" == "almalinux" ]] && echo "centos"; } || echo "unknown")
downloadUrl="https://dl.cdn.haozi.net/panel/phpmyadmin"
setupPath="/www"
phpmyadminPath="${setupPath}/wwwroot/phpmyadmin"
phpmyadminPath="${setupPath}/server/phpmyadmin"
phpmyadminVersion="5.2.1"
randomDir="$(cat /dev/urandom | head -n 16 | md5sum | head -c 10)"
@@ -45,7 +45,10 @@ chmod -R 755 ${phpmyadminPath}
rm -rf phpmyadmin.zip
# 判断PHP版本
phpVersion="74"
phpVersion=""
if [ -d "/www/server/php/74" ]; then
phpVersion="74"
fi
if [ -d "/www/server/php/80" ]; then
phpVersion="80"
fi
@@ -56,6 +59,13 @@ if [ -d "/www/server/php/82" ]; then
phpVersion="82"
fi
if [ "${phpVersion}" == "" ]; then
echo -e $HR
echo "错误:未安装 PHP"
rm -rf ${phpmyadminPath}
exit 1
fi
# 写入 phpMyAdmin 配置文件
cat >/www/server/vhost/phpmyadmin.conf <<EOF
# 配置文件中的标记位请勿随意修改,改错将导致面板无法识别!
@@ -72,7 +82,7 @@ server
index index.php;
# index标记位结束
# root标记位开始
root /www/wwwroot/phpmyadmin;
root /www/server/phpmyadmin;
# root标记位结束
# php标记位开始
@@ -102,10 +112,19 @@ EOF
# 设置文件权限
chown -R root:root /www/server/vhost/phpmyadmin.conf
chmod -R 644 /www/server/vhost/phpmyadmin.conf
chmod -R 755 ${phpmyadminPath}
chown -R www:www ${phpmyadminPath}
# 放行端口
firewall-cmd --permanent --zone=public --add-port=888/tcp >/dev/null 2>&1
firewall-cmd --reload
if [ "${OS}" == "centos" ]; then
firewall-cmd --permanent --zone=public --add-port=888/tcp >/dev/null 2>&1
firewall-cmd --reload
elif [ "${OS}" == "debian" ]; then
ufw allow 888/tcp >/dev/null 2>&1
ufw reload
fi
panel writePlugin phpmyadmin
panel writePlugin phpmyadmin 5.2.1
systemctl reload openresty
echo -e "${HR}\phpMyAdmin 安装完成\n${HR}"

View File

@@ -19,12 +19,12 @@ limitations under the License.
HR="+----------------------------------------------------"
setupPath="/www"
phpmyadminPath="${setupPath}/wwwroot/phpmyadmin"
phpmyadminPath="${setupPath}/server/phpmyadmin"
rm -rf /www/server/vhost/phpmyadmin.conf
rm -rf ${setupPath}/server/vhost/phpmyadmin.conf
rm -rf ${phpmyadminPath}
panel deletePlugin phpmyadmin
systemctl reload openresty
echo -e "${HR}\phpMyAdmin uninstall completed.\n${HR}"
echo -e "${HR}\phpMyAdmin 卸载完成\n${HR}"