متغيرات البيئة
لتغيير متغيرات البيئة، يجب إعادة إنشاء حاويات Remnawave.
إعادة تشغيل الحاويات فقط لا تستبدل البيئة داخل الحاوية!
لإعادة إنشاء الحاوية باستخدام docker compose، شغّل docker compose down && docker compose up -d.
تغيير متغيرات البيئة
يمكنك تغيير متغيرات البيئة بتعديل ملف .env. على الأرجح يقع في /opt/remnawave.
cd /opt/remnawave && nano .env
المنافذ
| المتغير | الوصف | الافتراضي |
|---|---|---|
APP_PORT | المنفذ الذي تعمل عليه لوحة Remnawave | 3000 |
METRICS_PORT | المنفذ الذي تعمل عليه نقاط Metrics | 3001 |
مثال
APP_PORT=3000
METRICS_PORT=3001
توسيع نطاق API
عدد نسخ API التي سيتم تشغيلها.
القيم المتاحة:
max(بدء نسخ على جميع الأنوية)<number>(بدء نسخ على عدد محدد من الأنوية)-1(بدء نسخ على جميع الأنوية - 1)
اتركه على القيمة الافتراضية لبدء نسخة واحدة فقط.
معظم المستخدمين لن يحتاجوا إلى تغيير هذه القيمة، لكنها يمكن أن تساعد في تحقيق أداء أفضل مع أكثر من 40,000 مستخدم.
لا تضبط هذه القيمة على رقم أكبر من عدد أنوية CPU في جهازك.
| المتغير | الوصف | الافتراضي |
|---|---|---|
API_INSTANCES | عدد نسخ API التي سيتم تشغيلها | 1 |
مثال
API_INSTANCES=1
Redis
| المتغير | الوصف | الافتراضي | مطلوب |
|---|---|---|---|
REDIS_HOST | مضيف خادم Redis | remnawave-redis | نعم |
REDIS_PORT | منفذ خادم Redis | 6379 | نعم |
REDIS_DB | قاعدة بيانات خادم Redis | 0 | لا |
REDIS_PASSWORD | كلمة مرور خادم Redis | لا | |
REDIS_SOCKET | socket خادم Redis | لا |
مثال
REDIS_HOST=remnawave-redis
REDIS_PORT=6379
قاعدة البيانات
المتغيرات أدناه لا يستخدمها Remnawave، بل حاوية قاعدة البيانات.
| المتغير | الوصف | الافتراضي | مطلوب |
|---|---|---|---|
POSTGRES_USER | اسم مستخدم خادم Postgres | postgres | لا |
POSTGRES_PASSWORD | كلمة مرور خادم Postgres | postgres | لا |
POSTGRES_DB | قاعدة بيانات خادم Postgres | postgres | لا |
يستخدم Remnawave عنوان URL لـ PostgreSQL للاتصال بقاعدة البيانات.
postgresql://{user}:{password}@{host}:{port}/{database}
DATABASE_URL="postgresql://postgres:postgres@remnawave-db:5432/postgres"
مثال
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_DB=postgres
DATABASE_URL="postgresql://postgres:postgres@remnawave-db:5432/postgres"
المفاتيح السرية
يُنصح باستخدام مولّد سلاسل عشوائية لإنشاء أسرار بطول لا يقل عن 64 حرفاً.
لا تستخدم بيانات الاعتماد الافتراضية في بيئة الإنتاج. تأكد من إنشاء أسرار قوية!
openssl rand -hex 64
| المتغير | الوصف | الافتراضي | مطلوب |
|---|---|---|---|
JWT_AUTH_SECRET | المفتاح السري لـ JWT المصادقة | change_me | نعم |
JWT_API_TOKENS_SECRET | المفتاح السري لـ JWT رموز API | change_me | نعم |
مثال
JWT_AUTH_SECRET=strong_secret_key
JWT_API_TOKENS_SECRET=strong_secret_key
إشعارات Telegram
يستخدم كل متغير إشعارات التنسيق الموحّد: chat_id:thread_id، حيث thread_id اختياري.
| المتغير | الوصف | الافتراضي | القيم المتاحة |
|---|---|---|---|
IS_TELEGRAM_NOTIFICATIONS_ENABLED | تعطيل/تمكين إشعارات Telegram | false | true، false |
TELEGRAM_BOT_TOKEN | رمز بوت Telegram | ||
TELEGRAM_BOT_API_ROOT | عنوان URL جذر API بوت Telegram المخصص (اختياري) | https://api.telegram.org | |
TELEGRAM_BOT_PROXY | بروكسي لبوت Telegram (اختياري) | protocol://user:password@host:port | |
TELEGRAM_NOTIFY_USERS | إشعارات عن أحداث المستخدمين | chat_id أو chat_id:thread_id | |
TELEGRAM_NOTIFY_NODES | إشعارات عن أحداث العقد | chat_id أو chat_id:thread_id | |
TELEGRAM_NOTIFY_CRM | إشعارات عن أحداث CRM | chat_id أو chat_id:thread_id | |
TELEGRAM_NOTIFY_SERVICE | إشعارات عن أحداث الخدمة | chat_id أو chat_id:thread_id | |
TELEGRAM_NOTIFY_TBLOCKER | إشعارات عن أحداث Torrent Blocker | chat_id أو chat_id:thread_id |
معرّف دردشة مجموعة Telegram يبدأ دائماً بـ -100.
مثال
# تعطيل/تمكين إشعارات Telegram
IS_TELEGRAM_NOTIFICATIONS_ENABLED=false
# رمز بوت Telegram
TELEGRAM_BOT_TOKEN=change_me
# اختياري: بروكسي لبوت Telegram
# TELEGRAM_BOT_PROXY=socks5://user:password@host:port
# الإشعارات (التنسيق: chat_id أو chat_id:thread_id)
TELEGRAM_NOTIFY_USERS=change_me
TELEGRAM_NOTIFY_NODES=change_me
TELEGRAM_NOTIFY_CRM=change_me
TELEGRAM_NOTIFY_SERVICE=change_me
TELEGRAM_NOTIFY_TBLOCKER=change_me
النطاقات
| المتغير | الوصف | الافتراضي | مطلوب |
|---|---|---|---|
FRONT_END_DOMAIN | نطاق لوحة Remnawave. يُستخدم لضبط رؤوس CORS. | * | نعم |
| المتغير | الوصف | الافتراضي | مطلوب |
|---|---|---|---|
SUB_PUBLIC_DOMAIN | النطاق والمسار لعنوان URL الاشتراك العام | example.com/api/sub | نعم |
| المتغير | الوصف | الافتراضي | مطلوب |
|---|---|---|---|
PANEL_DOMAIN | نطاق اللوحة لإنشاء روابط مباشرة (مثلاً في إشعارات Telegram مع أزرار inline) | لا |
يُستخدم SUB_PUBLIC_DOMAIN لضبط عنوان URL الاشتراك العام في استجابات RestAPI/واجهة المستخدم في لوحة التحكم.
إذا كنت تستخدمه مع اللوحة، فقط اضبطه على yourpanel.com/api/sub
مثال
FRONT_END_DOMAIN=yourpanel.com
SUB_PUBLIC_DOMAIN=yourpanel.com/api/sub
PANEL_DOMAIN=yourpanel.com
التوثيق
| المتغير | الوصف | الافتراضي | القيم المتاحة |
|---|---|---|---|
IS_DOCS_ENABLED | تعطيل/تمكين التوثيق | false | true، false |
يُستخدم IS_DOCS_ENABLED لتعطيل/تمكين التوثيق.
يمكنك استخدام صفحة API Keys في لوحة تحكم المسؤول (عندما يكون IS_DOCS_ENABLED مضبوطاً على true) للحصول على رابط سريع للتوثيق.
| المتغير | الوصف | الافتراضي |
|---|---|---|
SWAGGER_PATH | المسار إلى واجهة Swagger | /docs |
SCALAR_PATH | المسار إلى واجهة Scalar | /scalar |
مثال
IS_DOCS_ENABLED=true
SWAGGER_PATH=/docs
SCALAR_PATH=/scalar
مقاييس Prometheus
يمكنك إنشاء كلمة مرور عشوائية لمقاييس metrics باستخدام الأمر التالي:
openssl rand -hex 64
| المتغير | الوصف | الافتراضي |
|---|---|---|
METRICS_USER | المستخدم للمقاييس | admin |
METRICS_PASS | كلمة المرور للمقاييس | change_me |
مثال
METRICS_USER=admin
METRICS_PASS=change_me
مثال على إعداد Prometheus:
global:
# scrape_interval: 15s
scrape_timeout: 10s
evaluation_interval: 15s
scrape_configs:
- job_name: 'remnawave'
scheme: http
metrics_path: /metrics
static_configs:
- targets: ['remnawave:3001']
scrape_interval: 30s
basic_auth:
username: admin
password: change_me
يمكنك استخدام لوحة Grafana الجاهزة لتصور المقاييس المجمّعة: Remnawave Panel Dashboard
عيّنة مقاييس Prometheus
# HELP remnawave_node_online_users Number of online users on a node
# TYPE remnawave_node_online_users gauge
remnawave_node_online_users{node_uuid="d86d8c63-944c-4398-9cf4-c3882a54a5d5",app="remnawave"} 0
remnawave_node_online_users{node_uuid="966e6378-ec47-4998-939e-123d9616b1dd",app="remnawave"} 0
remnawave_node_online_users{node_uuid="ed1727fd-5cdc-4ebb-8a24-71823714f6ad",app="remnawave"} 0
remnawave_node_online_users{node_uuid="e31adcc0-5edb-463f-ba2e-9f3cb5ac69cf",app="remnawave"} 0
Webhook
| المتغير | الوصف | الافتراضي | القيم المتاحة |
|---|---|---|---|
WEBHOOK_ENABLED | تمكين/تعطيل إشعارات webhook | false | true، false |
WEBHOOK_URL | عنوان URL للـ webhook، يمكن أن يكون http:// أو https:// | ||
WEBHOOK_SECRET_HEADER | مفتاح التوقيع، 32 حرفاً على الأقل. السماح فقط بـ a-z, 0-9, A-Z. |
يمكنك إنشاء كلمة مرور عشوائية لسر webhook باستخدام الأمر التالي:
openssl rand -hex 64
مثال
WEBHOOK_ENABLED=true
WEBHOOK_URL=https://your-server.com/webhook-path
WEBHOOK_SECRET_HEADER=strong_secret_key
إشعارات استخدام النطاق الترددي
| المتغير | الوصف | الافتراضي | القيم المتاحة |
|---|---|---|---|
BANDWIDTH_USAGE_NOTIFICATIONS_ENABLED | تمكين/تعطيل إشعارات استخدام النطاق الترددي | false | true، false |
BANDWIDTH_USAGE_NOTIFICATIONS_THRESHOLD | عتبة إشعارات استخدام النطاق الترددي. بترتيب تصاعدي فقط (مثال: [60, 80])، يجب أن يكون مصفوفة صحيحة من الأعداد الصحيحة (min: 25, max: 95). لا أكثر من 5 قيم. |
مثال
BANDWIDTH_USAGE_NOTIFICATIONS_ENABLED=true
BANDWIDTH_USAGE_NOTIFICATIONS_THRESHOLD=[60, 80]
إشعارات المستخدمين غير المتصلين
| المتغير | الوصف | الافتراضي | القيم المتاحة |
|---|---|---|---|
NOT_CONNECTED_USERS_NOTIFICATIONS_ENABLED | تمكين/تعطيل إشعارات المستخدمين غير المتصلين | false | true، false |
NOT_CONNECTED_USERS_NOTIFICATIONS_AFTER_HOURS | الساعات التي بعدها يتم إرسال إشعارات للمستخدمين الذين لم يتصلوا. بترتيب تصاعدي فقط (مثال: [6, 12, 24])، يجب أن يكون مصفوفة صحيحة من الأعداد الصحيحة (min: 1, max: 168). لا أكثر من 3 قيم. |
مثال
### إشعارات المستخدمين غير المتصلين (webhook, telegram)
NOT_CONNECTED_USERS_NOTIFICATIONS_ENABLED=false
# بترتيب تصاعدي فقط (مثال: [6, 12, 24])، يجب أن يكون مصفوفة صحيحة من الأعداد الصحيحة (min: 1, max: 168). لا أكثر من 3 قيم.
# كل قيمة تمثّل الساعات المنقضية بعد إنشاء المستخدم (user.createdAt)
NOT_CONNECTED_USERS_NOTIFICATIONS_AFTER_HOURS=[6, 24, 48]
متنوع
| المتغير | الوصف | الافتراضي | القيم المتاحة |
|---|---|---|---|
SHORT_UUID_LENGTH | طول UUID القصير المُولَّد (الاشتراك). الحد الأدنى 16 والحد الأقصى 64 | 16 | |
IS_HTTP_LOGGING_ENABLED | تمكين/تعطيل تسجيل HTTP | false | true، false |
ENABLE_DEBUG_LOGS | تمكين/تعطيل سجلات التصحيح | false | true، false |
JWT_AUTH_LIFETIME | مدة صلاحية JWT المصادقة بالساعات. القيم الممكنة من 12 إلى 168. | 12 | |
SERVICE_CLEAN_USAGE_HISTORY | تمكين/تعطيل تنظيف سجل الاستخدام | false | true، false |
SERVICE_DISABLE_USER_USAGE_RECORDS | تعطيل تسجيل بيانات استخدام المستخدم | false | true، false |
USER_USAGE_IGNORE_BELOW_BYTES | تجاهل استخدام المستخدم تحت هذا الحد (بالبايت، الحد الأقصى 1048576) | 0 |
مثال
SHORT_UUID_LENGTH=16
IS_HTTP_LOGGING_ENABLED=true
ENABLE_DEBUG_LOGS=false
JWT_AUTH_LIFETIME=12
SERVICE_CLEAN_USAGE_HISTORY=false
SERVICE_DISABLE_USER_USAGE_RECORDS=false
USER_USAGE_IGNORE_BELOW_BYTES=0