
勇敢なチャット用の完全な非同期ベースのバックエンド。これは完全に機能し、1対1(プライベート)やルームメッセージなどの通常のメッセージングアプリ機能をすべてサポートするマルチモデルサーバーです。ユーザーはテキストとマルチメディアメッセージ(画像など)を送信できます。また、ユーザーは、誰もがお互いにメッセージを送ることができるチャットルームを自由に作成、参加、離れることができます。
このプロジェクトは、次の機能をサポートしています。

このプロジェクトでは、マルチモデルリレーショナルデータベースを使用して、ユーザーに関する情報を保存します。すべてのデータテーブルの各レコードは、時系列のレコード、特に各レコードの作成日と更新日が与えられた読み取りおよび書き込みアクセスのレートが与えられた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実行して、実行するさまざまなコマンドを検討できるようになりました。
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.exampleから.envファイルを自動的に生成し、マシンに古いバージョンの詩をアンインストールしてから、最新バージョン1.2.2をインストールし、必要なメイン依存関係をインストールします。
このチュートリアルを参照して、SinglestoreアカウントとMySQL chatデータベースを作成できます。
それに応じて.ENVファイルの次の環境変数を入力してください。
# Database
SINGLESTORE_USERNAME=admin
SINGLESTORE_PASSWORD=<database password>
SINGLESTORE_HOST=<database name>
SINGLESTORE_PORT=3306
SINGLESTORE_DATABASE=<database name>Redisクラウドで無料アカウントを作成します。
アカウントの資格情報に従って、.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 、つまり、会話で送信されたプロフィール画像と画像を保存する2つのドライブを添付します。データキー値に従って、 .envファイルに次の環境変数を設定します。
# Deta
DETA_PROJECT_KEY=openSSLを使用してシークレットキーを生成し、.envファイルでenv varを更新します。
openssl rand -hex 128
afa1639545d53ecf83c9f8acf4704abe1382f9a9dbf76d2fd229d4795a4748712dbfe7cf1f0a812f1c0fad2d47c8343cd1017b22fc3bf43d052307137f6ba68cd2cb69748b561df846873a6257e3569d6307a7e022b82b79cb3d6e0fee00553d80913c1dcf946e2e91e1dfcbba1ed9f34c9250597c1f70f572744e91c68cbe76 # App config:
JWT_SECRET_KEY=afa1639545d53ecf83c9f8acf4704abe1382f9a9dbf76d2fd229d4795a4748712dbfe7cf1f0a812f1c0fad2d47c8343cd1017b22fc3bf43d052307137f6ba68cd2cb69748b561df846873a6257e3569d6307a7e022b82b79cb3d6e0fee00553d80913c1dcf946e2e91e1dfcbba1ed9f34c9250597c1f70f572744e91c68cbe76make run注:ドキュメントにアクセスするには、 debug = infoを設定する必要があります。
まず、プラットフォーム全体を実行するには、次のコマンドを使用してbrave-chatサブモジュールをクローンする必要があります。
git submodule update --init --recursiveそれが完了したら、マシンにインストールされて構成されているV2を作成し、次のコマンドを実行して事前定義されたDockerサービスを構築します(事前に.ENVファイルがあることを確認してください):
MAKEを使用します
make buildまたは単に実行する:
docker compose build
それが完了したら、コンテナをスピンアップできます。
MAKEを使用します
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/metrics
http:// localhost:3001
http:// localhost:3000
DETAバージョンのAPIを使用するには、DETAアカウントを作成する必要があります。
マシンにDeta CLIがインストールされていることを確認してください。そうでない場合は、次のコマンドを実行するだけです(LinuxディストリビューションまたはMacで):
curl -fsSL https://get.deta.dev/space-cli.sh | sh手動で/home/<user_name>/.detaspace/binをパスに追加します:
export PATH= " /home/<user_name>/.detaspace/bin: $PATH "次のコマンドを実行して、新しいDETAスペース環境を設定できます。
make create-deta新しいアクセストークンを生成し、端末に貼り付けます。
実行する必要があります:uvicorn main: Spacefileファイルの最後までrun: uvicorn main:app :
sed -i ' $ a run: uvicorn main:app ' Spacefileこれで、Deta Spaceに展開できます。
make deploy-detaその後、DETA UIを使用してログとURLを確認できます。APIはホストされています。
注:
.envファイルが有効なENV VARS値をそれに応じて提供されていることを確認してください。
main.pyファイルは、DETAのエントリポイントとして使用されます。 requirements.txtについても同じことが言えます。txt。
このボタンはサーバーのみを展開します。
Dockerの世界では、各コンテナに1つのサービスのみが必要であり、Docker-Composeを使用して3つ以上のコンテナ(1つはサーバー用、もう1つはクライアント用)を構築して実行する必要があるため、このアプローチは完全ではないことに注意してください。ただし、Herokuは複数のサービス(データベースなどを除く)でDocker-Composeをサポートしていません。したがって、両方のサービスを1つのコンテナで実行します。
そのために、マシンに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 buildHerokuに展開:
heroku container:push web --app < your heroku app name > ; heroku logs --tailビルドとプッシュが完了したら、次のコマンドを別のシェルで実行してアプリと対話できます。
heroku open --app= < your app name >詳細については、Heroku Dev Centerを参照できます。ハッピーヘロック!
このプロジェクトでは、Vercelのサーバーレス関数によってサポートされていないWebSocketsを使用しています。
残念ながら、このプロジェクトはWebSocketsを使用していますが、これはNetlifyのサーバーレス機能によってサポートされていません。
さらに、アプリはサーバー側のレンダリングで構成されているため、NetlifyでFastAPIアプリを実行することは不可能です。現在、Netlifyではクライアント側のレンダリングのみが許可されています。つまり、ドキュメントのような静的に生成されたWebサイトのみを展開できます。 uvicorn main:app --reloadすることで、自分の道をハッキングしようとしました。ただし、サーバーレス関数は別の環境で展開されています。
次のパッケージは、このプロジェクトの構築に使用される主な依存関係です。
pythonfastapiuvicornpydanticSQLAlchemyPyJWTpasslibaiomysqlaioredispython-multipartdeta-pythonprometheus-fastapi-instrumentator このプロジェクトは、誰でも貢献するために開かれています:
このプロジェクトと付随する資料はMIT LICENSEの条件の下で利用可能になります。