Compare commits

...

16 Commits
2.2.2 ... 2.4.1

Author SHA1 Message Date
flucout
2ddb4ff64c update 2024-06-16 21:00:50 +08:00
flucout
963b675026 fix 2024-06-07 14:20:19 +08:00
flucout
5642ea3038 update 2024-06-07 14:09:15 +08:00
flucout
2aff0d9e6d update 2024-06-01 15:11:14 +08:00
flucout
0ca1c9d0e3 update 2024-06-01 15:07:31 +08:00
flucout
c1681a9731 update 2024-05-07 23:43:04 +08:00
flucout
911a567fde update 2024-04-30 22:56:41 +08:00
flucout
b27349a416 update 2024-04-13 15:55:42 +08:00
flucout
def82c88cb Merge branch 'main' of ssh://ssh.github.com:443/flucont/btcloud 2024-03-17 21:00:26 +08:00
flucout
04028103c1 update 2024-03-17 20:59:45 +08:00
Flucont
d18cd84e29 Merge pull request #171 from XCwosjw/patch-1
update
2024-02-24 13:10:25 +08:00
XCwosjw
268f76f9ba 修复在IPV6下的异常报错
修复在IPV6下因ip长度问题而导致的的异常报错
2024-02-23 10:14:56 +08:00
flucout
7d32833431 update 2024-02-12 21:05:46 +08:00
flucout
6c6ad40836 update 2024-01-30 21:40:39 +08:00
flucout
11961b8f0b update 2024-01-20 21:42:10 +08:00
flucout
71db6b0a3e update 2024-01-17 18:13:08 +08:00
35 changed files with 1967 additions and 1582 deletions

237
app/command/CleanViteJs.php Normal file
View File

@@ -0,0 +1,237 @@
<?php
declare (strict_types = 1);
namespace app\command;
use think\console\Command;
use think\console\Input;
use think\console\input\Argument;
use think\console\input\Option;
use think\console\Output;
use think\facade\Db;
use think\facade\Config;
use app\lib\Plugins;
class CleanViteJs extends Command
{
protected function configure()
{
$this->setName('cleanvitejs')
->addArgument('dir', Argument::REQUIRED, '/BTPanel/static/vite/js/路径')
->setDescription('处理宝塔面板vite/js文件');
}
protected function execute(Input $input, Output $output)
{
$dir = trim($input->getArgument('dir'));
if(!file_exists($dir)){
$output->writeln('目录不存在');
return;
}
//$this->handlefile($dir.'/DockerImages.js');
$this->checkdir($dir);
}
private function getExtendCode($content, $part, $n = 1, $startChar = '{', $endChar = '}'){
if(!$part) return false;
$length = strlen($content);
$start = strpos($content, $part);
if($start===false)return false;
$end = $start+strlen($part);
$start--;
$c = 0;
for($i=$start;$i>=0;$i--){
if(substr($content,$i,1) == $startChar) $c++;
if(substr($content,$i,1) == $endChar) $c--;
if($c == $n){
$start = $i;
break;
}
}
$c = 0;
for($i=$end;$i<=$length;$i++){
if(substr($content,$i,1) == $endChar) $c++;
if(substr($content,$i,1) == $startChar) $c--;
if($c == $n){
$end = $i;
break;
}
}
return substr($content, $start, $end - $start + 1);
}
private function getExtendFunction($content, $part, $startChar = '(', $endChar = ')'){
$code = $this->getExtendCode($content, $part, 1, $startChar, $endChar);
if(!$code) return false;
$start = strpos($content, $code) - 1;
$end = $start + strlen($code);
for($i=$start;$i>=0;$i--){
$char = substr($content,$i,1);
if(!ctype_alpha($char)){
$start = $i+1;
break;
}
}
if(substr($content,$start-1,1) == ',') $start--;
return substr($content, $start, $end - $start + 1);
}
private function checkdir($basedir){
if($dh=opendir($basedir)){
while (($file=readdir($dh)) !== false){
if($file != '.' && $file != '..'){
if(!is_dir($basedir.'/'.$file) && substr($file,-3)=='.js'){
$this->handlefile($basedir.'/'.$file);
}else if(!is_dir($basedir.'/'.$file) && substr($file,-4)=='.map'){
unlink($basedir.'/'.$file);
}
}
}
closedir($dh);
}
}
private function handlefile($filepath){
$file = file_get_contents($filepath);
if(!$file)return;
$flag = false;
if(strpos($file, 'window.location.protocol.indexOf("https")>=0')!==false){ //index
$file = str_replace('(window.location.protocol.indexOf("https")>=0)', '1', $file);
$file = preg_replace('!setTimeout\(\(\(\)=>\{\w+\(\)\}\),3e3\)!', '', $file);
$file = preg_replace('!setTimeout\(\(function\(\)\{\w+\(\)\}\),3e3\)!', '', $file);
$file = preg_replace('!recommendShow:\w+,!', 'recommendShow:!1,', $file);
$code = $this->getExtendCode($file, '"需求反馈"', 2);
if($code){
$file = str_replace($code, '{}', $file);
}
$flag = true;
}
if(strpos($file, '"WechatOfficial"')!==false){ //main
$code = $this->getExtendCode($file, '"WechatOfficial"', 5);
$code = $this->getExtendFunction($file, $code);
$start = strpos($file, $code) - 1;
for($i=$start;$i>=0;$i--){
if(substr($file,$i,1) == ','){
$start = $i;
break;
}
}
$code = $this->getExtendCode($file, '"/other/customer-service.png"', 2);
$code = $this->getExtendCode($file, $code, 2, '[', ']');
$end = strpos($file, $code)+strlen($code);
$code = substr($file, $start, $end - $start + 1);
$file = str_replace($code, '', $file);
$file = str_replace('startNegotiate(),', '', $file);
$flag = true;
}
if(strpos($file, '"calc"') !== false && strpos($file, '"checkConfirm"') !== false){ //main2
$file = preg_replace('!,isCalc:\w+,isInput:\w+,isCheck:\w+,!', ',isCalc:!1,isInput:!1,isCheck:!1,', $file);
$file = preg_replace('!\w+\(\(\(\)=>"calc"===\w+\.type\|\|"checkConfirm"===\w+\.type\)\)!', '!1', $file);
$file = preg_replace('!\w+\(\(\(\)=>"input"===\w+\.type\)\)!', '!1', $file);
$file = preg_replace('!\w+\(\(\(\)=>"check"===\w+\.type\|\|"checkConfirm"===\w+\.type\)\)!', '!1', $file);
$file = preg_replace('!\w+\(\(function\(\)\{return"calc"===\w+\.type\|\|"checkConfirm"===\w+\.type\}\)\)!', '!1', $file);
$file = preg_replace('!\w+\(\(function\(\)\{return"input"===\w+\.type\}\)\)!', '!1', $file);
$file = preg_replace('!\w+\(\(function\(\)\{return"check"===\w+\.type\|\|"checkConfirm"===\w+\.type\}\)\)!', '!1', $file);
$flag = true;
}
if(strpos($file, '请冷静几秒钟,确认以下要删除的数据')!==false && strpos($file, '"计算结果:"')!==false){ //site
$code = $this->getExtendCode($file, '"计算结果:"', 2, '[', ']');
$code = $this->getExtendFunction($file, $code);
$file = str_replace($code, '', $file);
$file = preg_replace('!\w+\.sum===\w+\.addend1\+\w+\.addend2!', '!0', $file);
$file = preg_replace('!\w+\.sum\!==\w+\.addend1\+\w+\.addend2!', '!1', $file);
$file = preg_replace('!,disableDeleteButton:\w+,countdown:\w+,!', ',disableDeleteButton:!1,countdown:!1,', $file);
if(preg_match('/startCountdown:(\w+),/', $file, $matchs)){
$file = str_replace([';'.$matchs[1].'()', $matchs[1].'(),'], '', $file);
}
$flag = true;
}
/*if(strpos($file, '"bt-waf-gray"')!==false){ //site.popup
$code = $this->getExtendCode($file, '"bt-waf-gray"', 2);
$code = $this->getExtendCode($file, $code, 1, '[', ']');
$code = $this->getExtendFunction($file, $code);
$file = str_replace($code, '""', $file);
$flag = true;
}*/
if(strpos($file, '"商用SSL证书"')!==false){ //site-ssl
$code = $this->getExtendFunction($file, '"商用SSL证书"', '{', '}');
$file = str_replace($code, '', $file);
$code = $this->getExtendFunction($file, '"测试证书"', '{', '}');
$file = str_replace($code, '', $file);
$file = str_replace('"currentCertInfo":"busSslList"', '"currentCertInfo":"currentCertInfo"', $file);
$file = preg_replace('!\{(\w+)\.value="busSslList",\w+\(\)\}!', '{$1.value="letsEncryptList"}', $file);
$flag = true;
}
if(strpos($file, '如果您希望添加其它Docker应用')!==false){
$code = $this->getExtendCode($file, '如果您希望添加其它Docker应用', 1, '[', ']');
$code = $this->getExtendFunction($file, $code);
$file = str_replace($code, '', $file);
$flag = true;
}
if(strpos($file, '"recom-view"')!==false){ //soft
$code = $this->getExtendFunction($file, '"recom-view"');
$file = str_replace($code, 'void(0)', $file);
$flag = true;
}
if(strpos($file, '"打开插件文件目录"')!==false){ //soft.table
$code = $this->getExtendFunction($file, '"(续费)"');
$file = str_replace($code, '""', $file);
$code = $this->getExtendFunction($file, '"(续费)"');
$file = str_replace($code, '""', $file);
$flag = true;
}
if(strpos($file, '检测到同名文件')!==false){ //file.
$code = $this->getExtendCode($file, '计算结果:', 3, '[', ']');
$code = $this->getExtendFunction($file, $code);
$file = str_replace($code, '', $file);
$file = preg_replace('!\w+\.sum===\w+\.addend1\+\w+\.addend2!', '!0', $file);
$flag = true;
}
for($i=0;$i<5;$i++){
$code = $this->getExtendCode($file, 'content:"需求反馈"', 2);
if($code){
$code = $this->getExtendFunction($file, $code);
$start = strpos($file, $code);
if(substr($file,$start-1,1) == ':'){
$file = str_replace($code, '{}', $file);
}else{
$file = str_replace($code, '', $file);
}
$flag = true;
}
}
$code = $this->getExtendFunction($file, '("需求反馈")');
if($code){
$file = str_replace($code, '', $file);
$flag = true;
}
$code = $this->getExtendFunction($file, '(" 需求反馈 ")');
if($code){
$file = str_replace($code, '', $file);
$flag = true;
}
if(strpos('暂无搜索结果,<span class="text-primary cursor-pointer NpsDialog">提交需求反馈</span>', $file)!==false){
$file = str_replace('暂无搜索结果,<span class="text-primary cursor-pointer NpsDialog">提交需求反馈</span>', '暂无搜索结果', $file);
$flag = true;
}
if(!$flag) return;
if(file_put_contents($filepath, $file)){
echo '文件:'.$filepath.' 处理成功'."\n";
}else{
echo '文件:'.$filepath.' 处理失败,可能无写入权限'."\n";
}
}
}

