Compare commits

..

6 Commits

Author SHA1 Message Date
mercury 1dfb3da089 update version 2024-11-04 19:44:47 +04:00
mercury 7358730864 fix update script 2024-11-04 19:37:12 +04:00
mercury 57cd1019f5 fix restart 2024-11-04 19:34:41 +04:00
mercury dfbcd67f83 restart button 2024-11-04 19:23:15 +04:00
mercury 5016c6bda3 ability to enable/disable ports 2024-11-04 19:06:42 +04:00
mercury bc3914c3b9 json beautifier when saving template 2024-11-04 17:33:15 +04:00
8 changed files with 119 additions and 13 deletions
+2 -1
View File
@@ -21,4 +21,5 @@ update/*
override.env
override.html
override.php
override.php
docker-compose.override.yml
+95 -1
View File
@@ -142,6 +142,9 @@ class Bot
case preg_match('~^/autoupdate$~', $this->input['message'], $m):
$this->autoupdate();
break;
case preg_match('~^/ports$~', $this->input['callback'], $m):
$this->ports();
break;
case preg_match('~^/adgFillAllowedClients(?: (\d+))?$~', $this->input['callback'], $m):
$this->adgFillAllowedClients($m[1] ?: false);
break;
@@ -181,6 +184,9 @@ class Bot
case preg_match('~^/exportList (\w+)$~', $this->input['callback'], $m):
$this->exportList($m[1]);
break;
case preg_match('~^/hidePort (\w+)$~', $this->input['callback'], $m):
$this->hidePort($m[1]);
break;
case preg_match('~^/deleteYes (\w+)$~', $this->input['callback'], $m):
$this->deleteYes($m[1]);
break;
@@ -193,6 +199,9 @@ class Bot
case preg_match('~^/applyupdatebot$~', $this->input['callback'], $m):
$this->applyupdatebot();
break;
case preg_match('~^/restart$~', $this->input['callback'], $m):
$this->restart();
break;
case preg_match('~^/branches$~', $this->input['callback'], $m):
$this->branches();
break;
@@ -4462,7 +4471,7 @@ DNS-over-HTTPS with IP:
$pac = $this->getPacConf();
switch ($name) {
case 'origin':
file_put_contents("/config/$type.json", $json);
file_put_contents("/config/$type.json", json_encode(json_decode($json, true), JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
break;
default:
@@ -5687,6 +5696,20 @@ DNS-over-HTTPS with IP:
$this->delete($this->input['from'], $this->input['message_id']);
}
public function restart()
{
$r = $this->send($this->input['from'], 'restart...');
file_put_contents('/update/reload_message', "{$this->input['from']}:{$r['result']['message_id']}");
file_put_contents('/update/key', $this->key);
file_put_contents('/update/curl', json_encode([
'chat_id' => $this->input['chat'],
'message_id' => $r['result']['message_id'],
'text' => '~t~'
], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
file_put_contents('/update/pipe', '2');
$this->delete($this->input['from'], $this->input['message_id']);
}
public function configMenu()
{
exec('git -C / fetch');
@@ -5814,6 +5837,10 @@ DNS-over-HTTPS with IP:
'text' => $this->i18n('fake html'),
'callback_data' => "/addOverrideHtml",
],
[
'text' => $this->i18n('ports'),
'callback_data' => "/ports",
],
];
$data[] = [
[
@@ -5830,6 +5857,10 @@ DNS-over-HTTPS with IP:
'text' => $this->i18n(exec('git -C / rev-list --count HEAD..@{u}') ? 'have updates' : 'no updates'),
'callback_data' => "/menu update",
],
[
'text' => $this->i18n('restart'),
'callback_data' => "/restart",
],
];
$data[] = [
[
@@ -5843,6 +5874,69 @@ DNS-over-HTTPS with IP:
];
}
public function ports()
{
$text[] = 'Settings -> Ports';
$f = '/docker/compose';
$c = yaml_parse_file($f)['services'];
$data = [
[[
'text' => 'Letsencrypt 80 ' . $this->i18n($c['ng'] ? 'off' : 'on'),
'callback_data' => "/hidePort ng",
]],
[[
'text' => 'Shadowsocks ' . getenv('SSPORT') . ' ' . $this->i18n($c['ss'] ? 'off' : 'on'),
'callback_data' => "/hidePort ss",
]],
[[
'text' => 'DoT 853 ' . $this->i18n($c['ad'] ? 'off' : 'on'),
'callback_data' => "/hidePort ad",
]],
[[
'text' => 'Wireguard-1 ' . getenv('WGPORT') . ' ' . $this->i18n($c['wg'] ? 'off' : 'on'),
'callback_data' => "/hidePort wg",
]],
[[
'text' => 'Wireguard-2 ' . getenv('WG1PORT') . ' ' . $this->i18n($c['wg1'] ? 'off' : 'on'),
'callback_data' => "/hidePort wg1",
]],
[[
'text' => 'MTProto ' . getenv('TGPORT') . ' ' . $this->i18n($c['tg'] ? 'off' : 'on'),
'callback_data' => "/hidePort tg",
]],
];
$data[] = [
[
'text' => $this->i18n('back'),
'callback_data' => "/menu config",
],
];
$this->update(
$this->input['chat'],
$this->input['message_id'],
implode("\n", $text ?: ['...']),
$data ?: false,
);
}
public function hidePort($container)
{
$f = '/docker/compose';
$c = yaml_parse_file($f);
if (!empty($c['services'][$container])) {
unset($c['services'][$container]);
} else {
$c['services'][$container]['ports'] = [];
}
if (empty($c['services'])) {
file_put_contents($f, '');
} else {
yaml_emit_file($f, $c);
file_put_contents($f, str_replace('ports:', 'ports: !override', file_get_contents($f)));
}
$this->ports();
}
public function branches()
{
exec('git -C / branch -r', $m);
+4
View File
@@ -369,4 +369,8 @@ $i = [
'en' => 'copy',
'ru' => 'копировать',
],
'restart' => [
'en' => 'restart',
'ru' => 'перезагрузка',
],
];
+1
View File
@@ -118,6 +118,7 @@ services:
- ./update:/update
- ./.git:/.git
- ./singbox_windows:/singbox
- ./docker-compose.override.yml:/docker/compose
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
IP: ${IP}
+1 -1
View File
@@ -3,7 +3,7 @@ b:
u: # запуск контейнеров
$(eval IP := $(shell curl -s -t 1 2ip.io || curl -s -t 1 ipinfo.io/ip || curl -s -t 1 ifconfig.me))
bash ./update/update.sh &
touch ./override.env
touch ./override.env ./docker-compose.override.yml
IP=$(IP) VER=$(shell git describe --tags) docker compose --env-file ./.env --env-file ./override.env up -d --force-recreate
d: # остановка контейнеров
-kill -9 $(shell cat ./update/update_pid) > /dev/null
+1 -1
View File
@@ -6,7 +6,7 @@ After=docker.service
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=path
ExecStartPre=/bin/sh -c "touch ./override.env"
ExecStartPre=/bin/sh -c "touch ./override.env ./docker-compose.override.yml"
ExecStart=/bin/sh -c "IP=$(curl https://ipinfo.io/ip) VER=$(git describe --tags) docker compose --env-file ./.env --env-file ./override.env up -d --force-recreate"
ExecStartPost=/bin/sh -c "bash ./update/update.sh &"
ExecStop=/bin/sh -c "docker compose down --remove-orphans"
+12 -9
View File
@@ -12,17 +12,20 @@ do
key=$(cat $pwd/update/key)
curl -H "Content-Type: application/json" -X POST https://api.telegram.org/bot$key/editMessageText -d "$(cat $pwd/update/curl | sed 's/"text":"~t~"/"text": "останавливаю бота"/')"
docker compose down --remove-orphans
curl -H "Content-Type: application/json" -X POST https://api.telegram.org/bot$key/editMessageText -d "$(cat $pwd/update/curl | sed 's/"text":"~t~"/"text": "очищаю директорию"/')"
git reset --hard && git clean -fd
curl -H "Content-Type: application/json" -X POST https://api.telegram.org/bot$key/editMessageText -d "$(cat $pwd/update/curl | sed 's/"text":"~t~"/"text": "скачиваю обновление"/')"
git fetch
if [[ -n "$branch" ]]
if [[ "$cmd" == "1" ]]
then
curl -H "Content-Type: application/json" -X POST https://api.telegram.org/bot$key/editMessageText -d "$(cat $pwd/update/curl | sed 's/"text":"~t~"/"text": "меняю ветку"/')"
git checkout -t origin/$branch || git checkout $branch
curl -H "Content-Type: application/json" -X POST https://api.telegram.org/bot$key/editMessageText -d "$(cat $pwd/update/curl | sed 's/"text":"~t~"/"text": "очищаю директорию"/')"
git reset --hard && git clean -fd
curl -H "Content-Type: application/json" -X POST https://api.telegram.org/bot$key/editMessageText -d "$(cat $pwd/update/curl | sed 's/"text":"~t~"/"text": "скачиваю обновление"/')"
git fetch
if [[ -n "$branch" ]]
then
curl -H "Content-Type: application/json" -X POST https://api.telegram.org/bot$key/editMessageText -d "$(cat $pwd/update/curl | sed 's/"text":"~t~"/"text": "меняю ветку"/')"
git checkout -t origin/$branch || git checkout $branch
fi
curl -H "Content-Type: application/json" -X POST https://api.telegram.org/bot$key/editMessageText -d "$(cat $pwd/update/curl | sed 's/"text":"~t~"/"text": "применяю обновления"/')"
git pull > ./update/message
fi
curl -H "Content-Type: application/json" -X POST https://api.telegram.org/bot$key/editMessageText -d "$(cat $pwd/update/curl | sed 's/"text":"~t~"/"text": "применяю обновления"/')"
git pull > ./update/message
curl -H "Content-Type: application/json" -X POST https://api.telegram.org/bot$key/editMessageText -d "$(cat $pwd/update/curl | sed 's/"text":"~t~"/"text": "запускаю бота"/')"
IP=$(curl ipinfo.io/ip) VER=$(git describe --tags) docker compose --env-file ./.env --env-file ./override.env up -d --force-recreate
bash $pwd/update/update.sh &
+3
View File
@@ -1,3 +1,6 @@
04.11.2024 v1.95
- отключение портов контейнеров из меню
- перезагрузка из меню
04.11.2024 v1.94
- xray: возможность перемещать и переименовывать outbound заполняемый ботом
04.11.2024 v1.93