
Backend berbasis async sepenuhnya untuk obrolan berani. Ini adalah server multi-model yang berfungsi penuh dan mendukung semua kemampuan aplikasi pesan yang biasa, seperti satu-satu (pribadi) dan pesan kamar. Ini memungkinkan pengguna untuk mengirim pesan teks dan multimedia (misalnya gambar). Juga, pengguna dapat dengan bebas membuat, bergabung, dan meninggalkan ruang obrolan di mana semua orang dapat saling mengirim pesan.
Proyek ini mendukung fitur -fitur berikut:

Proyek ini menggunakan database relasional multi-model untuk menyimpan informasi tentang pengguna. Setiap catatan di setiap tabel data dapat dianggap sebagai catatan deret waktu, terutama tabel messages yang diberikan laju akses baca dan tulis, diberikan tanggal pembuatan dan tanggal pembaruan untuk setiap catatan.
Selain itu, pencarian teks dasar sedang diimplementasikan untuk mengisi tampilan daftar obrolan dan tampilan daftar kamar. Tampilan Daftar Kontak mendukung pencarian teks lengkap pada nama depan, nama belakang, dan alamat email pengguna.
Anda dapat merujuk pada dokumentasi resmi untuk informasi lebih lanjut tentang database dan arsitektur.
❯ 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. Cara terbaik untuk mengonfigurasi, menginstal dependensi utama, dan menjalankan proyek adalah dengan menggunakan make . Jadi, pastikan Anda telah make dan dikonfigurasi di mesin Anda. Jika bukan masalahnya, buka utas ini di StackOverflow untuk menginstalnya di Windows, atau utas ini untuk menginstalnya di Mac OS.
Setelah make dan dikonfigurasi pada mesin Anda, Anda sekarang dapat menjalankan make di bawah direktori root proyek ini untuk menjelajahi berbagai perintah yang tersedia untuk dijalankan:
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 Catatan : Perintah ini akan secara otomatis menghasilkan file .env dari .env.example , hapus instalasi versi lama puisi di mesin Anda, lalu instal versi 1.2.2 terbaru, dan instal dependensi utama yang diperlukan.
Anda dapat merujuk ke tutorial ini untuk membuat akun Singlestore dan database chat MySQL.
Isi variabel lingkungan berikut dalam file .env Anda sesuai:
# Database
SINGLESTORE_USERNAME=admin
SINGLESTORE_PASSWORD=<database password>
SINGLESTORE_HOST=<database name>
SINGLESTORE_PORT=3306
SINGLESTORE_DATABASE=<database name>Buat akun gratis di redis cloud.
Tetapkan variabel lingkungan berikut dalam file .env Anda sesuai dengan kredensial akun Anda:
# 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 dan profile-images , ke koleksi ini untuk menyimpan gambar dan gambar profil yang dikirim dalam percakapan. Atur variabel lingkungan berikut di file .env Anda sesuai dengan nilai kunci data Anda:
# Deta
DETA_PROJECT_KEY=Hasilkan kunci rahasia menggunakan OpenSSL dan perbarui env -nya var di file .env.
openssl rand -hex 128
afa1639545d53ecf83c9f8acf4704abe1382f9a9dbf76d2fd229d4795a4748712dbfe7cf1f0a812f1c0fad2d47c8343cd1017b22fc3bf43d052307137f6ba68cd2cb69748b561df846873a6257e3569d6307a7e022b82b79cb3d6e0fee00553d80913c1dcf946e2e91e1dfcbba1ed9f34c9250597c1f70f572744e91c68cbe76 # App config:
JWT_SECRET_KEY=afa1639545d53ecf83c9f8acf4704abe1382f9a9dbf76d2fd229d4795a4748712dbfe7cf1f0a812f1c0fad2d47c8343cd1017b22fc3bf43d052307137f6ba68cd2cb69748b561df846873a6257e3569d6307a7e022b82b79cb3d6e0fee00553d80913c1dcf946e2e91e1dfcbba1ed9f34c9250597c1f70f572744e91c68cbe76make runCatatan : Anda harus mengatur debug = info untuk mengakses dokumen.
Hal pertama yang pertama, untuk menjalankan seluruh platform, Anda harus mengkloning submodule brave-chat menggunakan perintah berikut:
git submodule update --init --recursiveSetelah selesai, pastikan Anda telah menyusun V2 yang diinstal dan dikonfigurasi pada mesin Anda, dan jalankan perintah berikut untuk membangun layanan Docker yang telah ditentukan sebelumnya (pastikan Anda memiliki file .env sebelumnya):
Menggunakan make
make buildatau hanya menjalankan:
docker compose build
Setelah selesai, Anda dapat memutar wadah:
Menggunakan make
make upatau menjalankan:
docker compose up
Tunggu sampai layanan klien tersedia:
brave-chat-server-client-1 | Starting the development server...
Anda dapat menghentikan wadah yang sedang berjalan tetapi mengeluarkan perintah berikut pada sesi terminal terpisah:
make down
http: // localhost: 8000/docs
http: // localhost: 8000/redocs
http: // localhost: 8000/metrik
http: // localhost: 3001
http: // localhost: 3000
Anda harus membuat akun DESA untuk menggunakan versi API Deta.
Pastikan Anda memiliki deta cli yang diinstal di mesin Anda. Jika bukan masalahnya, cukup jalankan perintah berikut (pada distro Linux atau Mac):
curl -fsSL https://get.deta.dev/space-cli.sh | sh Tambahkan /home/<user_name>/.detaspace/bin <user_name> secara manual secara manual
export PATH= " /home/<user_name>/.detaspace/bin: $PATH "Anda dapat menjalankan perintah berikut untuk mengatur lingkungan ruang deta baru:
make create-detaHasilkan token akses baru dan tempel ke terminal Anda:
Anda perlu menambahkan run: uvicorn main:app ke akhir file Spacefile Anda:
sed -i ' $ a run: uvicorn main:app ' SpacefileSekarang, Anda dapat menggunakannya di ruang deta:
make deploy-detaAnda kemudian dapat menggunakan Deta UI untuk memeriksa log dan URL API dihosting.
Catatan :
Pastikan file .env Anda disediakan dengan nilai VAR VARI yang valid sesuai.
File main.py digunakan sebagai titik masuk untuk Deta. Hal yang sama berlaku untuk requirements.txt .
Tombol ini hanya akan menggunakan server.
Perhatikan bahwa pendekatan ini tidak sempurna karena di dunia Docker, Anda seharusnya hanya memiliki satu layanan untuk setiap wadah, dan Anda harus menggunakan komposisi Docker untuk membangun dan menjalankan lebih dari dua kontainer (misalnya satu untuk server dan yang lain untuk klien). Namun, Heroku tidak mendukung komposisi Docker dengan banyak layanan (kecuali database dan semacamnya.). Karenanya menjalankan kedua layanan dalam satu wadah.
Untuk melakukannya, pastikan Anda telah menginstal dan mengonfigurasi Heroku CLI di mesin Anda. Jika bukan masalahnya, Anda dapat menginstalnya di Ubuntu menggunakan perintah berikut:
sudo wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | shSekarang, Anda perlu menginstal plugin Heroku Container Registry:
heroku plugins:install heroku-container-registrySetelah selesai, masuk ke registri Anda:
heroku container:loginSekarang, buat aplikasi Heroku:
heroku create < a unique app name >Anda dapat mendaftarkan semua aplikasi Anda untuk memverifikasi bahwa aplikasi terbaru Anda telah dibuat:
heroku apps Atur variabel Env Anda di file .env .
Bangun gambar wadah Anda:
docker compose -f heroku-compose.yml buildDigerikan ke Heroku:
heroku container:push web --app < your heroku app name > ; heroku logs --tailSetelah build dan dorongan selesai, Anda dapat menjalankan perintah berikut dalam shell terpisah untuk berinteraksi dengan aplikasi:
heroku open --app= < your app name >Anda dapat merujuk ke Heroku Dev Center untuk info lebih lanjut. Selamat Herokuing!
Proyek ini menggunakan WebSockets, yang sayangnya tidak didukung oleh fungsi tanpa server Vercel.
Sayangnya, proyek ini menggunakan WebSockets, yang tidak didukung oleh fungsi tanpa server Netlify.
Selain itu, menjalankan aplikasi FASTAPI tidak dimungkinkan di Netlify karena aplikasi terdiri dari rendering sisi server. Hanya rendering sisi klien yang saat ini diizinkan di Netlify, yang berarti Anda hanya dapat menggunakan situs web yang dihasilkan secara statis seperti dokumen. Saya mencoba meretas jalan saya dengan membuat fungsi tanpa server yang mengeksekusi uvicorn main:app --reload di latar belakang. Namun, fungsi tanpa server sedang digunakan di lingkungan yang berbeda.
Paket -paket berikut adalah dependensi utama yang digunakan untuk membangun proyek ini:
pythonfastapiuvicornpydanticSQLAlchemyPyJWTpasslibaiomysqlaioredispython-multipartdeta-pythonprometheus-fastapi-instrumentator Proyek ini terbuka bagi siapa saja untuk berkontribusi:
Proyek ini dan bahan yang menyertainya tersedia berdasarkan syarat dan ketentuan MIT LICENSE .