Thunderstore عبارة عن قاعدة بيانات تعديل وواجهة برمجة تطبيقات لتنزيل التعديلات.
انسخ .env.template
إلى .env
وقم بالتعديل كما تراه مناسبًا - إذا كان لديك حق الوصول إلى الوحدة الفرعية python-packages
وتم استنساخها، فتأكد من تعيين BUILD_INSTALL_EXTRAS
على true
. وأي قيمة أخرى لن تعمل. سيتطلب تغيير هذا الإعداد إعادة بناء البيئة (على سبيل المثال باستخدام docker compose build
) حتى يصبح ساري المفعول.
تشغيل docker compose up
قم بتشغيل docker compose exec django python manage.py migrate
في محطة أخرى
قم بتشغيل docker compose exec django python manage.py shell
وأدخل الكود التالي:
من django.contrib.sites.models استيراد SiteSite.objects.create(domain = "thunderstore.localhost"، name = "Thunderstore")
تأكد من استبدال localhost
بما تستخدمه للاتصال بالموقع! بشكل عام، يجب عليك استخدام thunderstore.localhost
باعتباره المجال الرئيسي للتعامل مع نطاق المصادقة بشكل صحيح (راجع SESSION_COOKIE_DOMAIN
لاحقًا)
ستحتاج أيضًا إلى الانتقال إلى لوحة الإدارة ( /djangoadmin
) وتكوين تعيين من موقع إلى مجتمع. يمكنك إنشاء حساب مستخدم متميز باستخدام أمر إدارة createsuperuser
Django (على غرار كيفية تشغيل الترحيل) للوصول إلى لوحة الإدارة.
لربط موقع بمجتمع، ستحتاج إلى:
تأكد من وجود كائن مجتمع واحد على الأقل أو قم بإنشاء واحد (يجب إنشاء Risk of Rain 2
تلقائيًا)
تأكد من وجود كائن موقع واحد على الأقل أو قم بإنشاء واحد
اجعل سمة domain name
لكائن الموقع مطابقة لما تستخدمه للاتصال ببيئة التطوير الخاصة بك
قم بإنشاء كائن موقع مجتمع جديد، وربط الاثنين معًا
يوجد برنامج نصي لملء قاعدة البيانات المحلية ببيانات الاختبار. يمكنك تشغيله على النحو التالي:
عامل ميناء يؤلف exec django python manager.py create_test_data
في التطوير المحلي، يتم استخدام minio لتخزين الملفات المتوافقة مع S3. يمكنك الوصول إليه عبر http://localhost:9000/ باستخدام بيانات اعتماد thunderstore:thunderstore
يمكن الاطلاع على وثائق REST API swagger من /api/docs/
.
في الوقت الحالي، واجهة برمجة التطبيقات الوحيدة ذات الصلة هي /api/v1/package/
، والتي تسرد جميع التعديلات النشطة في قاعدة البيانات. يمكن أيضًا جلب تعديل محدد إذا لزم الأمر باستخدام نقطة النهاية /api/v1/package/{uuid4}/
، حيث يتم استبدال {uuid4}
بقيمة uuid4 الخاصة بالوضع.
يمكن الوصول إلى موقع الإدارة من /djangoadmin/
. لعرض موقع المسؤول، تحتاج إلى حساب المسؤول.
بافتراض استخدام عامل الإرساء، يمكن إنشاء حساب المسؤول على النحو التالي:
docker compose exec django python manage.py createsuperuser
لاحظ أنه إذا كنت تعمل على نظام التشغيل Windows، فسوف تحتاج إلى استخدام winpty لتشغيل هذا الأمر.
DEBUG
: يجب تعيينه على false أو عدم ضبطه على الإطلاق للإنتاج
SECRET_KEY
: سلسلة طويلة وعشوائية تستخدم لتجزئة كلمات المرور والبيانات الأخرى. ينبغي أن تظل سرية، كما يوحي الاسم.
ALLOWED_HOSTS
: قائمة مفصولة بفواصل لأسماء المضيفين التي يمكن أن يتصل بها هذا الخادم. على سبيل المثال beta.thunderstore.io
PRIMARY_HOST
: الاسم العام للخادم، مثل beta.thunderstore.io
PROTOCOL
: البروتوكول الذي سيتم استخدامه لإنشاء عناوين URL للخادم. إما https://
أو http://
.
REPOSITORY_MAX_PACKAGE_SIZE_MB
: الحد الأقصى لحجم الحزمة الفردية
REPOSITORY_MAX_PACKAGE_TOTAL_SIZE_GB
: الحد الأقصى لحجم الملف الإجمالي الذي تستخدمه الحزم
GUNICORN_WORKER_COUNT
: يستخدم للتحكم في عدد العمال الذين سينتشرون
GUNICORN_LOG_LEVEL
: يستخدم للتحكم في مستوى تسجيل gunicorn
SESSION_COOKIE_DOMAIN
: إذا تم تعيينه، فإنه يسمح بمشاركة الجلسات داخل النطاق ونطاقاته الفرعية. على سبيل المثال: thunderstore.io
بالنسبة للاختبار المحلي، القيم الموصى بها هي:
SESSION_COOKIE_DOMAIN
: thunderstore.localhost
تأكد أيضًا من أن كائنات الموقع تشير إلى thunderstore.localhost
أو بعض نطاقاته الفرعية، مثل test.thunderstore.localhost
.
SOCIAL_AUTH_SANITIZE_REDIRECTS
: اضبط على True
إذا كنت تريد تقييد مجالات إعادة توجيه OAuth.
SOCIAL_AUTH_ALLOWED_REDIRECT_HOSTS
: قائمة بنطاقات إعادة توجيه OAuth المسموح بها، تُستخدم في حالة تمكين SOCIAL_AUTH_SANITIZE_REDIRECTS
.
SOCIAL_AUTH_INIT_HOST
: المضيف المستخدم لعمليات تهيئة المصادقة الاجتماعية وعمليات الاسترجاعات، بغض النظر عن المضيف الذي يستخدمه المستخدم حاليًا. إذا لم يتم تعيينه، فسيتم تعيينه افتراضيًا على نفس القيمة مثل AUTH_EXCLUSIVE_HOST
. إذا لم يتم تعيين أي منهما، فسيتم تعيينه افتراضيًا على مضيف الطلب.
AUTH_EXCLUSIVE_HOST
: اسم المضيف/المجال الذي سيتم استخدامه حصريًا للمنطق المرتبط بالمصادقة، مثل عملية المصادقة الاجتماعية. إذا لم يتم تعيينه، فلن تتم معاملة أي مضيف باعتباره مضيف المصادقة الحصري.
بالنسبة للاختبار المحلي، القيم الموصى بها هي:
AUTH_EXCLUSIVE_HOST
: auth.thunderstore.localhost
SOCIAL_AUTH_SANITIZE_REDIRECTS
: auth.thunderstore.localhost,thunderstore.localhost
لإعداد GitHub OAuth، توجه إلى الإعدادات على GitHub (إما الإعدادات الشخصية أو إعدادات المؤسسة)، ومن ضمن Developer Settings
حدد OAuth Apps
.
أنشئ تطبيق OAuth جديد، واستخدم {AUTH_EXCLUSIVE_HOST}/auth/complete/github/
كعنوان URL لرد اتصال التفويض، حيث يتم استبدال {AUTH_EXCLUSIVE_HOST}
بالقيمة التي تم استخدامها لإعداد AUTH_EXCLUSIVE_HOST
. على سبيل المثال، بالنسبة للبيئة المحلية، يمكنك استخدام http://auth.localhost/auth/complete/github/
، بينما بالنسبة للبيئة المباشرة https://auth.thunderstore.dev/auth/complete/github/
بعد إنشاء تطبيق OAuth، يجب عليك أيضًا توفير متغيرات البيئة التالية للتطبيق:
SOCIAL_AUTH_GITHUB_KEY
: قيمة Client ID
لتطبيق OAuth
SOCIAL_AUTH_GITHUB_SECRET
قيمة Client Secret
لتطبيق OAuth
لإعداد Discord OAuth، توجه إلى لوحة مطور Discord، وقم بإنشاء تطبيق OAuth جديد. أضف عنوان URL لرد الاتصال إلى {AUTH_EXCLUSIVE_HOST}/auth/complete/discord/
، حيث يتم استبدال {AUTH_EXCLUSIVE_HOST}
بالقيمة التي تم استخدامها لإعداد AUTH_EXCLUSIVE_HOST
. على سبيل المثال، بالنسبة إلى المستوى المحلي، يمكنك استخدام http://auth.localhost/auth/complete/discord/
، بينما بالنسبة إلى البيئة المباشرة https://auth.thunderstore.dev/auth/complete/discord/
SOCIAL_AUTH_DISCORD_KEY
: قيمة Client ID
لتطبيق OAuth
SOCIAL_AUTH_DISCORD_SECRET
قيمة Client Secret
لتطبيق OAuth
يتم دعم بروتوكول AWS S3 / Boto3 من قبل العديد من البائعين والخدمات، وقد يختلف هذا التنفيذ وفقًا للموفر.
ارجع إلى https://django-storages.readthedocs.io/en/latest/backends/amazon-S3.html لمزيد من التفاصيل حول التنفيذ. راجع أيضًا Thunderstore/core/settings.py لمعرفة متغيرات البيئة التي يتم تنفيذها حاليًا.
على الأقل قم بتعيين المتغيرات التالية:
AWS_ACCESS_KEY_ID
: معرف مفتاح المصادقة
AWS_SECRET_ACCESS_KEY
: سر مفتاح المصادقة
AWS_S3_REGION_NAME
: منطقة حاوية التخزين
AWS_S3_ENDPOINT_URL
: نقطة نهاية خدمة التخزين
AWS_STORAGE_BUCKET_NAME
: اسم الحاوية
AWS_LOCATION
: الموقع داخل المجموعة حيث يتم تحميل الملفات
AWS_S3_SECURE_URLS
: اضبط على false لتعطيل HTTPS، وهو ممكن افتراضيًا
تعمل واجهات برمجة تطبيقات وسائط المستخدم من خلال الاستفادة من عناوين URL المخصصة للتخزين المتوافقة مع S3 للتعامل مع التحميل الفعلي. على هذا النحو، يجب أن تكون الواجهة الخلفية لوسائط المستخدم أيضًا واجهة تخزين خلفية متوافقة مع S3. وبالمثل، يمكن تكوين الواجهة الخلفية لتخزين وسائط المستخدم باستخدام متغيرات البيئة:
USERMEDIA_S3_ENDPOINT_URL
: نقطة نهاية خدمة التخزين التي يمكن الوصول إليها داخليًا
USERMEDIA_S3_ACCESS_KEY_ID
: معرف مفتاح المصادقة
USERMEDIA_S3_SECRET_ACCESS_KEY
: سر مفتاح المصادقة
USERMEDIA_S3_SIGNING_ENDPOINT_URL
: نقطة نهاية خدمة التخزين التي يمكن الوصول إليها بشكل عام
USERMEDIA_S3_REGION_NAME
: منطقة حاوية التخزين
USERMEDIA_S3_STORAGE_BUCKET_NAME
: اسم حاوية التخزين
USERMEDIA_S3_LOCATION
: الموقع داخل المجموعة حيث يتم تحميل الملفات
يتمثل الاختلاف الأكبر مقارنة بتكوين AWS S3 في إضافة USERMEDIA_S3_SIGNING_ENDPOINT_URL
. إذا تم توفيره، فسيتم استخدامه عند إنشاء عناوين URL موقعة مسبقًا. يمكن استخدامه لتجاوز مجال CDN على سبيل المثال.
يعد تكوين قاعدة البيانات أمرًا سهلاً جدًا في حالة استخدام قاعدة بيانات محلية لا تتطلب SSL، ولكن قاعدة البيانات البعيدة عبر اتصالات SSL مدعومة أيضًا.
DATABASE_URL
: عنوان URL لقاعدة البيانات المطلوب استخدامه للاتصال بقاعدة البيانات
DB_CLIENT_CERT
: شهادة العميل المشفرة Base64 لاستخدامها في الاتصال بقاعدة البيانات. سيتم وضعها على client-cert.pem
DB_CLIENT_KEY
: مفتاح العميل المشفر Base64 لاستخدامه في الاتصال بقاعدة البيانات. سيتم وضعها على client-key.pem
DB_SERVER_CA
: خادم CA المشفر Base64 لاستخدامه في اتصال قاعدة البيانات. سيتم وضعها على server-ca.pem
يمكن الوصول إلى قاعدة البيانات المحلية الافتراضية التي تم تكوينها في docker-compose.yml
:
من Shell: docker compose exec db psql -U django
من المتصفح: انتقل إلى localhost:8080/?pgsql=db&username=django
واستخدم كلمة المرور django
يمكنك تمكين التخزين المؤقت للواجهة الخلفية لـ redis من خلال توفير عنوان URL لـ redis
REDIS_URL
: عنوان URL لقاعدة بيانات redis المراد استخدامه للتخزين المؤقت، على سبيل المثال redis://some-host:6379/0
يمكن تشغيل الاختبارات باستخدام هذا الأمر: docker compose exec django pytest
إذا كنت بحاجة إلى إعادة إنشاء قاعدة البيانات، فاستخدم ما يلي: docker compose exec django pytest --create-db --migrations
يتحقق خط أنابيب CI من أن المستفيدين الرئيسيين الجدد لا يقللون من تغطية الاختبار. نظرًا لأن هذه العملية بطيئة إلى حد ما، فقد ترغب في التحقق من التغطية محليًا قبل إرسال العلاقات العامة.
لتحديث ملف التغطية، قم بتشغيل docker compose exec django coverage run -m pytest
لرؤية تقرير التغطية، قم بتشغيل docker compose exec django coverage report -m
يتم تقسيم التشغيل الاختباري عبر عدة عاملين في مسار CI، ويهدف التقسيم إلى موازنة الاختبار عبر جميع العمال المتاحين بكميات متساوية من استهلاك الوقت.
لكي تتمكن من القيام بذلك بدقة، يجب أن تكون قاعدة بيانات مدة الاختبار محدثة. على هذا النحو، من الجيد تحديث قاعدة بيانات مدة الاختبار بين الحين والآخر.
يمكن تحديث قاعدة بيانات مدة الاختبار عن طريق تشغيل مجموعة الاختبار الكاملة باستخدام علامة --store-durations
. لذلك سيكون مثال الأمر الكامل
عامل ميناء يؤلف exec django pytest --store-durations