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:
@@ -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)
|
||||
}
|
||||
14
app/plugins/phpmyadmin/phpmyadmin.go
Normal file
14
app/plugins/phpmyadmin/phpmyadmin.go
Normal 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`
|
||||
)
|
||||
@@ -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
|
||||
}
|
||||
|
||||
92
public/panel/views/plugins/phpmyadmin.html
Normal file
92
public/panel/views/plugins/phpmyadmin.html
Normal 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>
|
||||
@@ -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)
|
||||
})
|
||||
}
|
||||
|
||||
@@ -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}"
|
||||
|
||||
@@ -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}"
|
||||
|
||||
Reference in New Issue
Block a user