View File

@@ -215,11 +215,20 @@ class Api extends BaseController
//宝塔云WAF最新版本 //宝塔云WAF最新版本
public function btwaf_latest_version(){ public function btwaf_latest_version(){
$type = input('?post.type') ? input('post.type') : 0;
if($type == 1){
$data = [ $data = [
'version' => '2.5', 'version' => '1.1',
'description' => '暂无更新日志', 'description' => '暂无更新日志',
'create_time' => 1701252997, 'create_time' => 1705315163,
]; ];
}else{
$data = [
'version' => '3.0',
'description' => '暂无更新日志',
'create_time' => 1705315163,
];
}
$data = bin2hex(json_encode($data)); $data = bin2hex(json_encode($data));
return json(['status'=>true,'err_no'=>0,'msg'=>'获取成功','data'=>$data]); return json(['status'=>true,'err_no'=>0,'msg'=>'获取成功','data'=>$data]);
} }

View File

@@ -8,13 +8,13 @@ class Index extends BaseController
{ {
public function index() public function index()
{ {
return 'Server is ok'; return '';
} }
public function download() public function download()
{ {
if(config_get('download_page') == '0' && !request()->islogin){ if(config_get('download_page') == '0' && !request()->islogin){
return redirect('/admin/login'); return 'need login';
} }
View::assign('siteurl', request()->root(true)); View::assign('siteurl', request()->root(true));
return view(); return view();

View File

@@ -1,8 +1,8 @@
#!/bin/bash #!/bin/bash
Linux_Version="8.0.4" Linux_Version="8.2.0"
Windows_Version="7.9.0" Windows_Version="8.0.0"
Btm_Version="2.2.9" Btm_Version="2.3.0"
FILES=( FILES=(
public/install/src/panel6.zip public/install/src/panel6.zip

View File

@@ -16,7 +16,7 @@
</div> </div>
</div> </div>
</div> </div>
<script src="//cdn.staticfile.org/layer/3.5.1/layer.js"></script> <script src="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/layer/3.5.1/layer.js"></script>
<script> <script>
function refresh_deplist(os){ function refresh_deplist(os){
var confirm = layer.confirm('是否确定从宝塔官方获取最新一键部署列表?', { var confirm = layer.confirm('是否确定从宝塔官方获取最新一键部署列表?', {

View File

@@ -5,15 +5,15 @@
<meta name="renderer" content="webkit"> <meta name="renderer" content="webkit">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>{block name="title"}标题{/block}</title> <title>{block name="title"}标题{/block}</title>
<link href="//cdn.staticfile.org/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet" /> <link href="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet" />
<link href="//cdn.staticfile.org/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" /> <link href="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" />
<link href="/static/css/bootstrap-table.css" rel="stylesheet" /> <link href="/static/css/bootstrap-table.css" rel="stylesheet" />
<script src="//cdn.staticfile.org/modernizr/2.8.3/modernizr.min.js"></script> <script src="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/modernizr/2.8.3/modernizr.min.js"></script>
<script src="//cdn.staticfile.org/jquery/2.1.4/jquery.min.js"></script> <script src="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/2.1.4/jquery.min.js"></script>
<script src="//cdn.staticfile.org/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script> <script src="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
<!--[if lt IE 9]> <!--[if lt IE 9]>
<script src="//cdn.staticfile.org/html5shiv/3.7.3/html5shiv.min.js"></script> <script src="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="//cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script> <script src="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/respond.js/1.4.2/respond.min.js"></script>
<![endif]--> <![endif]-->
</head> </head>
<body> <body>

View File

@@ -42,9 +42,9 @@
</table> </table>
</div> </div>
</div> </div>
<script src="//cdn.staticfile.org/layer/3.5.1/layer.js"></script> <script src="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/layer/3.5.1/layer.js"></script>
<script src="//cdn.staticfile.org/bootstrap-table/1.20.2/bootstrap-table.min.js"></script> <script src="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/bootstrap-table/1.19.1/bootstrap-table.min.js"></script>
<script src="//cdn.staticfile.org/bootstrap-table/1.20.2/extensions/page-jump-to/bootstrap-table-page-jump-to.min.js"></script> <script src="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/bootstrap-table/1.19.1/extensions/page-jump-to/bootstrap-table-page-jump-to.min.js"></script>
<script src="/static/js/custom.js"></script> <script src="/static/js/custom.js"></script>
<script> <script>
function setEnable(id,enable) { function setEnable(id,enable) {

View File

@@ -23,9 +23,9 @@
</table> </table>
</div> </div>
</div> </div>
<script src="//cdn.staticfile.org/layer/3.5.1/layer.js"></script> <script src="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/layer/3.5.1/layer.js"></script>
<script src="//cdn.staticfile.org/bootstrap-table/1.20.2/bootstrap-table.min.js"></script> <script src="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/bootstrap-table/1.19.1/bootstrap-table.min.js"></script>
<script src="//cdn.staticfile.org/bootstrap-table/1.20.2/extensions/page-jump-to/bootstrap-table-page-jump-to.min.js"></script> <script src="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/bootstrap-table/1.19.1/extensions/page-jump-to/bootstrap-table-page-jump-to.min.js"></script>
<script src="/static/js/custom.js"></script> <script src="/static/js/custom.js"></script>
<script> <script>

View File

@@ -5,12 +5,12 @@
<meta name="renderer" content="webkit"> <meta name="renderer" content="webkit">
<meta name="viewport" content="width=device-width, initial-scale=1"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>管理员登录</title> <title>管理员登录</title>
<link href="//cdn.staticfile.org/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet"/> <link href="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet"/>
<script src="//cdn.staticfile.org/modernizr/2.8.3/modernizr.min.js"></script> <script src="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/modernizr/2.8.3/modernizr.min.js"></script>
<script src="//cdn.staticfile.org/jquery/2.1.4/jquery.min.js"></script> <script src="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/2.1.4/jquery.min.js"></script>
<!--[if lt IE 9]> <!--[if lt IE 9]>
<script src="//cdn.staticfile.org/html5shiv/3.7.3/html5shiv.min.js"></script> <script src="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="//cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script> <script src="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/respond.js/1.4.2/respond.min.js"></script>
<![endif]--> <![endif]-->
</head> </head>
<body> <body>
@@ -23,7 +23,7 @@
<span class="icon-bar"></span> <span class="icon-bar"></span>
<span class="icon-bar"></span> <span class="icon-bar"></span>
</button> </button>
<a class="navbar-brand" href="./">宝塔第三方云端管理中心</a> <a class="navbar-brand" href="./">Cloud</a>
</div><!-- /.navbar-header --> </div><!-- /.navbar-header -->
<div id="navbar" class="collapse navbar-collapse"> <div id="navbar" class="collapse navbar-collapse">
<ul class="nav navbar-nav navbar-right"> <ul class="nav navbar-nav navbar-right">
@@ -63,7 +63,7 @@
</div> </div>
</div> </div>
</div> </div>
<script src="//cdn.staticfile.org/layer/3.5.1/layer.js"></script> <script src="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/layer/3.5.1/layer.js"></script>
<script> <script>
function submitlogin(){ function submitlogin(){
var user = $("input[name='user']").val(); var user = $("input[name='user']").val();

View File

@@ -69,9 +69,9 @@ td{overflow: hidden;text-overflow: ellipsis;white-space: nowrap;max-width:340px;
</table> </table>
</div> </div>
</div> </div>
<script src="//cdn.staticfile.org/layer/3.5.1/layer.js"></script> <script src="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/layer/3.5.1/layer.js"></script>
<script src="//cdn.staticfile.org/bootstrap-table/1.20.2/bootstrap-table.min.js"></script> <script src="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/bootstrap-table/1.19.1/bootstrap-table.min.js"></script>
<script src="//cdn.staticfile.org/bootstrap-table/1.20.2/extensions/page-jump-to/bootstrap-table-page-jump-to.min.js"></script> <script src="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/bootstrap-table/1.19.1/extensions/page-jump-to/bootstrap-table-page-jump-to.min.js"></script>
<script src="/static/js/custom.js"></script> <script src="/static/js/custom.js"></script>
<script> <script>

View File

@@ -69,9 +69,9 @@ td{overflow: hidden;text-overflow: ellipsis;white-space: nowrap;max-width:340px;
</table> </table>
</div> </div>
</div> </div>
<script src="//cdn.staticfile.org/layer/3.5.1/layer.js"></script> <script src="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/layer/3.5.1/layer.js"></script>
<script src="//cdn.staticfile.org/bootstrap-table/1.20.2/bootstrap-table.min.js"></script> <script src="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/bootstrap-table/1.19.1/bootstrap-table.min.js"></script>
<script src="//cdn.staticfile.org/bootstrap-table/1.20.2/extensions/page-jump-to/bootstrap-table-page-jump-to.min.js"></script> <script src="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/bootstrap-table/1.19.1/extensions/page-jump-to/bootstrap-table-page-jump-to.min.js"></script>
<script src="/static/js/custom.js"></script> <script src="/static/js/custom.js"></script>
<script> <script>

View File

@@ -23,9 +23,9 @@
</table> </table>
</div> </div>
</div> </div>
<script src="//cdn.staticfile.org/layer/3.5.1/layer.js"></script> <script src="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/layer/3.5.1/layer.js"></script>
<script src="//cdn.staticfile.org/bootstrap-table/1.20.2/bootstrap-table.min.js"></script> <script src="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/bootstrap-table/1.19.1/bootstrap-table.min.js"></script>
<script src="//cdn.staticfile.org/bootstrap-table/1.20.2/extensions/page-jump-to/bootstrap-table-page-jump-to.min.js"></script> <script src="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/bootstrap-table/1.19.1/extensions/page-jump-to/bootstrap-table-page-jump-to.min.js"></script>
<script src="/static/js/custom.js"></script> <script src="/static/js/custom.js"></script>
<script> <script>

View File

@@ -279,7 +279,7 @@ $("select[name='wbt_type']").change(function(){
</div> </div>
</div> </div>
{/if} {/if}
<script src="//cdn.staticfile.org/layer/3.5.1/layer.js"></script> <script src="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/layer/3.5.1/layer.js"></script>
<script> <script>
$(document).ready(function(){ $(document).ready(function(){
var items = $("select[default]"); var items = $("select[default]");

View File

@@ -65,12 +65,12 @@
{if config_get('new_version_btm')}<div class="disflex flex_lrcenter mt_30 install-list"> {if config_get('new_version_btm')}<div class="disflex flex_lrcenter mt_30 install-list">
<div class="install-box monitor"> <div class="install-box monitor">
<div class="img"> <div class="img">
<img src="/static/images/bt_monitor.png" /> <img src="/static/images/bt_monitor.png" style="height: 96px;"/>
</div> </div>
<div class="cont"> <div class="cont">
<div class="top"> <div class="top">
<div class="title">堡塔云监控</div> <div class="title">安全监控</div>
<div class="desc">服务监控和异常告警通知</div> <div class="desc">机跨平台安全管理和监控</div>
</div> </div>
<div class="bottom"> <div class="bottom">
<a class="btn" href="javascript:;" id="goInstallMonitor">查看安装脚本</a> <a class="btn" href="javascript:;" id="goInstallMonitor">查看安装脚本</a>
@@ -145,7 +145,7 @@
<div class="d4" id="instal-monitor"> <div class="d4" id="instal-monitor">
<div class="wrap"> <div class="wrap">
<div class="wrap-title"> <div class="wrap-title">
<div class="text" style="margin-right: 12px;">堡塔云监控{:config_get('new_version_btm')}安装脚本</div> <div class="text" style="margin-right: 12px;">安全监控{:config_get('new_version_btm')}安装脚本</div>
</div> </div>
<div class="desc"> <div class="desc">
使用 SSH 连接工具,如 使用 SSH 连接工具,如
@@ -153,21 +153,21 @@
连接到您的 Linux 服务器后,根据系统执行相应命令开始安装: 连接到您的 Linux 服务器后,根据系统执行相应命令开始安装:
</div> </div>
<div class="install-code"> <div class="install-code">
<span class="osname">堡塔云监控安装脚本</span> <span class="osname">安全监控安装脚本</span>
<div class="code-cont"> <div class="code-cont">
<div class="command" title="点击复制安装脚本">curl -sS {$siteurl}/install/install_btmonitor.sh -o /tmp/install_btmonitor.sh && bash /tmp/install_btmonitor.sh</div> <div class="command" title="点击复制安装脚本">curl -sS {$siteurl}/install/install_btmonitor.sh -o /tmp/install_btmonitor.sh && bash /tmp/install_btmonitor.sh</div>
<span class="ico-copy" title="点击复制安装脚本" data-clipboard-text="curl -sS {$siteurl}/install/install_btmonitor.sh -o /tmp/install_btmonitor.sh && bash /tmp/install_btmonitor.sh">复制</span> <span class="ico-copy" title="点击复制安装脚本" data-clipboard-text="curl -sS {$siteurl}/install/install_btmonitor.sh -o /tmp/install_btmonitor.sh && bash /tmp/install_btmonitor.sh">复制</span>
</div> </div>
</div> </div>
<div class="install-code"> <div class="install-code">
<span class="osname">堡塔云监控更新脚本</span> <span class="osname">安全监控更新脚本</span>
<div class="code-cont"> <div class="code-cont">
<div class="command" title="点击复制更新脚本">curl {$siteurl}/install/update_btmonitor.sh|bash</div> <div class="command" title="点击复制更新脚本">curl {$siteurl}/install/update_btmonitor.sh|bash</div>
<span class="ico-copy" title="点击复制更新脚本" data-clipboard-text="curl {$siteurl}/install/update_btmonitor.sh|bash">复制</span> <span class="ico-copy" title="点击复制更新脚本" data-clipboard-text="curl {$siteurl}/install/update_btmonitor.sh|bash">复制</span>
</div> </div>
</div> </div>
<div class="tips" style="color: orangered; font-weight: 700"> <div class="tips" style="color: orangered; font-weight: 700">
<p>注意推荐使用Chrome、火狐、edge浏览器国产浏览器极速模式</p> <p>注意:安装完成后推荐使用Chrome、火狐、edge浏览器国产浏览器极速模式访问登录系统</p>
</div> </div>
</div> </div>
</div>{/if} </div>{/if}
@@ -193,10 +193,10 @@
</div> </div>
</div> </div>
<script src="//cdn.staticfile.org/jquery/3.6.0/jquery.min.js" type="text/javascript" charset="utf-8"></script> <script src="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/3.6.0/jquery.min.js" type="text/javascript" charset="utf-8"></script>
<script src="//cdn.staticfile.org/layer/3.5.1/layer.js" type="text/javascript" charset="utf-8"></script> <script src="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/layer/3.5.1/layer.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript" src="//cdn.staticfile.org/clipboard.js/1.7.1/clipboard.min.js"></script> <script type="text/javascript" src="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/clipboard.js/1.7.1/clipboard.min.js"></script>
<script type="text/javascript" src="/static/js/dx.js"></script> <script type="text/javascript" src="/static/js/dx.js"></script>
<script> <script>
$(function () { $(function () {

View File

@@ -217,7 +217,7 @@
</form> </form>
</div> </div>
</div> </div>
<script src="//cdn.staticfile.org/jquery/2.1.4/jquery.min.js"></script> <script src="//lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/2.1.4/jquery.min.js"></script>
<script> <script>
$(function () { $(function () {
$('form').on('submit', function (e) { $('form').on('submit', function (e) {

View File

@@ -8,5 +8,6 @@ return [
'updateall' => 'app\command\UpdateAll', 'updateall' => 'app\command\UpdateAll',
'decrypt' => 'app\command\DecryptFile', 'decrypt' => 'app\command\DecryptFile',
'clean' => 'app\command\Clean', 'clean' => 'app\command\Clean',
'cleanvitejs' => 'app\command\CleanViteJs',
], ],
]; ];

0
data/config/.gitkeep Normal file
View File

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

0
data/win/config/.gitkeep Normal file
View File

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -12,9 +12,9 @@ INSERT INTO `cloud_config` (`key`, `value`) VALUES
('bt_key', ''), ('bt_key', ''),
('whitelist', '0'), ('whitelist', '0'),
('download_page', '1'), ('download_page', '1'),
('new_version', '8.0.4'), ('new_version', '8.0.5'),
('update_msg', '暂无更新日志'), ('update_msg', '暂无更新日志'),
('update_date', '2023-11-19'), ('update_date', '2024-01-12'),
('new_version_win', '7.9.0'), ('new_version_win', '7.9.0'),
('update_msg_win', '暂无更新日志'), ('update_msg_win', '暂无更新日志'),
('update_date_win', '2023-07-20'), ('update_date_win', '2023-07-20'),
@@ -48,7 +48,7 @@ CREATE TABLE `cloud_white` (
DROP TABLE IF EXISTS `cloud_record`; DROP TABLE IF EXISTS `cloud_record`;
CREATE TABLE `cloud_record` ( CREATE TABLE `cloud_record` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`ip` varchar(20) NOT NULL, `ip` varchar(200) NOT NULL,
`addtime` datetime NOT NULL, `addtime` datetime NOT NULL,
`usetime` datetime NOT NULL, `usetime` datetime NOT NULL,
PRIMARY KEY (`id`), PRIMARY KEY (`id`),

View File

@@ -40,7 +40,7 @@ cd ~
setup_path="/www" setup_path="/www"
python_bin=$setup_path/server/panel/pyenv/bin/python python_bin=$setup_path/server/panel/pyenv/bin/python
cpu_cpunt=$(cat /proc/cpuinfo|grep processor|wc -l) cpu_cpunt=$(cat /proc/cpuinfo|grep processor|wc -l)
panelPort=$(expr $RANDOM % 55535 + 10000)
# if [ "$1" ];then # if [ "$1" ];then
# IDC_CODE=$1 # IDC_CODE=$1
# fi # fi
@@ -59,26 +59,6 @@ GetSysInfo(){
echo -e ${SYS_VERSION} echo -e ${SYS_VERSION}
echo -e Bit:${SYS_BIT} Mem:${MEM_TOTAL}M Core:${CPU_INFO} echo -e Bit:${SYS_BIT} Mem:${MEM_TOTAL}M Core:${CPU_INFO}
echo -e ${SYS_INFO} echo -e ${SYS_INFO}
if [ -z "${os_version}" ];then
echo -e "============================================"
echo -e "检测到为非常用系统安装,建议更换至Centos-7或Debian-10+或Ubuntu-20+系统安装宝塔面板"
echo -e "详情请查看系统兼容表https://docs.qq.com/sheet/DUm54VUtyTVNlc21H?tab=BB08J2"
echo -e "特殊情况可通过以下联系方式寻求安装协助情况"
fi
is64bit=$(getconf LONG_BIT)
if [ "${is64bit}" == '32' ];then
echo -e "宝塔面板不支持32位系统进行安装请使用64位系统/服务器架构进行安装宝塔"
exit 1
fi
S390X_CHECK=$(uname -a|grep s390x)
if [ "${S390X_CHECK}" ];then
echo -e "宝塔面板不支持s390x架构进行安装请使用64位系统/服务器架构进行安装宝塔"
exit 1
fi
echo -e "============================================" echo -e "============================================"
echo -e "请截图以上报错信息发帖至论坛www.bt.cn/bbs求助" echo -e "请截图以上报错信息发帖至论坛www.bt.cn/bbs求助"
} }
@@ -150,6 +130,14 @@ Set_Ssl(){
esac esac
fi fi
} }
Add_lib_Install(){
Get_Versions
if [ "${os_type}" == "el" ] && [ "${os_version}" == "7" ];then
cd /www/server/panel/class
#btpython -c "import panelPlugin; plugin = panelPlugin.panelPlugin(); plugin.check_install_lib('1')"
#echo "True" > /tmp/panelTask.pl
fi
}
Get_Pack_Manager(){ Get_Pack_Manager(){
if [ -f "/usr/bin/yum" ] && [ -d "/etc/yum.repos.d" ]; then if [ -f "/usr/bin/yum" ] && [ -d "/etc/yum.repos.d" ]; then
PM="yum" PM="yum"
@@ -167,6 +155,8 @@ Auto_Swap()
if [ ! -d /www ];then if [ ! -d /www ];then
mkdir /www mkdir /www
fi fi
echo "正在设置虚拟内存,请稍等..........";
echo '---------------------------------------------';
swapFile="/www/swap" swapFile="/www/swap"
dd if=/dev/zero of=$swapFile bs=1M count=1025 dd if=/dev/zero of=$swapFile bs=1M count=1025
mkswap -f $swapFile mkswap -f $swapFile
@@ -236,7 +226,7 @@ get_node_url(){
echo '---------------------------------------------'; echo '---------------------------------------------';
echo "Selected download node..."; echo "Selected download node...";
nodes=(https://dg2.bt.cn https://download.bt.cn https://ctcc1-node.bt.cn https://cmcc1-node.bt.cn https://ctcc2-node.bt.cn https://hk1-node.bt.cn https://na1-node.bt.cn https://jp1-node.bt.cn); nodes=(https://dg2.bt.cn https://download.bt.cn https://ctcc1-node.bt.cn https://cmcc1-node.bt.cn https://ctcc2-node.bt.cn https://hk1-node.bt.cn https://na1-node.bt.cn https://jp1-node.bt.cn https://cf1-node.aapanel.com);
if [ "$1" ];then if [ "$1" ];then
nodes=($(echo ${nodes[*]}|sed "s#${1}##")) nodes=($(echo ${nodes[*]}|sed "s#${1}##"))
@@ -255,7 +245,7 @@ get_node_url(){
NODE_STATUS=$(echo ${NODE_CHECK}|awk '{print $2}') NODE_STATUS=$(echo ${NODE_CHECK}|awk '{print $2}')
TIME_TOTAL=$(echo ${NODE_CHECK}|awk '{print $3 * 1000 - 500 }'|cut -d '.' -f 1) TIME_TOTAL=$(echo ${NODE_CHECK}|awk '{print $3 * 1000 - 500 }'|cut -d '.' -f 1)
if [ "${NODE_STATUS}" == "200" ];then if [ "${NODE_STATUS}" == "200" ];then
if [ $TIME_TOTAL -lt 100 ];then if [ $TIME_TOTAL -lt 300 ];then
if [ $RES -ge 1500 ];then if [ $RES -ge 1500 ];then
echo "$RES $node" >> $tmp_file1 echo "$RES $node" >> $tmp_file1
fi fi
@@ -266,8 +256,8 @@ get_node_url(){
fi fi
i=$(($i+1)) i=$(($i+1))
if [ $TIME_TOTAL -lt 100 ];then if [ $TIME_TOTAL -lt 300 ];then
if [ $RES -ge 3000 ];then if [ $RES -ge 2390 ];then
break; break;
fi fi
fi fi
@@ -403,7 +393,7 @@ Install_Deb_Pack(){
apt-get install curl -y apt-get install curl -y
fi fi
debPacks="wget curl libcurl4-openssl-dev gcc make zip unzip tar openssl libssl-dev gcc libxml2 libxml2-dev zlib1g zlib1g-dev libjpeg-dev libpng-dev lsof libpcre3 libpcre3-dev cron net-tools swig build-essential libffi-dev libbz2-dev libncurses-dev libsqlite3-dev libreadline-dev tk-dev libgdbm-dev libdb-dev libdb++-dev libpcap-dev xz-utils git qrencode"; debPacks="wget curl libcurl4-openssl-dev gcc make zip unzip tar openssl libssl-dev gcc libxml2 libxml2-dev zlib1g zlib1g-dev libjpeg-dev libpng-dev lsof libpcre3 libpcre3-dev cron net-tools swig build-essential libffi-dev libbz2-dev libncurses-dev libsqlite3-dev libreadline-dev tk-dev libgdbm-dev libdb-dev libdb++-dev libpcap-dev xz-utils git qrencode sqlite3";
apt-get install -y $debPacks --force-yes apt-get install -y $debPacks --force-yes
for debPack in ${debPacks} for debPack in ${debPacks}
@@ -435,6 +425,17 @@ Get_Versions(){
fi fi
fi fi
if [ -f "/etc/os-release" ];then
. /etc/os-release
OS_V=${VERSION_ID%%.*}
if [ "${ID}" == "opencloudos" ] && [[ "${OS_V}" =~ ^(9)$ ]];then
os_type="opencloudos"
os_version="9"
return
fi
fi
if [ -f $redhat_version_file ];then if [ -f $redhat_version_file ];then
os_type='el' os_type='el'
is_aliyunos=$(cat $redhat_version_file|grep Aliyun) is_aliyunos=$(cat $redhat_version_file|grep Aliyun)
@@ -508,7 +509,7 @@ Install_Python_Lib(){
chmod -R 700 $pyenv_path/pyenv/bin chmod -R 700 $pyenv_path/pyenv/bin
is_package=$($python_bin -m psutil 2>&1|grep package) is_package=$($python_bin -m psutil 2>&1|grep package)
if [ "$is_package" = "" ];then if [ "$is_package" = "" ];then
wget -O $pyenv_path/pyenv/pip.txt $download_Url/install/pyenv/pip.txt -T 5 wget -O $pyenv_path/pyenv/pip.txt $download_Url/install/pyenv/pip.txt -T 15
$pyenv_path/pyenv/bin/pip install -U pip $pyenv_path/pyenv/bin/pip install -U pip
$pyenv_path/pyenv/bin/pip install -U setuptools==65.5.0 $pyenv_path/pyenv/bin/pip install -U setuptools==65.5.0
$pyenv_path/pyenv/bin/pip install -r $pyenv_path/pyenv/pip.txt $pyenv_path/pyenv/bin/pip install -r $pyenv_path/pyenv/pip.txt
@@ -581,13 +582,15 @@ Install_Python_Lib(){
os_version="" os_version=""
rm -f /www/server/panel/pymake.pl rm -f /www/server/panel/pymake.pl
fi fi
echo "==============================================="
echo "正在下载面板运行环境,请稍等..............."
echo "==============================================="
if [ "${os_version}" != "" ];then if [ "${os_version}" != "" ];then
pyenv_file="/www/pyenv.tar.gz" pyenv_file="/www/pyenv.tar.gz"
wget -O $pyenv_file $download_Url/install/pyenv/pyenv-${os_type}${os_version}-x${is64bit}.tar.gz -T 10 wget -O $pyenv_file $download_Url/install/pyenv/pyenv-${os_type}${os_version}-x${is64bit}.tar.gz -T 15
if [ "$?" != "0" ];then if [ "$?" != "0" ];then
get_node_url $download_Url get_node_url $download_Url
wget -O $pyenv_file $download_Url/install/pyenv/pyenv-${os_type}${os_version}-x${is64bit}.tar.gz -T 10 wget -O $pyenv_file $download_Url/install/pyenv/pyenv-${os_type}${os_version}-x${is64bit}.tar.gz -T 15
fi fi
tmp_size=$(du -b $pyenv_file|awk '{print $1}') tmp_size=$(du -b $pyenv_file|awk '{print $1}')
if [ $tmp_size -lt 703460 ];then if [ $tmp_size -lt 703460 ];then
@@ -618,7 +621,7 @@ Install_Python_Lib(){
cd /www cd /www
python_src='/www/python_src.tar.xz' python_src='/www/python_src.tar.xz'
python_src_path="/www/Python-${py_version}" python_src_path="/www/Python-${py_version}"
wget -O $python_src $download_Url/src/Python-${py_version}.tar.xz -T 5 wget -O $python_src $download_Url/src/Python-${py_version}.tar.xz -T 15
tmp_size=$(du -b $python_src|awk '{print $1}') tmp_size=$(du -b $python_src|awk '{print $1}')
if [ $tmp_size -lt 10703460 ];then if [ $tmp_size -lt 10703460 ];then
rm -f $python_src rm -f $python_src
@@ -672,11 +675,8 @@ Install_Python_Lib(){
fi fi
} }
Install_Bt(){ Install_Bt(){
panelPort="8888"
if [ -f ${setup_path}/server/panel/data/port.pl ];then if [ -f ${setup_path}/server/panel/data/port.pl ];then
panelPort=$(cat ${setup_path}/server/panel/data/port.pl) panelPort=$(cat ${setup_path}/server/panel/data/port.pl)
else
panelPort=$(expr $RANDOM % 55535 + 10000)
fi fi
if [ "${PANEL_PORT}" ];then if [ "${PANEL_PORT}" ];then
panelPort=$PANEL_PORT panelPort=$PANEL_PORT
@@ -701,9 +701,12 @@ Install_Bt(){
sleep 1 sleep 1
fi fi
wget -O /etc/init.d/bt ${download_Url}/install/src/bt6.init -T 10 wget -O /etc/init.d/bt ${download_Url}/install/src/bt6.init -T 15
wget -O /www/server/panel/install/public.sh ${Btapi_Url}/install/public.sh -T 10 wget -O /www/server/panel/install/public.sh ${Btapi_Url}/install/public.sh -T 15
wget -O panel.zip ${Btapi_Url}/install/src/panel6.zip -T 10 echo "=============================================="
echo "正在下载面板文件,请稍等..................."
echo "=============================================="
wget -O panel.zip ${Btapi_Url}/install/src/panel6.zip -T 15
if [ -f "${setup_path}/server/panel/data/default.db" ];then if [ -f "${setup_path}/server/panel/data/default.db" ];then
if [ -d "/${setup_path}/server/panel/old_data" ];then if [ -d "/${setup_path}/server/panel/old_data" ];then
@@ -716,6 +719,11 @@ Install_Bt(){
mv -f ${setup_path}/server/panel/data/system.db ${setup_path}/server/panel/old_data/system.db mv -f ${setup_path}/server/panel/data/system.db ${setup_path}/server/panel/old_data/system.db
mv -f ${setup_path}/server/panel/data/port.pl ${setup_path}/server/panel/old_data/port.pl mv -f ${setup_path}/server/panel/data/port.pl ${setup_path}/server/panel/old_data/port.pl
mv -f ${setup_path}/server/panel/data/admin_path.pl ${setup_path}/server/panel/old_data/admin_path.pl mv -f ${setup_path}/server/panel/data/admin_path.pl ${setup_path}/server/panel/old_data/admin_path.pl
if [ -d "${setup_path}/server/panel/data/db" ];then
\cp -r ${setup_path}/server/panel/data/db ${setup_path}/server/panel/old_data/
fi
fi fi
if [ ! -f "/usr/bin/unzip" ]; then if [ ! -f "/usr/bin/unzip" ]; then
@@ -734,6 +742,11 @@ Install_Bt(){
mv -f ${setup_path}/server/panel/old_data/system.db ${setup_path}/server/panel/data/system.db mv -f ${setup_path}/server/panel/old_data/system.db ${setup_path}/server/panel/data/system.db
mv -f ${setup_path}/server/panel/old_data/port.pl ${setup_path}/server/panel/data/port.pl mv -f ${setup_path}/server/panel/old_data/port.pl ${setup_path}/server/panel/data/port.pl
mv -f ${setup_path}/server/panel/old_data/admin_path.pl ${setup_path}/server/panel/data/admin_path.pl mv -f ${setup_path}/server/panel/old_data/admin_path.pl ${setup_path}/server/panel/data/admin_path.pl
if [ -d "${setup_path}/server/panel/old_data/db" ];then
\cp -r ${setup_path}/server/panel/old_data/db ${setup_path}/server/panel/data/
fi
if [ -d "/${setup_path}/server/panel/old_data" ];then if [ -d "/${setup_path}/server/panel/old_data" ];then
rm -rf ${setup_path}/server/panel/old_data rm -rf ${setup_path}/server/panel/old_data
fi fi
@@ -744,6 +757,11 @@ Install_Bt(){
Red_Error "ERROR: Failed to download, please try install again!" "ERROR: 下载宝塔失败,请尝试重新安装!" Red_Error "ERROR: Failed to download, please try install again!" "ERROR: 下载宝塔失败,请尝试重新安装!"
fi fi
SYS_LOG_CHECK=$(grep ^weekly /etc/logrotate.conf)
if [ "${SYS_LOG_CHECK}" ];then
sed -i 's/rotate [0-9]*/rotate 8/g' /etc/logrotate.conf
fi
rm -f panel.zip rm -f panel.zip
rm -f ${setup_path}/server/panel/class/*.pyc rm -f ${setup_path}/server/panel/class/*.pyc
rm -f ${setup_path}/server/panel/*.pyc rm -f ${setup_path}/server/panel/*.pyc
@@ -753,8 +771,8 @@ Install_Bt(){
chmod -R +x ${setup_path}/server/panel/script chmod -R +x ${setup_path}/server/panel/script
ln -sf /etc/init.d/bt /usr/bin/bt ln -sf /etc/init.d/bt /usr/bin/bt
echo "${panelPort}" > ${setup_path}/server/panel/data/port.pl echo "${panelPort}" > ${setup_path}/server/panel/data/port.pl
wget -O /etc/init.d/bt ${download_Url}/install/src/bt7.init -T 10 wget -O /etc/init.d/bt ${download_Url}/install/src/bt7.init -T 15
wget -O /www/server/panel/init.sh ${download_Url}/install/src/bt7.init -T 10 wget -O /www/server/panel/init.sh ${download_Url}/install/src/bt7.init -T 15
wget -O /www/server/panel/data/softList.conf ${download_Url}/install/conf/softList.conf wget -O /www/server/panel/data/softList.conf ${download_Url}/install/conf/softList.conf
rm -f /www/server/panel/class/*.so rm -f /www/server/panel/class/*.so
@@ -800,19 +818,22 @@ Set_Bt_Panel(){
echo "/${auth_path}" > ${admin_auth} echo "/${auth_path}" > ${admin_auth}
fi fi
chmod -R 700 $pyenv_path/pyenv/bin chmod -R 700 $pyenv_path/pyenv/bin
if [ ! -f "/www/server/panel/pyenv/n.pl" ];then
btpip install docxtpl==0.16.7 btpip install docxtpl==0.16.7
/www/server/panel/pyenv/bin/pip3 install pymongo /www/server/panel/pyenv/bin/pip3 install pymongo
/www/server/panel/pyenv/bin/pip3 install psycopg2-binary /www/server/panel/pyenv/bin/pip3 install psycopg2-binary
/www/server/panel/pyenv/bin/pip3 install flask -U /www/server/panel/pyenv/bin/pip3 install flask -U
/www/server/panel/pyenv/bin/pip3 install flask-sock /www/server/panel/pyenv/bin/pip3 install flask-sock
/www/server/panel/pyenv/bin/pip3 install -I gevent
btpip install simple-websocket==0.10.0 btpip install simple-websocket==0.10.0
btpip install natsort btpip install natsort
btpip uninstall enum34 -y
btpip install geoip2==4.7.0
btpip install brotli
btpip install PyMySQL
fi
auth_path=$(cat ${admin_auth}) auth_path=$(cat ${admin_auth})
cd ${setup_path}/server/panel/ cd ${setup_path}/server/panel/
if [ "$SET_SSL" == true ]; then
btpip install -I pyOpenSSl 2>/dev/null
btpython /www/server/panel/tools.py ssl
fi
/etc/init.d/bt start /etc/init.d/bt start
$python_bin -m py_compile tools.py $python_bin -m py_compile tools.py
$python_bin tools.py username $python_bin tools.py username
@@ -824,6 +845,21 @@ Set_Bt_Panel(){
echo "${password}" > ${setup_path}/server/panel/default.pl echo "${password}" > ${setup_path}/server/panel/default.pl
chmod 600 ${setup_path}/server/panel/default.pl chmod 600 ${setup_path}/server/panel/default.pl
sleep 3 sleep 3
if [ "$SET_SSL" == true ]; then
if [ ! -f "/www/server/panel/pyenv/n.pl" ];then
btpip install -I pyOpenSSl 2>/dev/null
fi
echo "========================================"
echo "正在开启面板SSL请稍等............ "
echo "========================================"
SSL_STATUS=$(btpython /www/server/panel/tools.py ssl)
if [ "${SSL_STATUS}" == "0" ] ;then
echo -n " -4 " > /www/server/panel/data/v4.pl
btpython /www/server/panel/tools.py ssl
fi
echo "证书开启成功!"
echo "========================================"
fi
/etc/init.d/bt restart /etc/init.d/bt restart
sleep 3 sleep 3
isStart=$(ps aux |grep 'BT-Panel'|grep -v grep|awk '{print $2}') isStart=$(ps aux |grep 'BT-Panel'|grep -v grep|awk '{print $2}')
@@ -842,6 +878,9 @@ Set_Bt_Panel(){
btpython -c 'import tools;tools.set_panel_username("'$PANEL_USER'")' btpython -c 'import tools;tools.set_panel_username("'$PANEL_USER'")'
cd ~ cd ~
fi fi
if [ -f "/usr/bin/sqlite3" ] ;then
sqlite3 /www/server/panel/data/db/panel.db "UPDATE config SET status = '1' WHERE id = '1';" > /dev/null 2>&1
fi
} }
Set_Firewall(){ Set_Firewall(){
sshPort=$(cat /etc/ssh/sshd_config | grep 'Port '|awk '{print $2}') sshPort=$(cat /etc/ssh/sshd_config | grep 'Port '|awk '{print $2}')
@@ -974,6 +1013,7 @@ Install_Main(){
Get_Ip_Address Get_Ip_Address
Setup_Count ${IDC_CODE} Setup_Count ${IDC_CODE}
Add_lib_Install
} }
echo " echo "
@@ -982,7 +1022,7 @@ echo "
+---------------------------------------------------------------------- +----------------------------------------------------------------------
| Copyright © 2015-2099 BT-SOFT(http://www.bt.cn) All rights reserved. | Copyright © 2015-2099 BT-SOFT(http://www.bt.cn) All rights reserved.
+---------------------------------------------------------------------- +----------------------------------------------------------------------
| The WebPanel URL will be http://SERVER_IP:8888 when installed. | The WebPanel URL will be http://SERVER_IP:${panelPort} when installed.
+---------------------------------------------------------------------- +----------------------------------------------------------------------
| 为了您的正常使用,请确保使用全新或纯净的系统安装宝塔面板,不支持已部署项目/环境的系统安装 | 为了您的正常使用,请确保使用全新或纯净的系统安装宝塔面板,不支持已部署项目/环境的系统安装
+---------------------------------------------------------------------- +----------------------------------------------------------------------
@@ -1060,7 +1100,12 @@ echo -e ""
echo -e "==================================================================" echo -e "=================================================================="
endTime=`date +%s` endTime=`date +%s`
((outTime=($endTime-$startTime)/60)) ((outTime=($endTime-$startTime)/60))
if [ "${outTime}" == "0" ];then
((outTime=($endTime-$startTime)))
echo -e "Time consumed:\033[32m $outTime \033[0mseconds!"
else
echo -e "Time consumed:\033[32m $outTime \033[0mMinute!" echo -e "Time consumed:\033[32m $outTime \033[0mMinute!"
fi

View File

@@ -9,8 +9,13 @@ export PATH
export LANG=en_US.UTF-8 export LANG=en_US.UTF-8
export LANGUAGE=en_US:en export LANGUAGE=en_US:en
NODE_FILE_CHECK=$(cat /www/server/panel/data/node.json |grep 125.88.182.172)
if [ "${NODE_FILE_CHECK}" ];then
rm -f /www/server/panel/data/node.json
fi
get_node_url(){ get_node_url(){
nodes=(https://dg2.bt.cn https://download.bt.cn https://ctcc1-node.bt.cn https://cmcc1-node.bt.cn https://ctcc2-node.bt.cn https://hk1-node.bt.cn https://na1-node.bt.cn https://jp1-node.bt.cn); nodes=(https://dg2.bt.cn https://download.bt.cn https://ctcc1-node.bt.cn https://cmcc1-node.bt.cn https://ctcc2-node.bt.cn https://hk1-node.bt.cn https://na1-node.bt.cn https://jp1-node.bt.cn https://cf1-node.aapanel.com);
if [ "$1" ];then if [ "$1" ];then
nodes=($(echo ${nodes[*]}|sed "s#${1}##")) nodes=($(echo ${nodes[*]}|sed "s#${1}##"))
@@ -40,8 +45,8 @@ get_node_url(){
fi fi
i=$(($i+1)) i=$(($i+1))
if [ $TIME_TOTAL -lt 200 ];then if [ $TIME_TOTAL -lt 300 ];then
if [ $RES -ge 3000 ];then if [ $RES -ge 2390 ];then
break; break;
fi fi
fi fi

Binary file not shown.

View File

@@ -18,6 +18,11 @@ if [ ! -f "/www/server/panel/pyenv/bin/python3" ];then
echo "请截图发帖至论坛www.bt.cn/bbs求助" echo "请截图发帖至论坛www.bt.cn/bbs求助"
exit 0; exit 0;
fi fi
Centos6Check=$(cat /etc/redhat-release | grep ' 6.' | grep -iE 'centos|Red Hat')
if [ "${Centos6Check}" ];then
echo "Centos6不支持升级宝塔面板建议备份数据重装更换Centos7/8安装宝塔面板"
exit 1
fi
public_file=/www/server/panel/install/public.sh public_file=/www/server/panel/install/public.sh
if [ ! -f $public_file ];then if [ ! -f $public_file ];then
@@ -42,7 +47,7 @@ download_Url=$NODE_URL
setup_path=/www setup_path=/www
version=$(curl -Ss --connect-timeout 5 -m 2 $Btapi_Url/api/panel/get_version) version=$(curl -Ss --connect-timeout 5 -m 2 $Btapi_Url/api/panel/get_version)
if [ "$version" = '' ];then if [ "$version" = '' ];then
version='8.0.1' version='8.2.0'
fi fi
armCheck=$(uname -m|grep arm) armCheck=$(uname -m|grep arm)
if [ "${armCheck}" ];then if [ "${armCheck}" ];then
@@ -58,6 +63,7 @@ if [ $dsize -lt 10240 ];then
echo "获取更新包失败,请稍后更新或联系宝塔运维" echo "获取更新包失败,请稍后更新或联系宝塔运维"
exit; exit;
fi fi
unzip -o /tmp/panel.zip -d $setup_path/server/ > /dev/null unzip -o /tmp/panel.zip -d $setup_path/server/ > /dev/null
rm -f /tmp/panel.zip rm -f /tmp/panel.zip
cd $setup_path/server/panel/ cd $setup_path/server/panel/
@@ -67,17 +73,24 @@ if [ "${check_bt}" = "" ];then
wget -O /etc/init.d/bt $download_Url/install/src/bt7.init -T 20 wget -O /etc/init.d/bt $download_Url/install/src/bt7.init -T 20
chmod +x /etc/init.d/bt chmod +x /etc/init.d/bt
fi fi
echo "=============================================================="
echo "正在修复面板依赖问题"
rm -f /www/server/panel/*.pyc rm -f /www/server/panel/*.pyc
rm -f /www/server/panel/class/*.pyc rm -f /www/server/panel/class/*.pyc
#pip install flask_sqlalchemy #pip install flask_sqlalchemy
#pip install itsdangerous==0.24 #pip install itsdangerous==0.24
btpip install natsort
pip_list=$($mypip list) pip_list=$($mypip list 2>&1)
request_v=$(btpip list 2>/dev/null|grep "requests "|awk '{print $2}'|cut -d '.' -f 2) request_v=$(btpip list 2>/dev/null|grep "requests "|awk '{print $2}'|cut -d '.' -f 2)
if [ "$request_v" = "" ] || [ "${request_v}" -gt "28" ];then if [ "$request_v" = "" ] || [ "${request_v}" -gt "28" ];then
$mypip install requests==2.27.1 $mypip install requests==2.27.1
fi fi
NATSORT_C=$(echo $pip_list|grep natsort)
if [ -z "${NATSORT_C}" ];then
btpip install natsort
fi
openssl_v=$(echo "$pip_list"|grep pyOpenSSL) openssl_v=$(echo "$pip_list"|grep pyOpenSSL)
if [ "$openssl_v" = "" ];then if [ "$openssl_v" = "" ];then
$mypip install pyOpenSSL $mypip install pyOpenSSL
@@ -92,12 +105,59 @@ pymysql=$(echo "$pip_list"|grep pymysql)
if [ "$pymysql" = "" ];then if [ "$pymysql" = "" ];then
$mypip install pymysql $mypip install pymysql
fi fi
GEVENT_V=$(btpip list 2> /dev/null|grep "gevent "|awk '{print $2}'|cut -f 1 -d '.')
if [ "${GEVENT_V}" -le "1" ];then
/www/server/panel/pyenv/bin/pip3 install -I gevent
fi
BROTLI_C=$(btpip list 2> /dev/null |grep Brotli)
if [ -z "$BROTLI_C" ]; then
btpip install brotli
fi
PYMYSQL_C=$(btpip list 2> /dev/null |grep PyMySQL)
if [ -z "$PYMYSQL_C" ]; then
btpip install PyMySQL
fi
PY_CRPYT=$(btpip list 2> /dev/null |grep cryptography|awk '{print $2}'|cut -f 1 -d '.')
if [ "${PY_CRPYT}" -le "10" ];then
btpip install pyOpenSSL==24.1.0
btpip install cryptography==42.0.5
fi
PYMYSQL_SSL_CHECK=$(btpython -c "import pymysql" 2>&1|grep "AttributeError: module 'cryptography.hazmat.bindings._rust.openssl'")
if [ "${PYMYSQL_SSL_CHECK}" ];then
btpip uninstall pyopenssl cryptography -y
btpip install pyopenssl cryptography
fi
btpip uninstall enum34 -y
GEOIP_C=$(echo $pip_list|grep geoip2)
if [ -z "${GEOIP_C}" ];then
btpip install geoip2==4.7.0
fi
PANDAS_C=$(echo $pip_list|grep pandas)
if [ -z "${PANDAS_C}" ];then
btpip install pandas
fi
pymysql=$(echo "$pip_list"|grep pycryptodome) pymysql=$(echo "$pip_list"|grep pycryptodome)
if [ "$pymysql" = "" ];then if [ "$pymysql" = "" ];then
$mypip install pycryptodome $mypip install pycryptodome
fi fi
echo "修复面板依赖完成!"
echo "==========================================="
RE_UPDATE=$(cat /www/server/panel/data/db/update)
if [ "$RE_UPDATE" -ge "4" ];then
echo "2" > /www/server/panel/data/db/update
fi
#psutil=$(echo "$pip_list"|grep psutil|awk '{print $2}'|grep '5.7.') #psutil=$(echo "$pip_list"|grep psutil|awk '{print $2}'|grep '5.7.')
#if [ "$psutil" = "" ];then #if [ "$psutil" = "" ];then
# $mypip install -U psutil # $mypip install -U psutil
@@ -126,6 +186,12 @@ if [ ! -f /www/server/panel/data/total_nps.pl ]; then
echo "" > /www/server/panel/data/total_nps.pl echo "" > /www/server/panel/data/total_nps.pl
fi fi
echo "==========================================="
echo "正在更新面板文件..............."
sleep 1
echo "更新完成!"
echo "==========================================="
chattr -i /etc/init.d/bt chattr -i /etc/init.d/bt
chmod +x /etc/init.d/bt chmod +x /etc/init.d/bt
echo "=====================================" echo "====================================="

View File

@@ -14,10 +14,14 @@ if [ "${is64bit}" != '64' ];then
echo "退出、不做任何操作" echo "退出、不做任何操作"
exit 1 exit 1
fi fi
Centos6Check=$(cat /etc/redhat-release | grep ' 6.' | grep -iE 'centos|Red Hat')
if [ "${Centos6Check}" ];then
echo "Centos6不支持升级宝塔面板建议备份数据重装更换Centos7/8安装宝塔面板"
exit 1
fi
Btapi_Url='http://www.example.com' Btapi_Url='http://www.example.com'
up_plugin=0 up_plugin=0
download_file(){ download_file(){

View File

@@ -66,7 +66,7 @@ canvas {
top: 0; top: 0;
display: flex; display: flex;
align-items: center; align-items: center;
width: 24%; width: 30%;
padding: 30px 10px 16px 20px; padding: 30px 10px 16px 20px;
border-radius: 8px; border-radius: 8px;
background-color: #fff; background-color: #fff;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 194 KiB

After

Width:  |  Height:  |  Size: 206 KiB

View File

@@ -14,12 +14,14 @@
- 全局搜索替换 https://api.bt.cn => http://www.example.com - 全局搜索替换 https://api.bt.cn => http://www.example.com
- 全局搜索替换 https://www.bt.cn/api/ => http://www.example.com/api/需排除clearModel.py、scanningModel.py、ipsModel.py - 全局搜索替换 https://www.bt.cn/api/ => http://www.example.com/api/需排除clearModel.py、scanningModel.py、ipsModel.py、js文件
- 全局搜索替换 http://www.bt.cn/api/ => http://www.example.com/api/需排除js文件 - 全局搜索替换 http://www.bt.cn/api/ => http://www.example.com/api/需排除js文件
- 全局搜索替换 https://download.bt.cn/install/update6.sh => http://www.example.com/install/update6.sh - 全局搜索替换 https://download.bt.cn/install/update6.sh => http://www.example.com/install/update6.sh
- 搜索并删除提交异常报告的代码 bt_error/index.php
- class/ajax.py 文件 \# 是否执行升级程序 下面的 public.get_url() 改成 public.GetConfigValue('home') - class/ajax.py 文件 \# 是否执行升级程序 下面的 public.get_url() 改成 public.GetConfigValue('home')
class/jobs.py 文件 \#尝试升级到独立环境 下面的 public.get_url() 改成 public.GetConfigValue('home') class/jobs.py 文件 \#尝试升级到独立环境 下面的 public.get_url() 改成 public.GetConfigValue('home')
@@ -42,6 +44,8 @@
在 def check_domain_cloud(domain): 这一行下面加上 return 在 def check_domain_cloud(domain): 这一行下面加上 return
在 def err_collect 这一行下面加上 return
在 def get_improvement(): 这一行下面加上 return False 在 def get_improvement(): 这一行下面加上 return False
在free_login_area方法内get_free_ips_area替换成get_ips_area 在free_login_area方法内get_free_ips_area替换成get_ips_area
@@ -50,9 +54,7 @@
在login_send_body方法内free_login_area(login_ip=server_ip_area的server_ip_area改成login_ip 在login_send_body方法内free_login_area(login_ip=server_ip_area的server_ip_area改成login_ip
- class/panelPlugin.py 文件,download_icon方法内替换 public.GetConfigValue('home') => 'https://www.bt.cn' - class/panelPlugin.py 文件,删除public.total_keyword(get.query)这一行
删除public.total_keyword(get.query)这一行
__set_pyenv方法内temp_file = public.readFile(filename)这行代码下面加上 __set_pyenv方法内temp_file = public.readFile(filename)这行代码下面加上
@@ -61,32 +63,52 @@
temp_file = temp_file.replace('https://download.bt.cn/install/public.sh', 'http://www.example.com/install/public.sh') temp_file = temp_file.replace('https://download.bt.cn/install/public.sh', 'http://www.example.com/install/public.sh')
``` ```
def check_status(self, softInfo): 方法最后一行加上
```python
if 'endtime' in softInfo:
softInfo['endtime'] = time.time() + 86400 * 3650
```
plugin_bin.pl 改成 plugin_list.json
- class/plugin_deployment.py 文件SetupPackage方法内替换 public.GetConfigValue('home') => 'https://www.bt.cn' - class/plugin_deployment.py 文件SetupPackage方法内替换 public.GetConfigValue('home') => 'https://www.bt.cn'
- class/config.py 文件get_nps方法内data['nps'] = False改成Trueget_nps_new方法下面加上 return public.returnMsg(False, "获取问卷失败")
def err_collection(self, get): 这一行下面加上 return public.returnMsg(True, "OK")
- class/push/site_push.py 文件,'https://www.bt.cn' => 'http://www.example.com'
- script/flush_plugin.py 文件删除clear_hosts()一行 - script/flush_plugin.py 文件删除clear_hosts()一行
- install/install_soft.sh 在bash执行之前加入以下代码 - script/reload_check.py 文件在第2行插入sys.exit()
- script/local_fix.sh 文件,${D_NODE_URL}替换成www.example.com
- tools.py 文件u_input == 16下面的public.get_url()替换成public.GetConfigValue('home')
- install/install_soft.sh 在. 执行之前加入以下代码
```shell ```shell
sed -i "s/http:\/\/download.bt.cn\/install\/public.sh/http:\/\/www.example.com\/install\/public.sh/" lib.sh sed -i "s/http:\/\/download.bt.cn\/install\/public.sh/http:\/\/www.example.com\/install\/public.sh/" lib.sh
sed -i "s/https:\/\/download.bt.cn\/install\/public.sh/http:\/\/www.example.com\/install\/public.sh/" lib.sh sed -i "s/https:\/\/download.bt.cn\/install\/public.sh/http:\/\/www.example.com\/install\/public.sh/" lib.sh
sed -i "/wget -O Tpublic.sh/d" $name.sh
``` ```
- install/public.sh 用官网最新版的[public.sh](http://download.bt.cn/install/public.sh)替换并去除最下面bt_check一行 - install/public.sh 用官网最新版的[public.sh](http://download.bt.cn/install/public.sh)替换并去除最下面bt_check一行
- 去除无用的定时任务task.py 文件 删除以下几行 - 去除无用的定时任务task.py 文件 删除以下几行
"check_panel_msg": check_panel_msg, "check_panel_msg": self.check_panel_msg,
"update_software_list": self.update_software_list,
PluginLoader.daemon_panel() PluginLoader.daemon_panel()
check_node_status()
- 去除WebRTC连接BTPanel/static/js/public.js 删除stun.start();这一行 - 去除WebRTC连接BTPanel/static/js/public.js 删除stun.start();这一行
- 去除首页广告BTPanel/static/js/index.js 文件删除两处index.recommend_paid_version()
- 去除首页自动检测更新避免频繁请求云端BTPanel/static/js/index.js 文件注释掉bt.system.check_update这一段代码外的setTimeout
- 去除内页广告BTPanel/templates/default/layout.html 删除两处getPaymentStatus(); - 去除内页广告BTPanel/templates/default/layout.html 删除两处getPaymentStatus();
- 删除问卷调查BTPanel/templates/default/layout.html 删除if(window.localStorage.getItem('panelNPS') == null)以及下面的行 - 删除问卷调查BTPanel/templates/default/layout.html 删除if(window.localStorage.getItem('panelNPS') == null)以及下面的行
@@ -111,12 +133,10 @@
- [可选]关闭自动生成访问日志:在 BTPanel/\_\_init\_\_.py 删除public.write_request_log这一行 - [可选]关闭自动生成访问日志:在 BTPanel/\_\_init\_\_.py 删除public.write_request_log这一行
- [可选]删除小图标广告:在BTPanel/static/js/site.js删除“WAF防火墙”对应的span标签 - [可选]新版vite页面去除需求反馈、各种广告、计算题等执行 php think cleanvitejs <面板BTPanel/static/vite/js路径>
- [可选]上传文件默认选中覆盖在BTPanel/static/js/upload-drog.jsid="all_operation"加checked属性
解压安装包panel6.zip将更新包改好的文件覆盖到里面然后重新打包即可更新安装包。 解压安装包[panel6.zip](http://download.bt.cn/install/src/panel6.zip),将更新包改好的文件覆盖到里面,然后重新打包,即可更新安装包。(
别忘了删除class文件夹里面所有的.so文件 别忘了删除class文件夹里面所有的.so文件

View File

@@ -10,12 +10,12 @@ Windows版宝塔由于加密文件太多无法全部解密因此无法做
- 删除PluginLoader.pyd将win/PluginLoader.py复制到class文件夹 - 删除PluginLoader.pyd将win/PluginLoader.py复制到class文件夹
- 批量解密模块文件:执行 php think decrypt classdir <面板class文件夹路径>
- 全局搜索替换 https://api.bt.cn => http://www.example.com - 全局搜索替换 https://api.bt.cn => http://www.example.com
- 全局搜索替换 https://www.bt.cn/api/ => http://www.example.com/api/需排除ipsModel.py - 全局搜索替换 https://www.bt.cn/api/ => http://www.example.com/api/需排除ipsModel.py
- 全局搜索替换 http://www.bt.cn/api/ => http://www.example.com/api/
- 全局搜索替换 https://download.bt.cn/win/panel/data/setup.py => http://www.example.com/win/panel/data/setup.py - 全局搜索替换 https://download.bt.cn/win/panel/data/setup.py => http://www.example.com/win/panel/data/setup.py
- class/panel_update.py 文件 public.get_url() => 'http://www.example.com' - class/panel_update.py 文件 public.get_url() => 'http://www.example.com'
@@ -76,3 +76,5 @@ Windows版宝塔由于加密文件太多无法全部解密因此无法做
- [可选]关闭自动生成访问日志:在 BTPanel/\_\_init\_\_.py 删除public.write_request_log()这一行 - [可选]关闭自动生成访问日志:在 BTPanel/\_\_init\_\_.py 删除public.write_request_log()这一行
- [可选]上传文件默认选中覆盖在BTPanel/static/js/upload-drog.jsid="all_operation"加checked属性