Compare commits

...

16 Commits

Author SHA1 Message Date
mercury 624713347a change autobackup 2024-05-18 17:00:04 +04:00
mercury 52738c0491 update version xray, shadowsocks 2024-05-17 12:56:56 +04:00
runalsh 277b00da87 Remove absolute versions for shadowsocks.dockerfile (#15)
* added sing-box from repo (#12)

* edge repo for sing-box (#13)

* added sing-box from repo

* add testing repo for sing-box

* Revert "added sing-box from repo (#12)"

This reverts commit 256e43352a.

* Revert "edge repo for sing-box (#13)"

This reverts commit bb1ac60acc.

* Update shadowsocks.dockerfile

---------

Co-authored-by: mercury <mercury.kd@gmail.com>
2024-05-17 12:47:28 +04:00
runalsh 455b9cea07 Remove absolute versions for xray.dockerfile (#16)
* added sing-box from repo (#12)

* edge repo for sing-box (#13)

* added sing-box from repo

* add testing repo for sing-box

* Revert "added sing-box from repo (#12)"

This reverts commit 256e43352a.

* Revert "edge repo for sing-box (#13)"

This reverts commit bb1ac60acc.

* Update xray.dockerfile

---------

Co-authored-by: mercury <mercury.kd@gmail.com>
2024-05-17 12:46:57 +04:00
mercury 88f8c1c4c2 changelog in update message 2024-05-04 21:56:40 +04:00
mercury 6631ea5cc2 update version 2024-05-04 13:00:06 +04:00
mercury 09d49fd0fb remove duplicate image 2024-05-04 12:36:32 +04:00
mercury 6766a56440 warp on alpine 2024-05-04 12:31:39 +04:00
mercury 4fb039ffc4 fix choice default template sing-box update 2 2024-05-01 18:35:45 +04:00
mercury 0b7ae110fc fix choice default template sing-box update 2024-05-01 18:24:22 +04:00
mercury 6fb1931c2d fix choice default template sing-box 2024-05-01 17:52:17 +04:00
mercury 6a31985863 clear old images 2024-04-22 23:12:23 +04:00
mercury f4a9e63793 docker clean 2024-04-22 21:49:55 +04:00
mercury 581e3a9bd1 delete old image 2024-04-22 12:48:42 +04:00
mercury 8491ee9f51 fix star button freeze 2024-04-22 12:46:19 +04:00
Bkeenke 49cefc3231 Update "qrPeer" function (#11) 2024-04-21 12:06:32 +04:00
10 changed files with 141 additions and 65 deletions
+92 -40
View File
@@ -948,22 +948,17 @@ class Bot
public function checkBackup()
{
$c = time();
$conf = $this->getPacConf();
$time = $conf['backup'];
if ($time) {
preg_match('~(\d+\s\w+)(?:\s+)?/(?:\s+)?(\d{2}:\d{2})~', $time, $m);
$period = strtotime($m[1]) - $c;
$start = strtotime($m[2]);
$last = $conf['pinbackup'];
if ($last) {
[$pin, $time] = explode('/', $last);
if ($c - $time >= $period) {
$this->pinAdmin($pin, 1);
$this->pinBackup();
return;
$c = $this->getPacConf();
$now = strtotime(date('Y-m-d H:i'));
if (!empty($c['backup'])) {
[$start, $period] = explode('/', $c['backup']);
$start = strtotime($start);
$period = strtotime($period, 0);
(var_dump($now, $start, $period, ($now - $start) % $period));
if ($now - $start >= $period && ($now - $start) % $period == 0) {
if (!empty($c['pinbackup'])) {
$this->pinAdmin($c['pinbackup'], 1);
}
} elseif ($c - $start > 0 && $c - $start < 30) {
$this->pinBackup();
}
}
@@ -984,10 +979,10 @@ class Bot
require __DIR__ . '/config.php';
$conf = $this->getPacConf();
$bot = $this->request('getMyName', [])['result']['name'];
$pin = $this->upload("{$bot}_export_" . date('d_m_Y_H_i') . '.json', $this->export(), $c['admin'][0])['result']['message_id'];
$conf['pinbackup'] = "$pin/" . time();
$conf['pinbackup'] = $this->upload("{$bot}_export_" . date('d_m_Y_H_i') . '.json', $this->export(), $c['admin'][0])['result']['message_id'];
$conf['backup'] = implode(' / ', [date('Y-m-d H:i'), trim(explode('/', $conf['backup'])[1])]);
$this->setPacConf($conf);
$this->pinAdmin($pin);
$this->pinAdmin($conf['pinbackup']);
}
public function checkVersion()
@@ -1005,7 +1000,14 @@ class Bot
$diff = array_slice($diff, 0, 10);
if (!empty($diff)) {
foreach ($c['admin'] as $k => $v) {
$this->send($v, implode("\n", $diff));
$this->send($v, implode("\n", $diff), 0, [
[
[
'text' => 'changelog',
'web_app' => ['url' => "https://raw.githubusercontent.com/mercurykd/vpnbot/$b/version"],
]
]
]);
}
}
}
@@ -1477,14 +1479,19 @@ class Bot
$cl = $client;
$client = $this->readClients()[$client];
$name = $this->getName($client['interface']);
$code = $this->createConfig($client);
if ($this->getWGType() == 'awg') {
$sl = $this->getAmneziaShortLink($client);
$code = preg_replace('/^vpn:\/\//', '', $sl);
} else {
$code = $this->createConfig($client);
}
$qr = preg_replace(['~\s+~', '~\(~', '~\)~'], ['_'], $name);
$qr_file = __DIR__ . "/qr/$qr.png";
exec("qrencode -t png -o $qr_file '$code'");
$r = $this->sendPhoto(
$this->input['chat'],
curl_file_create($qr_file),
$name,
($this->getWGType() == 'awg') ? "$name for AmneziaVPN" : $name
);
unlink($qr_file);
if ($this->getPacConf()['blinkmenu']) {
@@ -3366,6 +3373,49 @@ DNS-over-HTTPS with IP:
return "vless://{$c['inbounds'][0]['settings']['clients'][$i]['id']}@$domain:443?security=reality&sni={$c['inbounds'][0]['streamSettings']['realitySettings']['serverNames'][0]}&fp=chrome&pbk={$pac['xray']}&sid={$c['inbounds'][0]['streamSettings']['realitySettings']['shortIds'][0]}&type=tcp&flow=xtls-rprx-vision#vpnbot";
}
public function dockerApi($url, $method = 'GET', $data = [])
{
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => $method,
CURLOPT_POSTFIELDS => !empty($data) ? json_encode($data) : null,
CURLOPT_URL => "http://localhost$url",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_UNIX_SOCKET_PATH => '/var/run/docker.sock'
]);
$r = json_decode(curl_exec($ch), true);
curl_close($ch);
return $r;
}
public function cleanDocker()
{
$r = $this->dockerApi('/images/json');
foreach ($r as $v) {
if (!empty($v['RepoTags'])) {
foreach ($v['RepoTags'] as $j) {
if (preg_match('~^mercurykd/vpnbot~', $j)) {
$i[] = $v['Id'];
break;
}
}
}
}
$r = $this->dockerApi('/containers/json?all=1');
foreach ($r as $v) {
if (preg_match('~^mercurykd/vpnbot~', $v['Image'])) {
$c[] = $v['ImageID'];
}
}
if (!empty($d = array_diff($i, $c))) {
foreach ($d as $v) {
$this->dockerApi("/images/$v", 'DELETE');
}
}
$this->dockerApi('/images/prune', 'POST', ['dangling' => true]);
$this->dockerApi('/build/prune', 'POST');
}
public function naiveMenu()
{
$pac = $this->getPacConf();
@@ -3699,7 +3749,7 @@ DNS-over-HTTPS with IP:
'web_app' => ['url' => "https://$domain/pac?h=$hash&t=te&ty=$type"],
],
[
'text' => $this->i18n($pac["default{$type}template"] && !empty($pac["{$type}templates"][$pac["default{$type}template"]]) ? 'off' : 'on'),
'text' => $this->i18n($pac["default{$type}template"] && !empty($pac["{$type}templates"][base64_decode($pac["default{$type}template"])]) ? 'off' : 'on'),
'callback_data' => "/defaultTemplate $type",
],
];
@@ -4078,6 +4128,7 @@ DNS-over-HTTPS with IP:
public function subscription()
{
$type = $_GET['t'] == 's' ? 'v2ray' : 'sing';
$pac = $this->getPacConf();
$domain = $pac['domain'] ?: $this->ip;
$xr = $this->getXray();
@@ -4090,7 +4141,7 @@ DNS-over-HTTPS with IP:
if (empty($v['off'])) {
$flag = false;
}
$template = base64_decode($_GET['t'] == 's' ? $v['v2raytemplate'] : $v['singtemplate']);
$template = base64_decode($v["{$type}template"]);
$uid = $v['id'];
break;
}
@@ -4133,19 +4184,19 @@ DNS-over-HTTPS with IP:
exit;
}
}
switch (true) {
case !empty($template) && $template == 'origin':
case empty($template) && empty($pac['default' . ($_GET['t'] == 's' ? 'v2ray' : 'sing') . 'template']):
case empty($template) && !empty($pac['default' . ($_GET['t'] == 's' ? 'v2ray' : 'sing') . 'template']) && empty($pac[($_GET['t'] == 's' ? 'v2ray' : 'sing') . 'templates'][$pac['default' . ($_GET['t'] == 's' ? 'v2ray' : 'sing') . 'template']]):
$c = json_decode(file_get_contents('/config/' . ($_GET['t'] == 's' ? 'v2ray' : 'sing') . '.json'), true);
case empty($template) && empty($pac["default{$type}template"]):
case empty($template) && empty($pac["{$type}templates"][base64_decode($pac["default{$type}template"])]):
case !empty($template) && empty($pac["{$type}templates"][$template]):
$c = json_decode(file_get_contents("/config/{$type}.json"), true);
break;
case !empty($template):
$c = $pac[$_GET['t'] == 's' ? 'v2raytemplates' : 'singtemplates'][$template];
$c = $pac["{$type}templates"][$template];
break;
default:
$c = $pac[$_GET['t'] == 's' ? 'v2raytemplates' : 'singtemplates'][base64_decode($pac['default' . ($_GET['t'] == 's' ? 'v2ray' : 'sing') . 'template'])];
$c = $pac["{$type}templates"][base64_decode($pac["default{$type}template"])];
break;
}
@@ -4651,15 +4702,17 @@ DNS-over-HTTPS with IP:
'text' => $this->i18n('export'),
'callback_data' => "/export",
],
[
'text' => $this->i18n('backup') . ': ' . (implode(' / ', explode('/', $conf['backup'])) ?: $this->i18n('off')),
'callback_data' => "/backup",
],
[
'text' => $this->i18n('import'),
'callback_data' => "/import",
],
];
$data[] = [
[
'text' => $this->i18n('backup') . ': ' . (implode(' / ', explode('/', $conf['backup'])) ?: $this->i18n('off')),
'callback_data' => "/backup",
],
];
$data[] = [
[
'text' => $this->i18n('logs'),
@@ -4862,16 +4915,15 @@ DNS-over-HTTPS with IP:
public function setBackup($text)
{
$text = trim($text);
$c = $this->getPacConf();
$c = $this->getPacConf();
if (empty($text)) {
$c['backup'] = '';
} elseif (preg_match('~(\d+\s\w+)(?:\s+)?/(?:\s+)?(\d{2}:\d{2})~', $text, $m)) {
$period = $m[1];
$start = $m[2];
$c['backup'] = $text;
} else {
[$start, $period] = explode('/', $text);
$c['backup'] = implode(' / ', [date('Y-m-d H:i', strtotime($start)), trim($period)]);
}
if ($pin = explode('/', $c['pinbackup'])[0]) {
$this->pinAdmin($pin, 1);
if ($c['pinbackup']) {
$this->pinAdmin($c['pinbackup'], 1);
$c['pinbackup'] = '';
}
$this->setPacConf($c);
+1
View File
@@ -40,3 +40,4 @@ file_put_contents('/update/message', '');
file_put_contents('/update/reload_message', '');
$bot->restartTG();
$bot->sslip();
$bot->cleanDocker();
+1 -1
View File
@@ -16,7 +16,7 @@
<div style="position:absolute;top:0;right:0;width:35%;text-align:center;background-color: #17212b;">
<img src="toncoin.png" width="100%" alt="">
<a href="javascript:;" id="copy" style="color:white;text-decoration:none" data-id="UQCDDkaX3fCAFBek28Hx4TfvDDRqeizOW74blVMVAM4_m4OW">copy</a>
<iframe src="https://ghbtns.com/github-btn.html?user=mercurykd&repo=vpnbot&type=star&count=true" frameborder="0" scrolling="0" width="150" height="20" title="GitHub"></iframe>
<!-- <iframe src="https://ghbtns.com/github-btn.html?user=mercurykd&repo=vpnbot&type=star&count=true" frameborder="0" scrolling="0" width="150" height="20" title="GitHub"></iframe> -->
</div>
<a style="background-color: #8B3FFD;height: 46px;display:inline-block;padding:0 54px;color: white;border-radius: 12px;text-decoration: none;font-size: 20px;line-height: 46px;font-family: arial;" href="https://yoomoney.ru/to/410011827900450">
<svg style="width: 24px;fill: white;position: relative;top: 4px;" class="qa-fundraise-button-logo mui-m0okdh" viewBox="0 0 16 16"><path d="M4.638 8.5a5.67 5.67 0 015.681-5.68A5.693 5.693 0 0116 8.5a5.693 5.693 0 01-5.68 5.682A5.67 5.67 0 014.637 8.5zm3.56 0c0 1.151.97 2.122 2.121 2.122 1.15 0 2.085-.97 2.121-2.121 0-1.15-.97-2.121-2.12-2.121-1.151 0-2.122.97-2.122 2.12zm-3.596 4.243v-8.27H0l2.589 8.27h2.013z" clip-rule="evenodd"></path></svg>
+14 -9
View File
@@ -19,7 +19,7 @@ volumes:
services:
up:
image: mercurykd/vpnbot-up:1.1
image: mercurykd/vpnbot-ng:1.1
build:
context: dockerfile
dockerfile: nginx.dockerfile
@@ -116,6 +116,7 @@ services:
- ./update:/update
- ./.git:/.git
- ./singbox_windows:/singbox
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
IP: ${IP}
VER: ${VER}
@@ -142,7 +143,7 @@ services:
timeout: 5s
retries: 5
service:
image: mercurykd/vpnbot-php:1.2
image: mercurykd/vpnbot-php:1.5
build:
dockerfile: dockerfile/php.dockerfile
args:
@@ -157,6 +158,7 @@ services:
- ./logs/:/logs/
- ./update:/update
- ./scripts/start_service.sh:/start_service.sh
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
IP: ${IP}
VER: ${VER}
@@ -189,7 +191,7 @@ services:
- oc
- np
proxy:
image: mercurykd/vpnbot-ss:1.1
image: mercurykd/vpnbot-ss:1.2
build:
dockerfile: dockerfile/shadowsocks.dockerfile
args:
@@ -336,7 +338,7 @@ services:
entrypoint: ["/bin/sh", "/start_ad.sh"]
logging: *default-logging
ss:
image: mercurykd/vpnbot-ss:1.1
image: mercurykd/vpnbot-ss:1.2
build:
dockerfile: dockerfile/shadowsocks.dockerfile
args:
@@ -397,7 +399,7 @@ services:
ipv4_address: 10.10.0.8
logging: *default-logging
xr:
image: mercurykd/vpnbot-xr:1.2
image: mercurykd/vpnbot-xr:1.3
build:
dockerfile: dockerfile/xray.dockerfile
args:
@@ -491,7 +493,7 @@ services:
ipv4_address: 10.10.0.12
logging: *default-logging
wp:
image: mercurykd/vpnbot-wp:1.1
image: mercurykd/vpnbot-wp:1.2
build:
dockerfile: dockerfile/warp.dockerfile
args:
@@ -501,7 +503,7 @@ services:
devices:
- /dev/net/tun:/dev/net/tun
volumes:
- ./config/.profile:/root/.bashrc:ro
- ./config/.profile:/root/.ashrc:ro
- ./ssh:/ssh
- ./config/sshd_config:/etc/ssh/sshd_config
- ./config:/config
@@ -512,8 +514,11 @@ services:
depends_on:
php:
condition: service_healthy
environment:
TZ: ${TZ}
env_file:
- path: ./.env
required: true # default
- path: ./override.env
required: false
stop_grace_period: 1s
command: ["/bin/sh", "/start_wp.sh"]
networks:
+6 -6
View File
@@ -2,16 +2,16 @@ ARG image
FROM $image
RUN apk add openssh git xz \
&& mkdir /root/.ssh \
&& wget https://github.com/shadowsocks/shadowsocks-rust/releases/download/v1.15.3/shadowsocks-v1.15.3.x86_64-unknown-linux-musl.tar.xz \
&& tar -xf shadowsocks-v1.15.3.x86_64-unknown-linux-musl.tar.xz \
&& wget https://github.com/teddysun/v2ray-plugin/releases/download/v5.7.0/v2ray-plugin-linux-amd64-v5.7.0.tar.gz \
&& tar -xf v2ray-plugin-linux-amd64-v5.7.0.tar.gz \
&& wget -O shadowsocks-rust.x86_64-unknown-linux-musl.tar.xz $(wget -q -O - https://api.github.com/repos/shadowsocks/shadowsocks-rust/releases/latest | grep browser_download_url | cut -d\" -f4 | egrep '.x86_64-unknown-linux-musl.tar.xz$') \
&& tar -xf shadowsocks-rust.x86_64-unknown-linux-musl.tar.xz \
&& wget -O v2ray-plugin-linux-amd64.tar.gz $(wget -q -O - https://api.github.com/repos/teddysun/v2ray-plugin/releases/latest | grep browser_download_url | cut -d\" -f4 | egrep 'v2ray-plugin-linux-amd64') \
&& tar -xf v2ray-plugin-linux-amd64.tar.gz \
&& mv sslocal /usr/bin/ \
&& mv ssserver /usr/bin/ \
&& mv ssmanager /usr/bin/ \
&& mv ssservice /usr/bin/ \
&& mv ssurl /usr/bin/ \
&& mv v2ray-plugin_linux_amd64 /usr/bin/v2ray-plugin \
&& rm v2ray-plugin-linux-amd64-v5.7.0.tar.gz\
&& rm shadowsocks-v1.15.3.x86_64-unknown-linux-musl.tar.xz
&& rm v2ray-plugin-linux-amd64.tar.gz \
&& rm shadowsocks-rust.x86_64-unknown-linux-musl.tar.xz
ENV ENV="/root/.ashrc"
+13 -3
View File
@@ -1,6 +1,16 @@
FROM ubuntu:22.04
RUN apt update && apt install -y curl gpg socat jq lsb-release openssh-server \
FROM ubuntu:22.04 AS build
RUN apt update && apt install -y curl gpg lsb-release \
&& curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg \
&& echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/cloudflare-client.list \
&& apt update && apt install -y cloudflare-warp \
&& apt update && apt install -y cloudflare-warp
FROM alpine:3.17
ARG GLIBC_VERSION=2.34-r0
COPY --from=build /usr/bin/warp-cli /usr/bin/warp-svc /usr/local/bin/
RUN apk add --no-cache dbus-libs wget socat openssh-server jq curl \
&& mkdir /tmp/glibc-pkgs \
&& for PKG in glibc-$GLIBC_VERSION.apk glibc-bin-$GLIBC_VERSION.apk; do wget -q --directory-prefix /tmp/glibc-pkgs https://github.com/sgerrand/alpine-pkg-glibc/releases/download/$GLIBC_VERSION/$PKG; done \
&& apk add --no-cache --allow-untrusted --force-overwrite /tmp/glibc-pkgs/* \
&& rm -rf /tmp/glibc-pkgs \
&& /usr/glibc-compat/sbin/ldconfig /lib /usr/glibc-compat/lib \
&& mkdir /root/.ssh
+1 -1
View File
@@ -2,7 +2,7 @@ ARG image
FROM $image
RUN apk add openssh openssl jq \
&& mkdir /root/.ssh \
&& wget https://github.com/XTLS/Xray-core/releases/download/v1.8.10/Xray-linux-64.zip \
&& wget -O Xray-linux-64.zip $(wget -q -O - https://api.github.com/repos/XTLS/Xray-core/releases/latest | grep browser_download_url | cut -d\" -f4 | egrep 'Xray-linux-64.zip$') \
&& unzip Xray-linux-64.zip \
&& mv xray /usr/bin/ \
&& rm Xray-linux-64.zip \
+2 -2
View File
@@ -9,7 +9,7 @@ d: # остановка контейнеров
docker compose down --remove-orphans
dv: # остановка контейнеров
docker compose down -v
r: d cleanf u cleanf
r: d u
ps: # список контейнеров
docker compose ps
l: # логи из контейнеров
@@ -31,7 +31,7 @@ up: # консоль сервиса
ad: # консоль сервиса
docker compose exec ad /bin/sh
wp: # консоль сервиса
docker compose exec wp bash
docker compose exec wp /bin/sh
proxy: # консоль сервиса
docker compose exec proxy /bin/sh
tg: # консоль сервиса
+2 -3
View File
@@ -1,7 +1,6 @@
cat /ssh/key.pub > /root/.ssh/authorized_keys
echo 'HostKeyAlgorithms +ssh-rsa' >> /etc/ssh/sshd_config
echo 'PubkeyAcceptedKeyTypes +ssh-rsa' >> /etc/ssh/sshd_config
service ssh start
ssh-keygen -A
exec /usr/sbin/sshd -D -e "$@" &
warp-svc > /dev/null &
sleep 3
warp-cli --accept-tos registration new
+9
View File
@@ -1,3 +1,12 @@
18.05.2024 v1.39
- изменен автобэкап
04.05.2024 v1.38
- changelog в сообщении новой версии
04.05.2024 v1.37.1
- warp на образе alpine (thx @zmeyzloy)
- фикс выбора шаблона singbox
22.04.2024 v1.35
- очистка старых образов
19.04.2024 v1.34
- формирование rule_set из шаблона singbox
18.04.2024 v1.33