Skip to content

Commit 1738fe4

Browse files
authored
Merge pull request #3 from denpiligrim/dp-fix
v1.0.1
2 parents 485b777 + 3616309 commit 1738fe4

File tree

12 files changed

+229
-488
lines changed

12 files changed

+229
-488
lines changed

README.md

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,21 @@
22

33
<p><img src="https://denpiligrim.ru/storage/images/3dp-manager.png" alt="3dp-manager preview"></p>
44

5-
![Version](https://img.shields.io/badge/version-1.0-blue.svg) [![License](https://img.shields.io/badge/license-GPL%20V3-blue.svg?longCache=true)](https://www.gnu.org/licenses/gpl-3.0) [![Telegram](https://img.shields.io/badge/Telegram-26A5E4?style=flat&logo=telegram&logoColor=white)](https://t.me/denpiligrim_web) [![YouTube Channel Subscribers](https://img.shields.io/youtube/channel/subscribers/UCOv2tFFYDY4mXOM60PVz8zw)](https://www.youtube.com/@denpiligrim)
5+
![Version](https://img.shields.io/badge/version-1.0.1-blue.svg) [![License](https://img.shields.io/badge/license-GPL%20V3-blue.svg?longCache=true)](https://www.gnu.org/licenses/gpl-3.0) [![Telegram](https://img.shields.io/badge/Telegram-26A5E4?style=flat&logo=telegram&logoColor=white)](https://t.me/denpiligrim_web) [![YouTube Channel Subscribers](https://img.shields.io/youtube/channel/subscribers/UCOv2tFFYDY4mXOM60PVz8zw)](https://www.youtube.com/@denpiligrim)
66

77
# 3DP-MANAGER
88

99
Утилита для автогенерации инбаундов к панели [3x-ui](https://github.com/MHSanaei/3x-ui), формирования единой подписки и настройки перенаправления трафика с промежуточного сервера на основной.
1010

1111
**Поддержать проект**
1212

13-
- Реквизиты / донаты:
13+
- Банковским переводом:
1414
- Карта МИР: `2204320436318077`
1515
- Карта MasterCard: `5395452209474530`
16+
- На электронный кошелек:
1617
- ЮМоney: `4100116897060652`
1718
- PayPal: `vasiljevdenisx@gmail.com`
19+
- Криптовалютой:
1820
- USDT | ETH (ERC20 | BEP20): `0x6fe140040f6Cdc1E1Ff2136cd1d60C0165809463`
1921
- USDT | TRX (TRC20): `TEWxXmJxvkAmhshp7E61XJGHB3VyM9hNAb`
2022
- Bitcoin: `bc1qctntwncsv2yn02x2vgnkrqm00c4h04c0afkgpl`
@@ -32,7 +34,7 @@
3234

3335
Все подключения объединяются в одну подписку со статичным URL. Бот работает с панелью `3x-ui` и не вмешивается в её работу напрямую, используя открытое API панели.
3436

35-
Вторичная цель — стабильность подключения: клиент получает 10 вариантов поключений и может выбрать любое из них.
37+
Вторичная цель — стабильность подключения: клиент получает 10 вариантов подключений и может выбрать любое из них.
3638

3739
Дополнительно: бот можно использовать в каскадной схеме. Сервис перенаправления автоматически настроит переадресацию подписки и трафика к основному серверу.
3840

@@ -51,14 +53,15 @@
5153

5254
## Требования
5355

54-
- Ubuntu 20.04 (и выше)
55-
- Панель `3x-ui`
56+
- Ubuntu 20.04 (и выше), Debian 12.11 (и выше)
57+
- Панель `3x-ui` v2.8.4 (и выше)
5658
- Домен + SSL сертификат (опционально)
5759

5860
---
5961

6062
## Установка
6163

64+
У вас должны быть установлены пакеты на сервере `curl`, `jq` командой: `apt install curl jq` и панель управления `3x-ui`, которую можно установить командой: `bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)`
6265
Установите проект на сервер командой:
6366

6467
```bash
@@ -91,6 +94,9 @@ bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main
9194

9295
## Установка сервиса перенаправления (forwarding)
9396

97+
> [!WARNING]
98+
> Сервис перенаправления работает на промежуточном сервере.
99+
94100
Сервис перенаправления позволяет проксировать входящие порты с промежуточного сервера на основной.
95101

96102
```bash
@@ -127,7 +133,7 @@ cd /opt/3dp-manager && docker compose exec node env | grep SUB_URL | cut -d'=' -
127133
node get_domains.js
128134
```
129135

130-
<small>Краткое описание: добавьте ссылку на мульти-подписку в скрипт и запустите команду — на выходе получите список доменов. Неободим `Node.js` для работы скрипта.</small>
136+
<small>Краткое описание: добавьте ссылку на мульти-подписку в скрипт и запустите команду — на выходе получите список доменов. Необходим `Node.js` для работы скрипта.</small>
131137

132138
## Использование собственного белого списка
133139

@@ -138,7 +144,7 @@ node get_domains.js
138144
cd /opt/3dp-manager && docker cp ./app/my_whitelist.txt node:/app/my_whitelist.txt
139145
```
140146

141-
<small>Краткое описание: добавляет ваш файл доменов в контейнер приложения. Чтобы сразу же сгенерировать инбаунды с новыи списком, выполните `docker exec -it node sh` и затем `node index.js`.</small>
147+
<small>Краткое описание: добавляет ваш файл доменов в контейнер приложения. Чтобы сразу же сгенерировать инбаунды с новым списком, выполните `docker exec -it node sh` и затем `node index.js`.</small>
142148

143149
---
144150

README_CN.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<p><img src="https://denpiligrim.ru/storage/images/3dp-manager.png" alt="3dp-manager preview"></p>
44

5-
![Version](https://img.shields.io/badge/version-1.0-blue.svg) [![License](https://img.shields.io/badge/license-GPL%20V3-blue.svg?longCache=true)](https://www.gnu.org/licenses/gpl-3.0) [![Telegram](https://img.shields.io/badge/Telegram-26A5E4?style=flat&logo=telegram&logoColor=white)](https://t.me/denpiligrim_web) [![YouTube Channel Subscribers](https://img.shields.io/youtube/channel/subscribers/UCOv2tFFYDY4mXOM60PVz8zw)](https://www.youtube.com/@denpiligrim)
5+
![Version](https://img.shields.io/badge/version-1.0.1.1-blue.svg) [![License](https://img.shields.io/badge/license-GPL%20V3-blue.svg?longCache=true)](https://www.gnu.org/licenses/gpl-3.0) [![Telegram](https://img.shields.io/badge/Telegram-26A5E4?style=flat&logo=telegram&logoColor=white)](https://t.me/denpiligrim_web) [![YouTube Channel Subscribers](https://img.shields.io/youtube/channel/subscribers/UCOv2tFFYDY4mXOM60PVz8zw)](https://www.youtube.com/@denpiligrim)
66

77
# 3DP-MANAGER
88

README_EN.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<p><img src="https://denpiligrim.ru/storage/images/3dp-manager.png" alt="3dp-manager preview"></p>
44

5-
![Version](https://img.shields.io/badge/version-1.0-blue.svg) [![License](https://img.shields.io/badge/license-GPL%20V3-blue.svg?longCache=true)](https://www.gnu.org/licenses/gpl-3.0) [![Telegram](https://img.shields.io/badge/Telegram-26A5E4?style=flat&logo=telegram&logoColor=white)](https://t.me/denpiligrim_web) [![YouTube Channel Subscribers](https://img.shields.io/youtube/channel/subscribers/UCOv2tFFYDY4mXOM60PVz8zw)](https://www.youtube.com/@denpiligrim)
5+
![Version](https://img.shields.io/badge/version-1.0.1-blue.svg) [![License](https://img.shields.io/badge/license-GPL%20V3-blue.svg?longCache=true)](https://www.gnu.org/licenses/gpl-3.0) [![Telegram](https://img.shields.io/badge/Telegram-26A5E4?style=flat&logo=telegram&logoColor=white)](https://t.me/denpiligrim_web) [![YouTube Channel Subscribers](https://img.shields.io/youtube/channel/subscribers/UCOv2tFFYDY4mXOM60PVz8zw)](https://www.youtube.com/@denpiligrim)
66

77
# 3DP-MANAGER
88

README_IR.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<p><img src="https://denpiligrim.ru/storage/images/3dp-manager.png" alt="3dp-manager preview"></p>
44

5-
![Version](https://img.shields.io/badge/version-1.0-blue.svg) [![License](https://img.shields.io/badge/license-GPL%20V3-blue.svg?longCache=true)](https://www.gnu.org/licenses/gpl-3.0) [![Telegram](https://img.shields.io/badge/Telegram-26A5E4?style=flat&logo=telegram&logoColor=white)](https://t.me/denpiligrim_web) [![YouTube Channel Subscribers](https://img.shields.io/youtube/channel/subscribers/UCOv2tFFYDY4mXOM60PVz8zw)](https://www.youtube.com/@denpiligrim)
5+
![Version](https://img.shields.io/badge/version-1.0.1-blue.svg) [![License](https://img.shields.io/badge/license-GPL%20V3-blue.svg?longCache=true)](https://www.gnu.org/licenses/gpl-3.0) [![Telegram](https://img.shields.io/badge/Telegram-26A5E4?style=flat&logo=telegram&logoColor=white)](https://t.me/denpiligrim_web) [![YouTube Channel Subscribers](https://img.shields.io/youtube/channel/subscribers/UCOv2tFFYDY4mXOM60PVz8zw)](https://www.youtube.com/@denpiligrim)
66

77
# 3DP-MANAGER
88

README_TK.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<p><img src="https://denpiligrim.ru/storage/images/3dp-manager.png" alt="3dp-manager preview"></p>
44

5-
![Version](https://img.shields.io/badge/version-1.0-blue.svg) [![License](https://img.shields.io/badge/license-GPL%20V3-blue.svg?longCache=true)](https://www.gnu.org/licenses/gpl-3.0) [![Telegram](https://img.shields.io/badge/Telegram-26A5E4?style=flat&logo=telegram&logoColor=white)](https://t.me/denpiligrim_web) [![YouTube Channel Subscribers](https://img.shields.io/youtube/channel/subscribers/UCOv2tFFYDY4mXOM60PVz8zw)](https://www.youtube.com/@denpiligrim)
5+
![Version](https://img.shields.io/badge/version-1.0.1-blue.svg) [![License](https://img.shields.io/badge/license-GPL%20V3-blue.svg?longCache=true)](https://www.gnu.org/licenses/gpl-3.0) [![Telegram](https://img.shields.io/badge/Telegram-26A5E4?style=flat&logo=telegram&logoColor=white)](https://t.me/denpiligrim_web) [![YouTube Channel Subscribers](https://img.shields.io/youtube/channel/subscribers/UCOv2tFFYDY4mXOM60PVz8zw)](https://www.youtube.com/@denpiligrim)
66

77
# 3DP-MANAGER
88

app/index.js

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,10 @@ async function getFreePort(used) {
7676
while (true) {
7777
const p = Math.floor(Math.random() * (60000 - 10000)) + 10000;
7878
if (used.has(p)) continue;
79-
if (await isPortFree(p)) return p;
79+
if (await isPortFree(p)) {
80+
used.add(p);
81+
return p;
82+
}
8083
}
8184
}
8285

@@ -187,8 +190,7 @@ async function rotate() {
187190

188191
for (const b of builders) {
189192
const domain = pickDomain(whitelist);
190-
const inbound = await b(domain);
191-
usedPorts.add(inbound.port);
193+
const inbound = await b(domain);
192194
const idOrPass = inbound.settings ? JSON.parse(inbound.settings).clients?.[0]?.id || JSON.parse(inbound.settings).clients?.[0]?.password : "";
193195

194196
// Build the link depending on the protocol
@@ -210,8 +212,15 @@ async function rotate() {
210212
// Initial run
211213
rotate();
212214

213-
let interval = parseInt(process.env.ROTATE_INTERVAL) || 30;
214-
if (interval < 10) interval = 10;
215+
let interval = parseInt(process.env.ROTATE_INTERVAL, 10);
216+
217+
if (isNaN(interval) || interval < 10) {
218+
console.warn('⚠ Интервал некорректен или меньше 10 минут. Используется значение по умолчанию 30 минут.');
219+
interval = 30;
220+
}
221+
222+
const intervalMs = interval * 60 * 1000;
223+
224+
console.log(`✔ Интервал ротации установлен: ${interval} минут`);
215225

216-
const cronExpression = `*/${interval} * * * *`;
217-
cron.schedule(cronExpression, rotate);
226+
setInterval(rotate, intervalMs);

delete.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ need_root() {
1717
[[ $EUID -eq 0 ]] || die "Запускать только от root"
1818
}
1919

20-
read -r -p "Вы уверены, что хотите удалить? (y/N): " answer
20+
read -r -p "Вы уверены, что хотите удалить? (y/n): " answer
2121

2222
case "$answer" in
2323
y|Y)

forwarding_delete.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ warn() { echo -e "\033[1;33m[WARN]\033[0m $1"; }
1414

1515
[[ $EUID -eq 0 ]] || { echo "Запускать нужно от root"; exit 1; }
1616

17-
read -r -p "Вы уверены, что хотите удалить? (y/N): " answer
17+
read -r -p "Вы уверены, что хотите удалить? (y/n): " answer
1818

1919
case "$answer" in
2020
y|Y)

forwarding_install.sh

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,12 @@ die() { echo -e "\033[1;31m[ERROR]\033[0m $1"; exit 1; }
1515

1616
[[ $EUID -eq 0 ]] || die "Запускать нужно от root"
1717

18+
# Check OS and set release variable
19+
. /etc/os-release
20+
if [[ "$ID" != "ubuntu" && "$ID" != "debian" ]]; then
21+
die "Этот скрипт поддерживает только Ubuntu или Debian: $ID"
22+
fi
23+
1824
#################################
1925
# ASCII-баннер
2026
#################################
@@ -292,19 +298,33 @@ log "Проверка Docker"
292298
if command -v docker >/dev/null 2>&1; then
293299
log "Docker уже установлен"
294300
else
295-
log "Docker не найден, будет установлен"
301+
log "Docker не найден, будет установлен из официального репозитория"
302+
# Add Docker's official GPG key:
296303
apt update
297-
apt install -y docker.io || die "Ошибка установки docker.io"
298-
systemctl enable docker
299-
systemctl restart docker
300-
fi
304+
apt install ca-certificates curl
305+
install -m 0755 -d /etc/apt/keyrings
306+
if [[ "$ID" == "ubuntu" ]]; then
307+
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc || die "Ошибка добавления ключа Docker"
308+
else
309+
curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc || die "Ошибка добавления ключа Docker"
310+
fi
311+
chmod a+r /etc/apt/keyrings/docker.asc
312+
313+
# Add the repository to Apt sources:
314+
CODENAME=${UBUNTU_CODENAME:-$VERSION_CODENAME}
315+
tee /etc/apt/sources.list.d/docker.sources <<EOF
316+
Types: deb
317+
URIs: https://download.docker.com/linux/$ID
318+
Suites: $CODENAME
319+
Components: stable
320+
Signed-By: /etc/apt/keyrings/docker.asc
321+
EOF
301322

302-
if docker compose version >/dev/null 2>&1; then
303-
log "docker compose v2 доступен"
304-
else
305-
log "Устанавливаем docker-compose-v2"
306-
apt install -y --allow-downgrades --allow-remove-essential --allow-change-held-packages \
307-
docker-compose-v2 || warn "docker-compose-v2 не установлен, возможно уже есть плагин"
323+
apt update
324+
325+
apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
326+
systemctl enable docker
327+
systemctl start docker
308328
fi
309329

310330
#################################

0 commit comments

Comments
 (0)