Wharf

May 6, 2026 · View on GitHub

og-image

English 简体中文 Русский Español 한국어 العربية Türkçe

خدمة وكيل صور Docker خفيفة الوزن، مصممة لحل مشكلة الوصول المقيد إلى Docker Hub في البر الرئيسي للصين.

📢 برنامج تعليمي للمدونة: قل وداعًا لمهلة اتصال Docker Hub! أنشئ مسرع الصور الحصري الخاص بك باستخدام Wharf

الميزات الأساسية

  • 🚀 نشر بنقرة واحدة: يوفر برنامجًا نصيًا آليًا install.sh لإعداد البيئة بنقرة واحدة، وتطبيق الشهادات (Let's Encrypt)، ونشر الخدمة، دون الحاجة إلى تدخل يدوي.

  • 📦 أوضاع نشر متعددة:

    • مستقل: وظيفة TLS مدمجة، توفر خدمة HTTPS مباشرة.
    • وكيل Nginx: يمكن أن يعمل مع Nginx كخدمة خلفية.
    • أصل CDN: يدعم وضع HTTP، وهو مناسب لتكامل CDN.
  • تسجيل الدخول لزيادة معدل السحب: يسمح للمستخدمين بالمصادقة باستخدام حساباتهم الشخصية في Docker Hub عبر docker login، مما يزيد من حد معدل السحب للمستخدمين المجهولين (10 سحوبات/ساعة/IP) إلى المستخدمين المصادق عليهم (100 سحب/ساعة/حساب).

  • 💎 وكيل شفاف تمامًا: متوافق تمامًا مع Docker Registry V2 API. يحتاج العملاء فقط إلى تعديل عنوان مصدر المرآة، دون منحنى تعليمي إضافي أو تغييرات في عادات الاستخدام.

  • 🛡️ أداء عالٍ وأمان: مبني باستخدام Rust و Actix Web، مما يوفر أداءً ممتازًا وأمانًا للذاكرة. يستخدم البث لترحيل الصور، مع الحد الأدنى من النفقات العامة.

التثبيت والنشر

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

bash <(curl -Ls https://raw.githubusercontent.com/harrisonwang/wharf/main/install.sh)

سيرشدك البرنامج النصي خلال التثبيت ويقدم أوضاع النشر الثلاثة التالية:


الوضع الأول: مستقل (HTTPS)

هذا هو الوضع الأبسط والأكثر توصية. سيستمع Wharf مباشرة على المنافذ 80 و 443، ويوفر خدمة وكيل HTTPS كاملة.

الميزات:

  • لا حاجة لتكوين خادم ويب إضافي.
  • يتعامل تلقائيًا مع إعادة توجيه HTTP إلى HTTPS.
  • خيار التقديم التلقائي لشهادات Let's Encrypt أو استخدام شهاداتك الخاصة.

عملية التثبيت:

  1. قم بتشغيل برنامج التثبيت بنقرة واحدة.
  2. عند المطالبة باختيار الوضع، أدخل 1 أو اضغط Enter ببساطة.
  3. اتبع المطالبات لإدخال اسم المجال الخاص بك واختيار طريقة معالجة الشهادة.
  4. سيكمل البرنامج النصي تلقائيًا جميع التكوينات ويبدأ الخدمة.

الوضع الثاني: وكيل Nginx العكسي (متقدم)

الوضع الثاني: وكيل Nginx العكسي

هذا الوضع مناسب إذا كان لديك بالفعل Nginx وترغب في إدارة خدمات الويب مركزيًا من خلاله.

الميزات:

  • يتعامل Nginx مع تشفير HTTPS وإدارة الشهادات، مع تشغيل Wharf كخلفية HTTP بسيطة.
  • يعمل Wharf كخدمة HTTP خلفية على منفذ محدد (على سبيل المثال، 9000).
  • مناسب للتكامل مع الخدمات الأخرى.

عملية التثبيت:

  1. قم بتشغيل برنامج التثبيت بنقرة واحدة.
  2. عند المطالبة باختيار الوضع، أدخل 2.
  3. اتبع المطالبات لإدخال اسم المجال الخاص بك، ومنفذ الاستماع الخلفي لـ Wharf، ومعلومات الشهادة.
  4. سيقوم البرنامج النصي تلقائيًا بإنشاء ملف تكوين Nginx نموذجي لك. ستحتاج إلى إضافته يدويًا إلى تكوين Nginx الخاص بك وإعادة تحميل خدمة Nginx.

الوضع الثالث: أصل CDN (HTTP) (متقدم)

الوضع الثالث: أصل CDN (HTTP)

هذا الوضع مناسب إذا كنت ترغب في استخدام Wharf كأصل لـ CDN لتحقيق تسريع عالمي أفضل.

الميزات:

  • يستمع Wharf فقط على منافذ HTTP.
  • يتعامل مزود CDN مع طلبات HTTPS والشهادات.
  • يثق Wharf ويعالج رؤوس X-Forwarded-* لتحديد عنوان IP العميل والبروتوكول بشكل صحيح.

عملية التثبيت:

  1. قم بتشغيل برنامج التثبيت بنقرة واحدة.
  2. عند المطالبة باختيار الوضع، أدخل 3.
  3. اتبع المطالبات لإدخال منفذ HTTP الذي يجب أن يستمع إليه Wharf.
  4. قم بتكوين خدمة CDN الخاصة بك لتوجيه أصلها إلى عنوان ومنفذ خدمة Wharf.

استخدام عميل Docker

قم بتكوين عميل Docker الخاص بك لاستخدام خدمة الوكيل الخاصة بك.

الطريقة الأولى: الاستخدام المجهول (التكوين الأساسي)

هذا هو التكوين الأساسي، الذي يوجه طلبات Docker الافتراضية إلى خدمة الوكيل الخاصة بك.

  1. تكوين Docker Daemon

    قم بتحرير ملف /etc/docker/daemon.json (أنشئه إذا لم يكن موجودًا) وأضف المحتوى التالي. استبدل your-domain.com باسم المجال الخاص بك.

    {
      "registry-mirrors": ["https://your-domain.com"]
    }
    
  2. إعادة تشغيل خدمة Docker

    sudo systemctl restart docker
    

    الآن، سيقوم docker pull بسحب الصور من خلال الوكيل الخاص بك.

الطريقة الثانية: استخدام تسجيل الدخول (زيادة معدل السحب)

تسمح لك هذه الطريقة بالحصول على معدل سحب صور أعلى عن طريق تسجيل الدخول باستخدام حساب Docker Hub الخاص بك، بالإضافة إلى الاستخدام المجهول.

  1. إكمال التكوين الأساسي

    يرجى التأكد من إكمال جميع الخطوات في الطريقة الأولى.

  2. تسجيل الدخول إلى خدمة الوكيل

    استخدم الأمر docker login وأدخل اسم المستخدم وكلمة المرور الخاصين بك في Docker Hub.

    docker login your-domain.com
    
  3. مزامنة معلومات المصادقة

    بعد تسجيل الدخول بنجاح، تحتاج إلى تحرير ملف ~/.docker/config.json يدويًا. انسخ معلومات auth التي تم إنشاؤها لـ your-domain.com والصقها لـ https://index.docker.io/v1/.

    قبل التعديل:

    {
        "auths": {
            "your-domain.com": {
                "auth": "aBcDeFgHiJkLmNoPqRsTuVwXyZ..."
            }
        }
    }
    

    بعد التعديل:

    {
        "auths": {
            "your-domain.com": {
                "auth": "aBcDeFgHiJkLmNoPqRsTuVwXyZ..."
            },
            "https://index.docker.io/v1/": {
                "auth": "aBcDeFgHiJkLmNoPqRsTuVwXyZ..."
            }
        }
    }
    

    بعد حفظ الملف، سيتم إرسال طلبات docker pull الخاصة بك كمستخدم مصادق عليه، وبالتالي ستتمتع بحدود معدل أعلى.

التطوير

Note

للحصول على خلفية تقنية مفصلة، وهندسة النظام، ومبادئ التنفيذ، يرجى الرجوع إلى وثيقة البنية التقنية والمبادئ.

  1. استنساخ المستودع

    git clone https://github.com/harrisonwang/wharf.git
    cd wharf
    
  2. تعديل ملف التكوين افتح config/default.toml.example وانسخه إلى config/default.toml، ثم قم بتعديل قسم [server] للتأكد من تمكين خدمة HTTP وتعطيل خدمة HTTPS. يمكنك تعيين المنفذ إلى 8080 لتجنب استخدام المنافذ المميزة في بيئة التطوير.

    cp config/default.toml.example config/default.toml
    

    ثم قم بتحرير config/default.toml:

    # config/default.toml
    
    [server]
    http_port = 8080      # استخدم منفذ غير مميز
    https_port = 8443
    http_enabled = true   # تمكين HTTP
    https_enabled = false # تعطيل HTTPS
    behind_proxy = true
    
  3. تشغيل المشروع الآن، يمكنك تشغيل المشروع مباشرة باستخدام cargo.

    cargo run
    

    ستبدأ الخدمة وتستمع على http://0.0.0.0:8080.

  4. بناء إصدار الإصدار

    cargo build --release
    

الترخيص

هذا المشروع مرخص بموجب ترخيص MIT. راجع LICENSE لمزيد من المعلومات.