Stash-box هو خادم مفتوح المصدر لفهرسة الفيديو وواجهة برمجة التطبيقات للبيانات الوصفية للإباحية تم تطويره بواسطة Stash App. الغرض من stash-box هو توفير قاعدة بيانات مجتمعية للبيانات الوصفية الإباحية، على غرار ما يفعله MusicBrainz للموسيقى. يجب أن يتبع تقديم البيانات الوصفية وتحريرها نفس مبادئ MusicBrainz. تعلم المزيد هنا. سيؤدي تثبيت Stash-box إلى إنشاء قاعدة بيانات فارغة لتتمكن من ملؤها.
إذا كنت من مستخدمي Stash، فلن تحتاج إلى تثبيت Stash-box. يمتلك مجتمع Stash خادمًا به العديد من العناوين التي يمكنك سحب البيانات منها. يمكنك الحصول على معلومات تسجيل الدخول من دليلنا للوصول إلى StashDB.
يمكنك العثور على ملف docker-compose
لنشر الإنتاج هنا. يمكنك حذف Traefik إذا كنت لا تحتاج إلى وكيل عكسي.
إذا كان PostgreSQL مثبتًا لديك بالفعل، فيمكنك تثبيت stash-box بمفرده من Docker Hub.
يدعم Stash-box أنظمة التشغيل Mac وWindows وLinux. يمكن العثور على الإصدارات لنظامي التشغيل Windows وLinux هنا.
make
لإنشاء التطبيق.stash-box-config.yml
في الدليل الحالي). في هذه الحالة، سيتم إنشاء ملف تكوين افتراضي بسلسلة اتصال PostgreSQL افتراضية ( postgres@localhost/stash-box?sslmode=disable
). يمكنك ضبط سلسلة الاتصال حسب الحاجة.CREATE EXTENSION pg_trgm; CREATE EXTENSION pgcrypto;
بواسطة مستخدم متميز قبل إعادة تشغيل Stash-box. إذا لم يكن المخطط موجودًا، فسيتم إنشاؤه داخل قاعدة البيانات.sslmode
هنا. استخدم sslmode=disable
لعدم استخدام SSL للاتصال بقاعدة البيانات. الافتراضي هو require
. في المرة الثانية التي يتم فيها تشغيل stash-box، سيقوم stash-box بتشغيل عمليات ترحيل المخطط لإنشاء الجداول المطلوبة. سيقوم أيضًا بإنشاء مستخدم root
بكلمة مرور عشوائية ومفتاح API. تتم طباعة بيانات الاعتماد هذه مرة واحدة على stdout ولا يتم تسجيلها. سيقوم النظام بإعادة إنشاء المستخدم الجذر عند بدء التشغيل إذا لم يكن موجودًا. يمكنك إجبار النظام على إنشاء مستخدم جذر جديد عن طريق حذف صف المستخدم الجذر من قاعدة البيانات وإعادة تشغيل Stash-box. ستحتاج إلى التقاط مخرجات وحدة التحكم مع المستخدم المسؤول لديك في أول بداية ناجحة قابلة للتنفيذ لـ StashDB. بخلاف ذلك، ستحتاج إلى السماح لـ Postgres بإعادة إنشاء قاعدة البيانات قبل أن تقوم بإعادة نشر مستخدم root
جديد.
Stash-box هي أداة تحتوي على خيارات سطر الأوامر لتسهيل الأمر. لمعرفة الخيارات المتاحة، قم بتشغيل stash-box --help
في جهازك الطرفي.
فيما يلي مثال لكيفية تشغيل stash-box محليًا على المنفذ 80:
stash-box --host 127.0.0.1 --port 80
ملاحظة: يجب أن يعمل هذا الأمر على OSX/Linux.
عند بدء تشغيل stash-box لأول مرة، فإنه يقوم بإنشاء ملف تكوين يسمى stash-box-config.yml
في دليل العمل الحالي لديك. يحتوي هذا الملف على الإعدادات الافتراضية لـ stash-box، بما في ذلك:
0.0.0.0
9998
يمكنك تغيير هذه الإعدادات الافتراضية إذا لزم الأمر. على سبيل المثال، إذا كنت تريد تعطيل ملعب GraphQL وملفات تعريف الارتباط عبر النطاقات، فيمكنك تعيين is_production
على true
.
هناك طريقتان لمصادقة مستخدم في Stash-box: جلسة أو مفتاح API.
المصادقة المستندة إلى الجلسة: لتسجيل الدخول، أرسل طلبًا إلى /login
باستخدام username
وكلمة password
بنص عادي كقيم نموذج. ستقوم المصادقة المستندة إلى الجلسة بتعيين ملف تعريف الارتباط المطلوب لجميع الطلبات اللاحقة. لتسجيل الخروج، أرسل طلبًا إلى /logout
.
مصادقة مفتاح API: لاستخدام مفتاح API، قم بتعيين رأس ApiKey
على قيمة مفتاح API الخاص بالمستخدم.
مفتاح | تقصير | وصف |
---|---|---|
title | Stash-Box | عنوان المثيل، المستخدم في عنوان الصفحة. |
require_invite | true | إذا كان هذا صحيحًا، يُطلب من المستخدمين إدخال مفتاح دعوة، تم إنشاؤه بواسطة المستخدمين الحاليين لإنشاء حساب جديد. |
require_activation | false | إذا كان هذا صحيحًا، يُطلب من المستخدمين التحقق من عنوان بريدهم الإلكتروني قبل إنشاء حساب. يتطلب تعيين email_from و email_host و host_url . |
activation_expiry | 7200 (ساعتان) | الوقت - بالثواني - الذي تنتهي بعده صلاحية مفتاح التنشيط (الذي يتم إرساله عبر البريد الإلكتروني إلى المستخدم لأغراض التحقق من البريد الإلكتروني أو إعادة تعيين كلمة المرور). |
email_cooldown | 300 (5 دقائق) | الوقت - بالثواني - الذي يجب على المستخدم انتظاره قبل إرسال طلب التنشيط أو إعادة تعيين كلمة المرور لعنوان بريد إلكتروني محدد. |
default_user_roles | READ VOTE EDIT | الأدوار المخصصة للمستخدمين الجدد عند التسجيل. يجب التعبير عن هذا الحقل كمصفوفة yaml. |
guidelines_url | (لا أحد) | عنوان URL للربط بمجموعة من الإرشادات للمستخدمين المساهمين بالتعديلات. يجب أن يكون على شكل https://hostname.com . |
vote_promotion_threshold | (لا أحد) | عدد التعديلات المعتمدة قبل أن يتم تعيين دور VOTE للمستخدم تلقائيًا. اتركه فارغًا للتعطيل. |
vote_application_threshold | 3 | عدد الأصوات نفسها المطلوبة للتطبيق الفوري للتعديل. اضبط على الصفر لتعطيل التطبيق التلقائي. |
voting_period | 345600 | الوقت بالثواني قبل إغلاق فترة التصويت. |
min_destructive_voting_period | 172800 | الحد الأدنى من الوقت، بالثواني، الذي يجب أن يمر قبل أن يتم تطبيق التعديل المدمر على الفور بأصوات إيجابية كافية. |
vote_cron_interval | 5m | الوقت بين عمليات التشغيل لإغلاق التعديلات التي انتهت فترات التصويت فيها. |
email_host | (لا أحد) | عنوان خادم SMTP. مطلوب لإرسال رسائل البريد الإلكتروني لأغراض التنشيط والاسترداد. |
email_port | 25 | منفذ خادم SMTP. يتم دعم STARTTLS فقط. اتصالات TLS المباشرة غير مدعومة. |
email_user | (لا أحد) | اسم المستخدم لخادم SMTP. خياري. |
email_password | (لا أحد) | كلمة المرور لخادم SMTP. خياري. |
email_from | (لا أحد) | عنوان البريد الإلكتروني الذي سيتم إرسال رسائل البريد الإلكتروني منه. |
host_url | (لا أحد) | عنوان URL الأساسي للخادم. يستخدم عند إرسال رسائل البريد الإلكتروني. يجب أن يكون على شكل https://hostname.com . |
image_location | (لا أحد) | مسار لتخزين الصور، لتخزين الصور المحلية. سيتم عرض خطأ إذا لم يتم تعيين هذا عند إنشاء صور غير URL. |
image_backend | ( file ) | حل تخزين للصور. يمكن ضبطه على file أو s3 . |
userLogFile | (لا أحد) | المسار إلى ملف سجل المستخدم، الذي يسجل عمليات المستخدم. إذا لم يتم تعيينها، فسيتم إخراجها إلى stderr. |
s3.endpoint | (لا أحد) | اسم المضيف لنقطة نهاية s3 المستخدمة لتخزين الصور. |
s3.base_url | (لا أحد) | عنوان URL الأساسي للوصول إلى الصور في S3. يجب أن يكون على شكل https://hostname.com . |
s3.bucket | (لا أحد) | اسم دلو S3 المستخدم لتخزين الصور. |
s3.access_key | (لا أحد) | مفتاح الوصول المستخدم للمصادقة. |
s3.secret | (لا أحد) | مفتاح الوصول السري المستخدم للمصادقة. |
s3.max_dimension | (لا أحد) | في حالة التعيين، سيتم إنشاء نسخة تم تغيير حجمها لأي صورة تتجاوز أبعادها هذا الرقم. سيتم تقديم هذه النسخة بدلاً من النسخة الأصلية. |
s3.upload_headers | (لا أحد) | خريطة للعناوين التي سيتم إرسالها مع كل طلب تحميل. على سبيل المثال، يتطلب DigitalOcean تعيين رأس x-amz-acl على public-read وإلا فإنه لا يجعل الصور التي تم تحميلها متاحة. |
phash_distance | 0 | يحدد المسافة الثنائية التي تعتبر مطابقة عند الاستعلام باستخدام بصمة pHash. لا ينصح باستخدام أكثر من 8 وقد يؤدي إلى كميات كبيرة من النتائج الإيجابية الكاذبة. ملحوظة : يجب تثبيت الامتداد pg-spgist_hamming لاستخدام مطابقة المسافة، وإلا فسوف تحصل على أخطاء. |
favicon_path | (لا أحد) | الموقع الذي يجب أن يتم فيه تخزين الأيقونات المفضلة للمواقع المرتبطة. اتركه فارغًا للتعطيل. |
draft_time_limit | (24 ساعة) | الوقت بالثواني قبل حذف المسودة. |
profiler_port | 0 | المنفذ الذي سيتم تقديم مخرجات pprof عليه. حذف لتعطيل تماما. |
postgres.max_open_conns | (0) | الحد الأقصى لعدد الاتصالات المفتوحة المتزامنة بقاعدة البيانات. |
postgres.max_idle_conns | (0) | الحد الأقصى لعدد اتصالات قاعدة البيانات الخاملة المتزامنة. |
postgres.conn_max_lifetime | (0) | الحد الأقصى للمدة بالدقائق قبل تحرير الاتصال. |
يمكن تشغيل Stash-box، ويفضل أن يكون عبر HTTPS، لمزيد من الأمان، ولكنه يتطلب بعض الإعداد. ستحتاج إلى إنشاء شهادة SSL وزوج المفاتيح لإعداد ذلك. أو استخدم وكيل إنهاء TLS من اختيارك، مثل Traefik أو Nginx (غير مدعوم) أو Caddy Server (غير مدعوم)
فيما يلي مثال لكيفية القيام بذلك باستخدام OpenSSL:
openssl req -x509 -newkey rsa:4096 -sha256 -days 7300 -nodes -keyout stash-box.key -out stash-box.crt -extensions san -config <(echo "[req]"; echo distinguished_name=req; echo "[san]"; echo subjectAltName=DNS:stash-box.server,IP:127.0.0.1) -subj /CN=stash-box.server
قد تحتاج إلى تعديل الأمر الخاص بإعدادك المحدد. يمكنك العثور على مزيد من المعلومات حول إنشاء شهادة موقعة ذاتيًا باستخدام OpenSSL هنا.
بمجرد إنشاء الشهادة وزوج المفاتيح، تأكد من تسميتهما stash-box.crt
و stash-box.key
على التوالي، ثم ضعهما في نفس الدليل مثل stash-box. عندما يكتشف Stash-box هذه الملفات، فإنه سيستخدم HTTPS بدلاً من HTTP.
إذا كنت تريد تمكين مطابقة المسافة لـ pHashes في stash-box، فستحتاج إلى تثبيت ملحق pg-spgist_hamming Postgres.
الطريقة الموصى بها للقيام بذلك هي استخدام صورة عامل الإرساء. ومع ذلك، يمكنك أيضًا تثبيته يدويًا باتباع تعليمات الإنشاء الموجودة في مستودع pg-spgist_hamming.
لنفترض أنك قمت بتثبيت الامتداد بعد تشغيل عمليات الترحيل. في هذه الحالة، ستحتاج إلى تشغيل الترحيل رقم 14 يدويًا لتثبيت الامتداد وإضافة الفهرس. إذا كنت لا تريد القيام بذلك، يمكنك مسح قاعدة البيانات، وسيتم تشغيل عمليات الترحيل في المرة التالية التي تبدأ فيها stashbox.
make lint
.make generate
- إنشاء ملفات Go GraphQL. يجب تشغيل هذا الأمر إذا تغير مخطط GraphQL.make ui
- يبني واجهة المستخدم.make pre-ui
- تنزيل تبعيات الواجهة الأماميةmake build
- يبني الثنائيmake test
- تشغيل اختبارات الوحدةmake it
- يقوم بتشغيل اختبارات الوحدة والتكاملmake lint
- قم بتشغيل الوبرmake fmt
- تنسيق ومحاذاة المسافات البيضاء ملاحظة: يتم إجراء اختبارات التكامل على قاعدة بيانات sqlite3 مؤقتة بشكل افتراضي. يمكن تشغيلها على خادم Postgres عن طريق تعيين متغير البيئة POSTGRES_DB
إلى سلسلة اتصال Postgres. على سبيل المثال: postgres@localhost/stash-box-test?sslmode=disable
. انتبه إلى أن اختبارات التكامل تسقط جميع الجداول قبل الاختبارات وبعدها.
لتشغيل الواجهة الأمامية في وضع التطوير، قم بتشغيل yarn start
من دليل الواجهة الأمامية.
عند التطوير، يمكن تعيين مفتاح API في frontend/.env.development.local
لتجنب الاضطرار إلى تسجيل الدخول.
عندما يتم تمكين is_production
على الخادم، فهذه هي الطريقة الوحيدة للتفويض في بيئة تطوير الواجهة الأمامية. إذا كان الخادم يستخدم https أو يعمل على منفذ مخصص، فيجب أيضًا تكوين ذلك في .env.development.local
.
راجع frontend/.env.development.local.shadow
للحصول على أمثلة.
يمكنك الوصول إلى ملعب GraphQL على host:port/playground
، ويمكن العثور على واجهة GraphQL على host:port/graphql
. لتنفيذ الاستعلامات، قم بإضافة رأس بمفتاح API الخاص بك: {"APIKey":"<API_KEY>"}
. يمكن العثور على مفتاح واجهة برمجة التطبيقات (API) على صفحة المستخدم الخاصة بك في stash-box.
make generate
لإنشاء الملفات التي تم إنشاؤها إذا تم تغييرها.make ui build
لإنشاء الملف القابل للتنفيذ لنظامك الأساسي الحالي.لدي سؤال يحتاج إلى إجابة هنا.