
الواجهة الخلفية القائمة على التزامن بالكامل للدردشة الشجاعة. إنه خادم متعدد النماذج يعمل بكامل طاقته ويدعم جميع إمكانيات تطبيقات المراسلة المعتادة ، مثل On-on-One (الخاص) ورسائل الغرف. يمكّن المستخدمين من إرسال رسائل نصية ووسائط متعددة (مثل الصور). أيضًا ، يمكن للمستخدمين إنشاء غرف الدردشة والانضمام إليها وتركها بحرية حيث يمكن للجميع إرسال رسالة إلى بعضهم البعض.
يدعم هذا المشروع الميزات التالية:

يستخدم هذا المشروع قاعدة بيانات علائقية متعددة الطراز لتخزين المعلومات حول المستخدمين. يمكن اعتبار كل سجل في كل جدول بيانات سجل سلسلة زمنية ، وخاصة جدول messages بالنظر إلى معدل القراءة والوصول إلى الكتابة ، بالنظر إلى تاريخ إنشاء وتاريخ التحديث لكل سجل.
بالإضافة إلى ذلك ، يتم تنفيذ البحث عن النص الأساسي لملء عرض قائمة الدردشة وعرض قائمة الغرفة. تدعم عرض قائمة جهات الاتصال البحث عن النص الكامل على الاسم الأول للمستخدم واسمه الأخير وعنوان البريد الإلكتروني.
يمكنك الرجوع إلى الوثائق الرسمية لمزيد من المعلومات حول قاعدة البيانات والهندسة المعمارية.
❯ tree app .
├── auth # Package contains different config files for the `auth` app.
│ ├── crud.py # Module contains different CRUD operations performed on the database.
│ ├── models.py # Module contains different data models for ORM to interact with database.
│ ├── router.py # Module contains different routes for this api.
│ └── schemas.py # Module contains different schemas for this api for validation purposes.
├── chats # Package contains different config files for the `chats` app.
│ ├── crud.py # Module contains different CRUD operations performed on the database.
│ ├── models.py # Module contains different data models for ORM to interact with database.
│ ├── router.py # Module contains different routes for this api.
│ └── schemas.py # Module contains different schemas for this api for validation purposes.
├── config.py # Module contains the main configuration settings for project.
├── contacts # Package contains different config files for the `contacts` app.
│ ├── crud.py # Module contains different CRUD operations performed on the database.
│ ├── models.py # Module contains different data models for ORM to interact with the database.
│ ├── router.py # Module contains different routes for this api.
│ └── schemas.py # Module contains different schemas for this api for validation purposes.
├── __init__.py
├── main.py # Startup script. Starts uvicorn.
├── rooms # Package contains different config files for the `rooms` app.
│ ├── crud.py # Module contains different CRUD operations performed on the database.
│ ├── models.py # Module contains different models for ORMs to inteact with database..
│ ├── router.py # Module contains different routes for this api.
│ └── schemas.py # Module contains different schemas for this api for validation purposes.
├── users # Package contains different config files for the `users` app.
│ ├── crud.py # Module contains different CRUD operations performed on the database.
│ ├── models.py # Module contains different models for ORMs to inteact with database..
│ ├── router.py # Module contains different routes for this api.
│ └── schemas.py # Module contains different schemas for this api for validation purposes.
├── utils # Package contains different common utility modules for the whole project.
│ ├── constants.py
│ ├── crypt_util.py
│ ├── db_utils.py # A utility script that create, drop a test database used in the tests package.
│ ├── dependencies.py # A utility script that yield a session for each request to make the crud call work.
│ ├── engine.py # A utility script that initialize two sqlalchemy engines and set them as app state variables.
│ ├── full_text_search.py # A utility script to make sqlalchemy and singlestore compatible for implementing full text search on a given table.
│ ├── jwt_util.py # A utility script for JWT.
│ ├── mixins.py # A utility script that contains common mixins for different models.
│ └── pub_sub_handlers.py # A utility script that contains publishers and consumers handlers for the redis queue.
└── web_sockets # Package contains different config files for the `web_sockets` app.
└── router.py # Module contains different routes for the websockets. أفضل طريقة لتكوين وتثبيت التبعيات الرئيسية وتشغيل المشروع هي باستخدام make . لذلك ، تأكد من make وتكوين على جهازك. إذا لم يكن الأمر كذلك ، فتوجه إلى هذا الموضوع على Stackoverflow لتثبيته على Windows ، أو هذا الموضوع لتثبيته على Mac OS.
بعد make تثبيت وتكوينه على جهازك ، يمكنك الآن تشغيل make Under the Root Directory لهذا المشروع لاستكشاف الأوامر المتاحة المختلفة التي يتم تشغيلها:
make
Please use ' make <target> ' where < target > is one of:
venv Create a virtual environment
install Install the package and all required core dependencies
run Running the app locally
create-deta Set up a new Deta Space environment
deploy-deta Deploy the app on a Deta Micro
clean Remove all build, test, coverage and Python artifacts
lint Check style with pre-commit
test Run tests quickly with pytest
test-all Run tests on every Python version with tox
coverage Check code coverage quickly with the default Python
build Build docker containers services
up Spin up the containers
down Stop all running containersmake venv source .venv/bin/activatemake install ملاحظة : سيقوم هذا الأمر تلقائيًا بإنشاء ملف .env من .env.example ، وإلغاء تثبيت الإصدار القديم من الشعر على جهازك ، ثم قم بتثبيت أحدث الإصدار 1.2.2 ، وتثبيت التبعيات الرئيسية المطلوبة.
يمكنك الرجوع إلى هذا البرنامج التعليمي لإنشاء حساب Singlestore وقاعدة بيانات chat MySQL.
املأ متغيرات البيئة التالية في ملف .env الخاص بك وفقًا لذلك:
# Database
SINGLESTORE_USERNAME=admin
SINGLESTORE_PASSWORD=<database password>
SINGLESTORE_HOST=<database name>
SINGLESTORE_PORT=3306
SINGLESTORE_DATABASE=<database name>قم بإنشاء حساب مجاني على Redis Cloud.
قم بتعيين متغيرات البيئة التالية في ملف .env الخاص بك وفقًا لبيانات اعتماد حسابك:
# REDIS
# USER IN REDIS CLOUD
REDIS_USERNAME=default
# DATABASE PASSWORD
REDIS_PASSWORD=<database password>
# REDIS HOST
REDIS_HOST=<redis url>
# REDIS PORT
REDIS_PORT=15065sent-images وصور profile-images ، إلى هذه المجموعة لتخزين الصور والصور المرسلة في محادثة. قم بتعيين متغير البيئة التالي في ملف .env الخاص بك وفقًا لقيمة مفتاح البيانات الخاصة بك:
# Deta
DETA_PROJECT_KEY=قم بإنشاء مفتاح سري باستخدام OpenSSL وتحديث Env var في ملف .env.
openssl rand -hex 128
afa1639545d53ecf83c9f8acf4704abe1382f9a9dbf76d2fd229d4795a4748712dbfe7cf1f0a812f1c0fad2d47c8343cd1017b22fc3bf43d052307137f6ba68cd2cb69748b561df846873a6257e3569d6307a7e022b82b79cb3d6e0fee00553d80913c1dcf946e2e91e1dfcbba1ed9f34c9250597c1f70f572744e91c68cbe76 # App config:
JWT_SECRET_KEY=afa1639545d53ecf83c9f8acf4704abe1382f9a9dbf76d2fd229d4795a4748712dbfe7cf1f0a812f1c0fad2d47c8343cd1017b22fc3bf43d052307137f6ba68cd2cb69748b561df846873a6257e3569d6307a7e022b82b79cb3d6e0fee00553d80913c1dcf946e2e91e1dfcbba1ed9f34c9250597c1f70f572744e91c68cbe76make runملاحظة : يجب عليك تعيين Debug = معلومات للوصول إلى المستندات.
أول شيء أولاً ، لتشغيل النظام الأساسي بأكمله ، يجب عليك استنساخ الجهاز الفرعي brave-chat باستخدام الأمر التالي:
git submodule update --init --recursiveبمجرد الانتهاء من ذلك ، تأكد من تثبيت V2 وتكوينه على جهازك ، وقم بتشغيل الأمر التالي لإنشاء خدمات Docker المحددة مسبقًا (تأكد من أن لديك ملف .env مسبقًا):
باستخدام صنع
make buildأو مجرد الجري:
docker compose build
بمجرد الانتهاء من ذلك ، يمكنك تدوير الحاويات:
باستخدام صنع
make upأو الجري:
docker compose up
انتظر حتى تتوفر خدمة العميل:
brave-chat-server-client-1 | Starting the development server...
يمكنك إيقاف حاويات التشغيل ولكن إصدار الأمر التالي في جلسة طرفية منفصلة:
make down
http: // localhost: 8000/docs
http: // localhost: 8000/redocs
http: // localhost: 8000/مقاييس
http: // localhost: 3001
http: // localhost: 3000
ستحتاج إلى إنشاء حساب deta لاستخدام إصدار deta من واجهات برمجة التطبيقات.
تأكد من تثبيت Deta CLI على جهازك. إذا لم يكن الأمر كذلك ، فما عليك سوى تشغيل الأمر التالي (على توزيع Linux أو Mac):
curl -fsSL https://get.deta.dev/space-cli.sh | sh إضافة يدويًا /home/<user_name>/.detaspace/bin /.detaspace/bin إلى طريقك:
export PATH= " /home/<user_name>/.detaspace/bin: $PATH "يمكنك تشغيل الأمر التالي لإعداد بيئة فضاء جديدة:
make create-detaقم بإنشاء رمز وصول جديد ولصقه في المحطة الخاصة بك:
تحتاج إلى إلحاق run: uvicorn main:app حتى نهاية ملف Spacefile الخاص بك:
sed -i ' $ a run: uvicorn main:app ' Spacefileالآن ، يمكنك نشره على مساحة deta:
make deploy-detaيمكنك بعد ذلك استخدام DeTa UI للتحقق من السجلات ويتم استضافة عنوان URL على واجهة برمجة التطبيقات.
ملحوظات :
تأكد من تزويد ملف .env الخاص بك بقيم env vars صالحة وفقًا لذلك.
يتم استخدام ملف main.py كنقطة دخول لـ DETA. الشيء نفسه ينطبق على requirements.txt .
هذا الزر سوف ينشر الخادم فقط.
لاحظ أن هذا النهج ليس مثاليًا لأنه في عالم Docker ، يجب أن يكون لديك خدمة واحدة فقط لكل حاوية ، ويجب عليك استخدام Docker-Compose لبناء وتشغيل أكثر من حاوية (على سبيل المثال واحدة للخادم والآخر للعميل). ومع ذلك ، لا يدعم Heroku Docker-Compose مع خدمات متعددة (باستثناء قواعد البيانات وكذا.). وبالتالي تشغيل كلتا الخدمتين في حاوية واحدة.
للقيام بذلك ، تأكد من تثبيت وتكوين Heroku CLI بالفعل على جهازك. إذا لم يكن الأمر كذلك ، فيمكنك تثبيته على Ubuntu باستخدام الأمر التالي:
sudo wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | shالآن ، تحتاج إلى تثبيت البرنامج المساعد Heroku Container:
heroku plugins:install heroku-container-registryبمجرد اكتمال ذلك ، قم بتسجيل الدخول إلى السجل الخاص بك:
heroku container:loginالآن ، قم بإنشاء تطبيق Heroku:
heroku create < a unique app name >يمكنك سرد جميع تطبيقاتك للتحقق من إنشاء تطبيقك الأخير:
heroku apps اضبط متغيرات ENV في ملف .env .
بناء صورة الحاوية الخاصة بك:
docker compose -f heroku-compose.yml buildانتشر إلى هيروكو:
heroku container:push web --app < your heroku app name > ; heroku logs --tailبمجرد اكتمال الإنشاء والدفع ، يمكنك تشغيل الأمر التالي في قذيفة منفصلة للتفاعل مع التطبيق:
heroku open --app= < your app name >يمكنك الرجوع إلى مركز Heroku Dev لمزيد من المعلومات. هيروكين سعيد!
يستخدم هذا المشروع WebSockets ، والتي لا تدعمها للأسف وظائف Vercel بدون خادم.
لسوء الحظ ، يستخدم هذا المشروع WebSockets ، والتي لا تدعمها وظائف NetLify بدون خادم.
بالإضافة إلى ذلك ، لا يمكن تشغيل تطبيق Fastapi على NetLify لأن التطبيق يتكون من عرض من جانب الخادم. يُسمح حاليًا بتقديم جانب العميل حاليًا على NetLify ، مما يعني أنه يمكنك فقط نشر مواقع الويب التي تم إنشاؤها بشكل ثابت مثل Docs. حاولت اختراق طريقي من خلال إنشاء وظيفة بدون خادم تنفذ uvicorn main:app --reload في الخلفية. ومع ذلك ، يتم نشر وظيفة الخادم في بيئة مختلفة.
الحزم التالية هي التبعيات الرئيسية المستخدمة لبناء هذا المشروع:
pythonfastapiuvicornpydanticSQLAlchemyPyJWTpasslibaiomysqlaioredispython-multipartdeta-pythonprometheus-fastapi-instrumentator هذا المشروع مفتوح لأي شخص للمساهمة:
يتم توفير هذا المشروع والمواد المصاحبة بموجب شروط وأحكام ترخيص MIT LICENSE .