همگامسازی کامل اینباندها و کلاینتها + همگامسازی ترافیک بین سرورها
سبک، ایمن، داکرایز شده، و قابلتنظیم با فایل .env
نودکس یک سرویس سبک و داکرشده است که بهعنوان «نود» برای پنل مرکزی 3X-UI عمل میکند. این سرویس:
- اینباندها و کلاینتها را از سرور مرکزی به نودها سینک میکند.
- مصرف ترافیک کلاینتها را بین چند نود تجمیع و همگام میکند.
- با API رسمی پنل (مسیرهای
/panel/api/...) کار میکند. - ذخیرهسازی حالت/ترافیک را داخل SQLite (با WAL) انجام میدهد.
- سینک کامل اینباندها (ایجاد/بهروزرسانی در نودها بر اساس پنل مرکزی)
- سینک کلاینتها (حذف/افزودن/آپدیت مطابق با مرکزی)
- همگامسازی ترافیک: جمعزدن مصرف از نودها و اعمال شمارندهٔ یکپارچه
- داکرایز کامل: ایمیج کمحجم Python 3.12 +
tini+ اجرا بهصورت غیرروت - ایمن بهصورت پیشفرض:
read_only،no-new-privileges،cap_drop: ALL،tmpfsبرای/tmp - Healthcheck داخلی: مبتنی بر فایل
.heartbeat - تنظیمات ساده: از طریق
config.jsonو متغیرهای.env - لاگگیری استاندارد (Stdout) + لاگ فایل (اختیاری با
ENABLE_FILE_LOG=1) - موازیسازی درخواستها به نودها (قابل کنترل با
NET_*)
- دادهها و دیتابیس:
/var/lib/dds-nodex/data - پیکربندی فقطخواندنی:
/var/lib/dds-nodex/config - فایل پایگاهداده:
/var/lib/dds-nodex/data/traffic_state.db - فایل کانفینگ:
/var/lib/dds-nodex/config/config.json
درون کانتینر:
DATA_DIR=/app/dataDB_FILE=/app/data/traffic_state.dbCONFIG_FILE=/app/config/config.json
یک کپی با نام config.json داخل مسیر پیکربندی بسازید:
{
"central_server": {
"url": "http://host.docker.internal:PORT/WEBPATH",
"username": "username",
"password": "password"
},
"nodes": [
{
"url": "http://IP:PORT/WEBPATH",
"username": "username",
"password": "password"
}
]
}نکته: حتما برای نود های خود از SSL استفاده کنید . عدم استفاده از HTTPS امنیت شما را به خطر می اندازد. مسیر پنل معمولاً شبیه http://IP:PORT یا https://IP:PORT/panel است. WEBPATH را مطابق پنل خود بگذارید.
SYNC_INTERVAL_MINUTES=1
# فاصله بین سیکلهای سینک (دقیقه)
# شبکه/پرفورمنس
NET_PARALLEL_NODE_CALLS=true
NET_MAX_WORKERS=12
NET_REQUEST_TIMEOUT=15
NET_CONNECT_POOL_SIZE=100
NET_VALIDATE_TTL_SECONDS=180
# تنظیمات SQLite
DB_WAL=1
DB_SYNCHRONOUS=NORMAL # FULL | NORMAL | OFF
DB_CACHE_SIZE_MB=64
# لاگ فایل (غیرفعال = 0، فعال = 1)
ENABLE_FILE_LOG=0
# سطح لاگ
LOG_LEVEL=INFO
# سلامت سرویس (ثانیه): حداکثر سن .heartbeat
HEALTH_MAX_AGE=180م.دکس با این Compose اجرا میشود (خلاصهٔ کانفیگ):
services:
dds-nodex:
build: .
image: dds-nodex:prod
container_name: dds-nodex
restart: unless-stopped
environment:
LOG_LEVEL: ${LOG_LEVEL:-INFO}
SYNC_INTERVAL_MINUTES: ${SYNC_INTERVAL_MINUTES:-1}
REQUEST_TIMEOUT: ${REQUEST_TIMEOUT:-10}
DATA_DIR: /app/data
DB_FILE: /app/data/traffic_state.db
ENABLE_FILE_LOG: ${ENABLE_FILE_LOG:-0}
CONFIG_FILE: /app/config/config.json
HEALTH_MAX_AGE: ${HEALTH_MAX_AGE:-180}
volumes:
- /var/lib/dds-nodex/data:/app/data
- /var/lib/dds-nodex/config:/app/config:ro
read_only: true
tmpfs: ["/tmp"]
security_opt: ["no-new-privileges:true"]
cap_drop: ["ALL"]
extra_hosts:
- "host.docker.internal:host-gateway"curl -sSL https://raw.githubusercontent.com/azavaxhuman/Nodex/refs/heads/main/install.sh -o install.sh && chmod +x install.sh && ./install.shاگر Nodex برای شما مفید بود، میتوانید از پروژه حمایت کنید:
| Cryptocurrency | Wallet Address |
|---|---|
| USDT (BEP20) | 0xFA231ce9128AC097F70F5efcfFb3d918645e1Ca9 |
| DogeCoin (DOGE) | DRXjceAoxBRzNsNgVR3GduPSau4xiv179y |
| TRON (TRX-TRC20 ) | TJWnK1fCcxwsemyYgYjebKnsBfofCFy3Pc |
- لوگین به پنل مرکزی و نودها (Sessionهای پایدار با TTL)
- دریافت لیست اینباندها از مرکزی → اعمال روی نودها (افزودن/بهروزرسانی در صورت تغییر)
- سینک کلاینتها داخل هر اینباند (ایجاد/حذف/بهروزرسانی)
- ترافیک: Nodex مجموع مصرف کلاینت را از نودها جمع میکند و بهصورت کل واحد برای کلاینت نگه میدارد و روی همهٔ نودها همگام میکند.
- SQLite + WAL: ذخیرهٔ حالت/مصرف با قفلگذاری Thread-safe
- Healthcheck بر پایهٔ تازه بودن فایل
.heartbeatنسبت بهHEALTH_MAX_AGE
read_only: true+no-new-privileges+cap_drop: ALL- کانفیگ بهصورت فقطخواندنی در کانتینر (
/app/config:ro)
پیشنهاد: Nodex را پشت یک شبکهٔ داخلی Docker یا سرور داخل همان شبکه/دیتاسنتر با پنلها قرار دهید.
dds-nodex --logsیا از طریق اجرای دستور dds-nodex و انتخاب مشاهده ی لاگ ها از منو میتوانید لاگ هارا به صورت زنده مشاهده کنید.
داخل .env مقدار ENABLE_FILE_LOG=1
مسیر لاگ: /var/lib/dds-nodex/data/sync.log
- 401/403: نام کاربری/رمز یا مسیر
WEBPATHاشتباه است. - Timeout:
NET_REQUEST_TIMEOUTرا بالا ببرید یا اتصال بین Nodex و سرورها را بررسی کنید. - Healthcheck Fail: مقدار
HEALTH_MAX_AGEکم است یا سینک پیدرپی شکست میخورد (لاگ را چک کنید). - DB Lock: فضای دیسک/مجوز پوشهٔ
dataرا بررسی کنید.
خیر؛ Nodex با API کار میکند و تغییرات را در سطح اینباند/کلاینتهای نودها اعمال میکند.
بهصورت پیشفرض موازیسازی فعال است؛ با NET_MAX_WORKERS میتوانید متناسب با منابع افزایش/کاهش دهید.
Nodex در شروع، در صورت وجود DB قدیمی در مسیرهای قدیمی، آنرا به مسیر جدید مهاجرت میدهد (بههمراه wal/shm).
این پروژه تحت مجوزی منتشر شده که در فایل LICENSE آمده است (در صورت عدم وجود، لطفاً مجوز مدنظرتان را اضافه کنید).
- بهینهسازی موازیسازی درخواستها
- Healthcheck مبتنی بر
.heartbeat - PRAGMAهای SQLite قابل تنظیم
- بهبود لاگینگ