إنتقل إلى المحتوى الرئيسي

Traefik

نظرة عامة

في هذا الدليل سنستخدم Traefik كبروكسي عكسي للوصول إلى لوحة Remnawave. سنوجّه اسم النطاق إلى خادمنا ونُعدّ Traefik. سيتولى Traefik إصدار شهادات SSL بنفسه.

warning

تحتاج إلى امتلاك اسم نطاق مسجّل للمتابعة.

توجيه النطاق إلى خادمك

تحقق من عنوان IP الخاص بخادمك. من الأفضل استخدام عنوان IPv4 ثابت.

الآن، تحتاج إلى توجيه اسم نطاقك إلى هذا العنوان IP.

على سبيل المثال، سيكون my-super-panel.com -> 193.122.122.122.

هناك طريقتان للقيام بذلك:

  1. استخدام مزوّد DNS (مثل Cloudflare، Google Cloud، إلخ.)
  2. استخدام مسجّل النطاق (مثل Namecheap، إلخ.)

مزوّد DNS

إذا كنت تستخدم Cloudflare، فتحتاج إلى إضافة سجل A/AAAA (لـ IPv4 وIPv6 على التوالي) إلى سجلات DNS الخاصة بك.

سجّل الدخول إلى حساب Cloudflare الخاص بك هنا وحدد النطاق المطلوب.

على الجانب الأيسر من الصفحة، انقر على DNS ثم انقر على Records. انقر على Create record.
اضبط Type على A وName على @.

معلومات

إذا كنت تريد استخدام نطاقات فرعية، يجب إدخال اسم النطاق الفرعي (مثل panel) في حقل Name.

أدخل عنوان IP الخاص بخادمك في حقل IPv4 address وانقر على Save.

الآن تحتاج إلى الانتظار قليلاً حتى يتم تحديث سجلات DNS.

معلومات

هناك فرق كبير بين السحابة الصفراء (النطاق يمر عبر وكيل Cloudflare) والسحابة الرمادية (النطاق لا يمر عبر وكيل Cloudflare) في لوحة تحكم Cloudflare.

إذا كان Cloudflare يعمل بشكل جيد في منطقتك، فمن الأفضل توجيه النطاق من خلال Cloudflare. (السحابة الصفراء)

static

بعض مزودي DNS لديهم واجهة مختلفة، لكن العملية العامة هي نفسها.

إعداد Traefik

إنشاء docker-compose.yml

أنشئ ملف docker-compose.yml في المجلد /opt/remnawave/traefik.

mkdir -p /opt/remnawave/traefik && cd /opt/remnawave/traefik && nano docker-compose.yml

الصق الإعداد التالي.

docker-compose.yml
services:
traefik:
image: traefik:latest
container_name: traefik
restart: unless-stopped
security_opt:
- no-new-privileges:true
networks:
- remnawave-network
ports:
- '0.0.0.0:80:80'
- '0.0.0.0:443:443'
environment:
- TZ=UTC
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./traefik.yml:/traefik.yml:ro
- ./letsencrypt:/letsencrypt
- ./config:/config:ro
- ./logs:/var/log/traefik
networks:
remnawave-network:
name: remnawave-network
driver: bridge
external: true

إنشاء ملف الإعداد الثابت

أنشئ ملف إعداد ثابت باسم traefik.yml في المجلد /opt/remnawave/traefik.

cd /opt/remnawave/traefik && nano traefik.yml

الصق الإعداد التالي.

warning

يُرجى استبدال REPLACE_WITH_YOUR_EMAIL ببريدك الإلكتروني.

راجع الإعداد أدناه، ابحث عن الأسطر المميّزة باللون الأصفر.

traefik.yml
api:
dashboard: true
debug: true
entryPoints:
http:
address: ":80"
http:
redirections:
entryPoint:
to: https
scheme: https
https:
address: ":443"
serversTransport:
insecureSkipVerify: true
providers:
file:
directory: /config
watch: true
certificatesResolvers:
letsencrypt:
acme:
email: REPLACE_WITH_YOUR_EMAIL
storage: /letsencrypt/acme.json
httpChallenge:
entryPoint: http

log:
level: "INFO"
filePath: "/var/log/traefik/traefik.log"
accessLog:
filePath: "/var/log/traefik/access.log"

إنشاء ملف الإعداد الديناميكي

أنشئ ملفاً باسم remnawave.yml في المجلد /opt/remnawave/traefik/config.

mkdir -p /opt/remnawave/traefik/config && cd /opt/remnawave/traefik/config && nano remnawave.yml

الصق الإعداد التالي.

warning

يُرجى استبدال REPLACE_WITH_YOUR_DOMAIN باسم نطاقك.

