diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..e602ad9
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,11 @@
+# Внести вклад
+
+Буду рад любому вкладу в разработку проекта! Простой процесс для контрибьюторов:
+
+1. Форкните репозиторий на GitHub.
+2. Создайте ветку с осмысленным именем, например `feature/add-README` или `fix/whitelist-load`.
+3. Внесите изменения и добавьте короткое описание в коммите.
+4. Запустите локально базовые проверки (если есть).
+5. Отправьте ветку в ваш форк и создайте Pull Request в основной репозиторий.
+
+Советы: описывайте изменения в PR, указывайте цель и тестовые шаги. Если изменения большие — разделяйте на маленькие коммиты.
\ No newline at end of file
diff --git a/README.md b/README.md
index c40ac99..3bf0c2a 100644
--- a/README.md
+++ b/README.md
@@ -68,7 +68,12 @@
bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/install.sh)
```
-Краткое описание: запускает скрипт установки и разворачивает контейнеры и сервисы.
+Краткое описание: запускает скрипт установки и разворачивает контейнеры и сервисы.
+Если панель 3x-ui находится в Docker контейнере или на другом сервере, установите командой:
+
+```bash
+REMOTE_PANEL=true bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/install.sh)
+```
## Обновление
@@ -78,7 +83,7 @@ bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main
bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/update.sh)
```
-Краткое описание: подтягивает последние изменения и перезапускает контейнеры.
+Краткое описание: подтягивает последние изменения и перезапускает контейнеры.
## Удаление
@@ -88,7 +93,7 @@ bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main
bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/delete.sh)
```
-Краткое описание: удаляет контейнеры и файлы конфигурации, возвращая систему к состоянию до установки.
+Краткое описание: удаляет контейнеры и файлы конфигурации, возвращая систему к состоянию до установки.
---
@@ -103,7 +108,7 @@ bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main
bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/forwarding_install.sh)
```
-Краткое описание: добавляет правила перенаправления и создает сервис для обновления подписки.
+Краткое описание: добавляет правила перенаправления и создает сервис для обновления подписки.
## Удаление перенаправления
@@ -111,7 +116,7 @@ bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main
bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/forwarding_delete.sh)
```
-Краткое описание: удаляет правила и отключает сервис перенаправления.
+Краткое описание: удаляет правила и отключает сервис перенаправления.
---
@@ -123,7 +128,7 @@ bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main
cd /opt/3dp-manager && docker compose exec node env | grep SUB_URL | cut -d'=' -f2
```
-Краткое описание: выводит статичный URL подписки, который можно использовать в клиентах. Работает как на основном, так и на промежуточном сервере.
+Краткое описание: выводит статичный URL подписки, который можно использовать в клиентах. Работает как на основном, так и на промежуточном сервере.
## Сбор доменов из мульти-подписок
@@ -133,7 +138,7 @@ cd /opt/3dp-manager && docker compose exec node env | grep SUB_URL | cut -d'=' -
node get_domains.js
```
-Краткое описание: добавьте ссылку на мульти-подписку в скрипт и запустите команду — на выходе получите список доменов. Необходим `Node.js` для работы скрипта.
+Краткое описание: добавьте ссылку на мульти-подписку в скрипт и запустите команду — на выходе получите список доменов. Необходим `Node.js` для работы скрипта.
## Использование собственного белого списка
@@ -144,7 +149,7 @@ node get_domains.js
cd /opt/3dp-manager && docker cp ./app/my_whitelist.txt node:/app/my_whitelist.txt
```
-Краткое описание: добавляет ваш файл доменов в контейнер приложения. Чтобы сразу же сгенерировать инбаунды с новым списком, выполните `docker exec -it node sh` и затем `node index.js`.
+Краткое описание: добавляет ваш файл доменов в контейнер приложения. Чтобы сразу же сгенерировать инбаунды с новым списком, выполните `docker exec -it node sh` и затем `node index.js`.
---
@@ -164,7 +169,7 @@ cd /opt/3dp-manager && docker cp ./app/my_whitelist.txt node:/app/my_whitelist.t
4. Запустите локально базовые проверки (если есть).
5. Отправьте ветку в ваш форк и создайте Pull Request в основной репозиторий.
-Советы: описывайте изменения в PR, указывайте цель и тестовые шаги. Если изменения большие — разделяйте на маленькие коммиты.
+Советы: описывайте изменения в PR, указывайте цель и тестовые шаги. Если изменения большие — разделяйте на маленькие коммиты.
---
diff --git a/README_CN.md b/README_CN.md
index dbd90c4..76f986a 100644
--- a/README_CN.md
+++ b/README_CN.md
@@ -64,7 +64,7 @@
bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/install.sh)
```
-简要说明:运行安装脚本并部署容器和服务。
+简要说明:运行安装脚本并部署容器和服务。
## 更新
@@ -74,7 +74,7 @@ bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main
bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/update.sh)
```
-简要说明:拉取最新更改并重启容器。
+简要说明:拉取最新更改并重启容器。
## 删除
@@ -84,7 +84,7 @@ bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main
bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/delete.sh)
```
-简要说明:删除容器和配置文件,恢复到安装前状态。
+简要说明:删除容器和配置文件,恢复到安装前状态。
---
@@ -96,7 +96,7 @@ bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main
bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/forwarding_install.sh)
```
-简要说明:添加转发规则并创建用于更新订阅的服务。
+简要说明:添加转发规则并创建用于更新订阅的服务。
## 删除转发
@@ -104,7 +104,7 @@ bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main
bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/forwarding_delete.sh)
```
-简要说明:删除规则并禁用转发服务。
+简要说明:删除规则并禁用转发服务。
---
@@ -116,7 +116,7 @@ bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main
cd /opt/3dp-manager && docker compose exec node env | grep SUB_URL | cut -d'=' -f2
```
-简要说明:打印可在客户端使用的静态订阅 URL,适用于主服务器和中继服务器。
+简要说明:打印可在客户端使用的静态订阅 URL,适用于主服务器和中继服务器。
## 从多订阅收集域名
@@ -126,7 +126,7 @@ cd /opt/3dp-manager && docker compose exec node env | grep SUB_URL | cut -d'=' -
node get_domains.js
```
-简要说明:在脚本中添加多订阅链接并运行命令 — 输出为域名列表。运行脚本需要 `Node.js`。
+简要说明:在脚本中添加多订阅链接并运行命令 — 输出为域名列表。运行脚本需要 `Node.js`。
## 使用自定义白名单
@@ -137,7 +137,7 @@ node get_domains.js
cd /opt/3dp-manager && docker cp ./app/my_whitelist.txt node:/app/my_whitelist.txt
```
-简要说明:将您的域名文件添加到应用容器中。
+简要说明:将您的域名文件添加到应用容器中。
---
@@ -157,7 +157,7 @@ cd /opt/3dp-manager && docker cp ./app/my_whitelist.txt node:/app/my_whitelist.t
4. 在本地运行检查(如有)。
5. 推送分支到您的 fork 并创建 Pull Request。
-建议:在 PR 中说明更改和测试步骤;较大更改请拆成小提交。
+建议:在 PR 中说明更改和测试步骤;较大更改请拆成小提交。
---
diff --git a/README_EN.md b/README_EN.md
index d6de078..11feb04 100644
--- a/README_EN.md
+++ b/README_EN.md
@@ -64,7 +64,7 @@ Install the project on your server with:
bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/install.sh)
```
-Short description: runs the installer script and deploys containers and services.
+Short description: runs the installer script and deploys containers and services.
## Update
@@ -74,7 +74,7 @@ Update to the latest version:
bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/update.sh)
```
-Short description: pulls the latest changes and restarts containers.
+Short description: pulls the latest changes and restarts containers.
## Removal
@@ -84,7 +84,7 @@ Remove the service completely:
bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/delete.sh)
```
-Short description: removes containers and configuration files, restoring the system to the pre-install state.
+Short description: removes containers and configuration files, restoring the system to the pre-install state.
---
@@ -96,7 +96,7 @@ The forwarding service allows proxying incoming ports from the intermediate serv
bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/forwarding_install.sh)
```
-Short description: adds forwarding rules and creates a service to update the subscription.
+Short description: adds forwarding rules and creates a service to update the subscription.
## Remove forwarding
@@ -104,7 +104,7 @@ bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main
bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/forwarding_delete.sh)
```
-Short description: removes rules and disables the forwarding service.
+Short description: removes rules and disables the forwarding service.
---
@@ -116,7 +116,7 @@ Command to print the current subscription URL from the container environment:
cd /opt/3dp-manager && docker compose exec node env | grep SUB_URL | cut -d'=' -f2
```
-Short description: prints the static subscription URL that can be used in clients. Works on both main and intermediate servers.
+Short description: prints the static subscription URL that can be used in clients. Works on both main and intermediate servers.
## Collect domains from multi-subscriptions
@@ -126,7 +126,7 @@ The utility extracts domains from subscriptions and builds a `whitelist` for the
node get_domains.js
```
-Short description: add a multi-subscription link to the script and run the command — the output will be a list of domains. `Node.js` is required to run the script.
+Short description: add a multi-subscription link to the script and run the command — the output will be a list of domains. `Node.js` is required to run the script.
## Use your own whitelist
@@ -137,7 +137,7 @@ node get_domains.js
cd /opt/3dp-manager && docker cp ./app/my_whitelist.txt node:/app/my_whitelist.txt
```
-Short description: adds your domain file into the application container.
+Short description: adds your domain file into the application container.
---
@@ -157,7 +157,7 @@ Contributions are welcome! Simple contributor workflow:
4. Run local checks if available.
5. Push the branch to your fork and create a Pull Request to the main repository.
-Tips: describe changes and testing steps in the PR. For large changes, split into smaller commits.
+Tips: describe changes and testing steps in the PR. For large changes, split into smaller commits.
---
diff --git a/README_IR.md b/README_IR.md
index e573987..54d5375 100644
--- a/README_IR.md
+++ b/README_IR.md
@@ -64,7 +64,7 @@
bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/install.sh)
```
-توضیح کوتاه: اسکریپت نصب را اجرا کرده و کانتینرها و سرویسها را راهاندازی میکند.
+توضیح کوتاه: اسکریپت نصب را اجرا کرده و کانتینرها و سرویسها را راهاندازی میکند.
## بهروزرسانی
@@ -74,7 +74,7 @@ bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main
bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/update.sh)
```
-توضیح کوتاه: تغییرات جدید را میکشد و کانتینرها را ریاستارت میکند.
+توضیح کوتاه: تغییرات جدید را میکشد و کانتینرها را ریاستارت میکند.
## حذف
@@ -84,7 +84,7 @@ bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main
bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/delete.sh)
```
-توضیح کوتاه: کانتینرها و فایلهای پیکربندی را حذف میکند و سیستم را به وضعیت پیش از نصب برمیگرداند.
+توضیح کوتاه: کانتینرها و فایلهای پیکربندی را حذف میکند و سیستم را به وضعیت پیش از نصب برمیگرداند.
---
@@ -96,7 +96,7 @@ bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main
bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/forwarding_install.sh)
```
-توضیح کوتاه: قوانین فورواردینگ را اضافه کرده و سرویسی برای بهروزرسانی اشتراک ایجاد میکند.
+توضیح کوتاه: قوانین فورواردینگ را اضافه کرده و سرویسی برای بهروزرسانی اشتراک ایجاد میکند.
## حذف فورواردینگ
@@ -104,7 +104,7 @@ bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main
bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/forwarding_delete.sh)
```
-توضیح کوتاه: قوانین را حذف کرده و سرویس فورواردینگ را غیرفعال میکند.
+توضیح کوتاه: قوانین را حذف کرده و سرویس فورواردینگ را غیرفعال میکند.
---
@@ -116,7 +116,7 @@ bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main
cd /opt/3dp-manager && docker compose exec node env | grep SUB_URL | cut -d'=' -f2
```
-توضیح کوتاه: URL ثابت اشتراک را نمایش میدهد که میتوان در کلاینتها استفاده کرد. هم در سرور اصلی و هم در سرور واسط کار میکند.
+توضیح کوتاه: URL ثابت اشتراک را نمایش میدهد که میتوان در کلاینتها استفاده کرد. هم در سرور اصلی و هم در سرور واسط کار میکند.
## جمعآوری دامنهها از چندین اشتراک
@@ -126,7 +126,7 @@ cd /opt/3dp-manager && docker compose exec node env | grep SUB_URL | cut -d'=' -
node get_domains.js
```
-توضیح کوتاه: لینک چندین اشتراک را در اسکریپت قرار داده و فرمان را اجرا کنید — خروجی فهرست دامنهها خواهد بود. نیازمند `Node.js` است.
+توضیح کوتاه: لینک چندین اشتراک را در اسکریپت قرار داده و فرمان را اجرا کنید — خروجی فهرست دامنهها خواهد بود. نیازمند `Node.js` است.
## استفاده از whitelist شخصی
@@ -137,7 +137,7 @@ node get_domains.js
cd /opt/3dp-manager && docker cp ./app/my_whitelist.txt node:/app/my_whitelist.txt
```
-توضیح کوتاه: فایل دامنه شما را به کانتینر برنامه اضافه میکند.
+توضیح کوتاه: فایل دامنه شما را به کانتینر برنامه اضافه میکند.
---
@@ -157,7 +157,7 @@ cd /opt/3dp-manager && docker cp ./app/my_whitelist.txt node:/app/my_whitelist.t
4. در صورت وجود، بررسیهای محلی را اجرا کنید.
5. شاخه را به fork خود پوش کرده و Pull Request ایجاد کنید.
-نکات: تغییرات را در PR شرح دهید و مراحل تست را بنویسید. در صورت تغییرات بزرگ، آنها را به کامیتهای کوچک تقسیم کنید.
+نکات: تغییرات را در PR شرح دهید و مراحل تست را بنویسید. در صورت تغییرات بزرگ، آنها را به کامیتهای کوچک تقسیم کنید.
---
diff --git a/README_TK.md b/README_TK.md
index 18545bc..e302b89 100644
--- a/README_TK.md
+++ b/README_TK.md
@@ -64,7 +64,7 @@ Taslamany serwera gurnamak üçin şu komandany ýerine ýetiriň:
bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/install.sh)
```
-Gysgaça: gurnama skripti işledilýär we konteýnerler we hyzmatlar döredilýär.
+Gysgaça: gurnama skripti işledilýär we konteýnerler we hyzmatlar döredilýär.
## Täzelik
@@ -74,7 +74,7 @@ Soňky wersiýa çenli täzeläň:
bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/update.sh)
```
-Gysgaça: iň soňky üýtgeşmeleri çekýär we konteýnerleri gaýtadan işledýär.
+Gysgaça: iň soňky üýtgeşmeleri çekýär we konteýnerleri gaýtadan işledýär.
## Pozmak
@@ -84,7 +84,7 @@ Hyzmaty doly pozmak üçin:
bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/delete.sh)
```
-Gysgaça: konteýnerleri we konfigurasiýa faýllaryny pozup, systemany gurnamadan öňki ýagdaýyna getirer.
+Gysgaça: konteýnerleri we konfigurasiýa faýllaryny pozup, systemany gurnamadan öňki ýagdaýyna getirer.
---
diff --git a/install.sh b/install.sh
index c5733aa..23e7cca 100644
--- a/install.sh
+++ b/install.sh
@@ -31,15 +31,16 @@ if [[ "$ID" != "ubuntu" && "$ID" != "debian" ]]; then
die "Этот скрипт поддерживает только Ubuntu или Debian: $ID"
fi
-if ! x-ui status >/dev/null 2>&1; then
- echo "❌ Панель 3x-ui не найдена или не работает."
- echo " Чтобы установить, выполните:"
- echo "bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)"
- exit 1
+if [[ "$REMOTE_PANEL" != "true" ]]; then
+ if ! x-ui status >/dev/null 2>&1; then
+ echo "❌ Панель 3x-ui не найдена или не работает."
+ echo " Чтобы установить, выполните:"
+ echo " bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)"
+ exit 1
+ fi
+ echo "✔ Панель 3x-ui найдена и работает"
fi
-echo "✔ Панель 3x-ui найдена и работает"
-
#################################
# ASCII-баннер
#################################
@@ -83,6 +84,9 @@ echo "URL панели 3x-ui: $UI_URL"
read -rp "Логин 3x-ui: " UI_LOGIN
read -rsp "Пароль 3x-ui: " UI_PASSWORD
echo
+
+UI_LOGIN=$(echo "$UI_LOGIN" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
+UI_PASSWORD=$(echo "$UI_PASSWORD" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
[[ -z "$UI_LOGIN" || -z "$UI_PASSWORD" ]] && die "Логин/пароль обязательны"
# Check login
@@ -92,7 +96,7 @@ if ! command -v curl >/dev/null 2>&1; then
exit 1
fi
-LOGIN_RESPONSE=$(curl -s -X POST "$UI_URL/login" -H "Content-Type: application/json" -d "{\"username\":\"$UI_LOGIN\",\"password\":\"$UI_PASSWORD\"}" || true)
+LOGIN_RESPONSE=$(curl -s -k --connect-timeout 10 -X POST "$UI_URL/login" -H "Content-Type: application/json" -d "{\"username\":\"$UI_LOGIN\",\"password\":\"$UI_PASSWORD\"}" || true)
if ! echo "$LOGIN_RESPONSE" | grep -q '"success":true'; then
echo "Не удалось залогиниться в 3x-ui. Проверьте URL, логин и пароль."
@@ -117,8 +121,8 @@ if [[ "$UI_PROTO" == "https" ]]; then
log "Найдены сертификаты Let's Encrypt для $UI_HOST"
else
log "⚠ Сертификаты Let's Encrypt для $UI_HOST не найдены"
- read -rp "Введите полный путь к SSL сертификату (fullchain.pem): " CERT_PATH
- read -rp "Введите полный путь к SSL ключу (privkey.pem): " KEY_PATH
+ read -rp "Введите полный путь к сертификату (публичный ключ): " CERT_PATH
+ read -rp "Введите полный путь к ключу (приватный ключ): " KEY_PATH
[[ -f "$CERT_PATH" ]] || die "Файл сертификата не найден: $CERT_PATH"
[[ -f "$KEY_PATH" ]] || die "Файл ключа не найден: $KEY_PATH"