راجع الإعداد أدناه، ابحث عن الأسطر المميّزة باللون الأصفر.

remnawave.yml
http:
routers:
remnawave:
rule: "Host(`REPLACE_WITH_YOUR_DOMAIN`)"
entrypoints:
- https
middlewares:
- remnawave-https-redirect
tls:
certResolver: letsencrypt
service: remnawave

middlewares:
remnawave-https-redirect:
redirectScheme:
scheme: https

services:
remnawave:
loadBalancer:
servers:
- url: "http://remnawave:3000"

تشغيل الحاوية

docker compose up -d && docker compose logs -f -t

تقييد الوصول إلى اللوحة بالعنوان IP

إذا أردت تقييد الوصول إلى اللوحة بعنوان IP معين، يمكنك إنشاء ملف middleware باسم ip_allow_list.yml.

cd /opt/remnawave/traefik/config && nano ip_allow_list.yml

الصق الإعداد التالي.

warning

يُرجى استبدال REPLACE_WITH_YOUR_IP بعنوان IP المسموح به (أو نطاقات IP باستخدام ترميز CIDR).

راجع الإعداد أدناه، ابحث عن الأسطر المميّزة باللون الأصفر.

معلومات

إذا كان اسم نطاقك مُوجَّهاً عبر Cloudflare، فيجب تحديد نطاقات IP الخاصة بـ Cloudflare في قائمة excludedIPs.

تُحدِّث Cloudflare نطاقات IP بانتظام، لذا يُنصح بمراجعة صفحة Cloudflare الرسمية للحصول على قائمة محدَّثة.

ip_allow_list.yml
http:
middlewares:
ip-allow-list:
ipAllowList:
sourceRange:
- "REPLACE_WITH_YOUR_IP"
ipStrategy:
excludedIPs:
- 73.245.48.0/20
- 103.21.244.0/22
- 103.22.200.0/22
- 103.31.4.0/22
- 141.101.64.0/18
- 108.162.192.0/18
- 190.93.240.0/20
- 188.114.96.0/20
- 197.234.240.0/22
- 198.41.128.0/17
- 162.158.0.0/15
- 104.16.0.0/13
- 104.24.0.0/14
- 172.64.0.0/13
- 131.0.72.0/22

ثم تحتاج إلى إضافة middleware ip-allow-list إلى ملف الإعداد remnawave.yml.

nano remnawave.yml

انتبه إلى السطر الأخضر الذي يجب إضافته.

remnawave.yml
http:
routers:
remnawave:
rule: 'Host(`REPLACE_WITH_YOUR_DOMAIN`)'
entrypoints:
- https
middlewares:
- remnawave-https-redirect
- ip-allow-list
tls:
certResolver: letsencrypt
service: remnawave

middlewares:
remnawave-https-redirect:
redirectScheme:
scheme: https

services:
remnawave:
loadBalancer:
servers:
- url: 'http://remnawave:3000'

السماح بالوصول العام لمسار الاشتراك

لكي يعمل نظام الاشتراك بشكل صحيح، يجب أن يكون مسار /api/sub/ متاحاً للعامة. في نفس الوقت، يجب أن تظل بقية اللوحة محمية بالقيود القائمة على IP.

لتحقيق ذلك، تحتاج إلى تعريف موجِّهَين منفصلَين لنفس النطاق — أحدهما لـ /api/sub/ (وصول مفتوح)، والآخر لكل شيء آخر (مقيَّد).

افتح ملف remnawave.yml مرة أخرى:

nano /opt/remnawave/traefik/config/remnawave.yml

وحدِّث إعداد الموجِّه كما يلي:

remnawave.yml
http:
routers:
remnawave-sub:
rule: "Host(`REPLACE_WITH_YOUR_DOMAIN`) && PathPrefix(`/api/sub/`)"
middlewares:
- remnawave-https-redirect
entrypoints:
- https
service: remnawave
tls:
certResolver: letsencrypt

remnawave-secure:
rule: "Host(`REPLACE_WITH_YOUR_DOMAIN`)"
entrypoints:
- https
middlewares:
- remnawave-https-redirect
- ip-allow-list
service: remnawave
tls:
certResolver: letsencrypt

middlewares:
remnawave-https-redirect:
redirectScheme:
scheme: https

services:
remnawave:
loadBalancer:
servers:
- url: "http://remnawave:3000"

يجعل هذا الإعداد مسار /api/sub/ متاحاً للعموم، بينما تظل بقية اللوحة مقيَّدة بعنوان IP.

افتح اللوحة في المتصفح

افتح اسم النطاق المُعدَّ في المتصفح وستظهر لك صفحة تسجيل الدخول.

login-page

استكشاف الأخطاء وإصلاحها