
Um back-end totalmente baseado em assíncrona para bate-papo corajoso. É um servidor de vários modelos que é totalmente funcional e suporta todos os recursos usuais do aplicativo de mensagens, como mensagens individuais (privadas) e salas. Ele permite que os usuários enviem mensagens de texto e multimídia (por exemplo, imagens). Além disso, os usuários podem criar, unir e sair livremente e deixar salas de bate -papo, onde todos podem enviar uma mensagem.
Este projeto suporta os seguintes recursos:

Este projeto usa um banco de dados relacional de vários modelos para armazenar informações sobre usuários. Cada registro em todas as tabela de dados pode ser considerado um registro de séries temporais, especialmente a tabela messages , dada a taxa de acesso de leitura e gravação, dada uma data de criação e data de atualização para cada registro.
Além disso, uma pesquisa básica de texto está sendo implementada para preencher a visualização da lista de bate -papo e a visualização da lista de quartos. A visualização da lista de contatos suporta pesquisa de texto completo no primeiro nome, sobrenome e endereço de e-mail de um usuário.
Você pode consultar a documentação oficial para obter mais informações sobre o banco de dados e a arquitetura.
❯ 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. A melhor maneira de configurar, instalar as principais dependências e executar o projeto é usando make . Portanto, verifique se você make e configurado em sua máquina. Se não for o caso, acesse este thread no StackOverflow para instalá -lo no Windows ou este thread para instalá -lo no Mac OS.
Depois de make e configurado em sua máquina, agora você pode ser make no diretório raiz deste projeto para explorar diferentes comandos disponíveis para executar:
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 Nota : Este comando gerará automaticamente um arquivo .env de .env.example , desinstale a versão antiga da poesia em sua máquina e instale a versão 1.2.2 mais recente e instale as principais dependências necessárias.
Você pode consultar este tutorial para criar uma conta SingleStore e um banco de dados chat MySQL.
Preencha as seguintes variáveis de ambiente em seu arquivo .env de acordo:
# Database
SINGLESTORE_USERNAME=admin
SINGLESTORE_PASSWORD=<database password>
SINGLESTORE_HOST=<database name>
SINGLESTORE_PORT=3306
SINGLESTORE_DATABASE=<database name>Crie uma conta gratuita no Redis Cloud.
Defina as seguintes variáveis de ambiente em seu arquivo .env de acordo com suas credenciais de conta:
# 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 e profile-images enviadas a esta coleção para armazenar imagens e imagens de perfil enviadas em uma conversa. Defina a seguinte variável de ambiente em seu arquivo .env de acordo com o valor da chave dos dados:
# Deta
DETA_PROJECT_KEY=Gere uma chave secreta usando o OpenSSL e atualize seu Env var no arquivo .env.
openssl rand -hex 128
afa1639545d53ecf83c9f8acf4704abe1382f9a9dbf76d2fd229d4795a4748712dbfe7cf1f0a812f1c0fad2d47c8343cd1017b22fc3bf43d052307137f6ba68cd2cb69748b561df846873a6257e3569d6307a7e022b82b79cb3d6e0fee00553d80913c1dcf946e2e91e1dfcbba1ed9f34c9250597c1f70f572744e91c68cbe76 # App config:
JWT_SECRET_KEY=afa1639545d53ecf83c9f8acf4704abe1382f9a9dbf76d2fd229d4795a4748712dbfe7cf1f0a812f1c0fad2d47c8343cd1017b22fc3bf43d052307137f6ba68cd2cb69748b561df846873a6257e3569d6307a7e022b82b79cb3d6e0fee00553d80913c1dcf946e2e91e1dfcbba1ed9f34c9250597c1f70f572744e91c68cbe76make runNOTA : Você deve definir Debug = Info para acessar os documentos.
Primeiro, para executar toda a plataforma, você precisa clonar o submódulo brave-chat usando o seguinte comando:
git submodule update --init --recursiveUma vez feito isso, verifique se você compõe o V2 instalado e configurado em sua máquina e execute o comando a seguir para criar os serviços predefinidos do Docker (verifique se você tem um arquivo .env com antecedência):
Usando make
make buildou simplesmente correndo:
docker compose build
Uma vez feito isso, você pode aumentar os recipientes:
Usando make
make upou correndo:
docker compose up
Aguarde até que o atendimento ao cliente fique disponível:
brave-chat-server-client-1 | Starting the development server...
Você pode parar os contêineres em execução, mas emitindo o seguinte comando em uma sessão de terminal separada:
make down
http: // localhost: 8000/docs
http: // localhost: 8000/redocs
http: // localhost: 8000/métricas
http: // localhost: 3001
http: // localhost: 3000
Você precisará criar uma conta DETA para usar a versão de Deta das APIs.
Verifique se você está instalado na sua máquina. Se não for o caso, basta executar o seguinte comando (em uma distro ou Mac Linux):
curl -fsSL https://get.deta.dev/space-cli.sh | sh Adicione manualmente /home/<user_name>/.detaspace/bin ao seu caminho:
export PATH= " /home/<user_name>/.detaspace/bin: $PATH "Você pode executar o seguinte comando para configurar um novo ambiente espacial Deta:
make create-detaGere um novo token de acesso e cole -o no seu terminal:
Você precisa anexar run: uvicorn main:app até o final do seu arquivo de Spacefile :
sed -i ' $ a run: uvicorn main:app ' SpacefileAgora, você pode implantá -lo no DetA Space:
make deploy-detaEm seguida, você pode usar a interface do usuário do Deta para verificar os logs e o URL em que a API está hospedada.
Notas :
Verifique se o seu arquivo .env está sendo fornecido com valores válidos de env vars de acordo.
O arquivo main.py é usado como ponto de entrada para o Deta. O mesmo vale para requirements.txt .
Este botão implantará apenas o servidor.
Observe que essa abordagem não é perfeita porque, no Docker World, você deve ter apenas um serviço para cada contêiner e deve usar o Docker-Compose para construir e executar mais de dois contêineres (por exemplo, um para o servidor e o outro para o cliente). No entanto, a Heroku não suporta o Docker-Compose com vários serviços (exceto bancos de dados e outros.). Portanto, executando os dois serviços em um contêiner.
Para fazer isso, verifique se você já instalou e configurou a CLI Heroku em sua máquina. Se não for o caso, você pode instalá -lo no Ubuntu usando o seguinte comando:
sudo wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | shAgora, você precisa instalar o plugin de registro de contêineres Heroku:
heroku plugins:install heroku-container-registryUma vez concluído, faça login no seu registro:
heroku container:loginAgora, crie um aplicativo Heroku:
heroku create < a unique app name >Você pode listar todos os seus aplicativos para verificar se seu aplicativo recente foi criado:
heroku apps Defina suas variáveis Env no arquivo .env .
Construa a imagem do seu contêiner:
docker compose -f heroku-compose.yml buildImplantar para Heroku:
heroku container:push web --app < your heroku app name > ; heroku logs --tailDepois que a construção e o empurrão são concluídas, você pode executar o seguinte comando em um shell separado para interagir com o aplicativo:
heroku open --app= < your app name >Você pode se referir ao Heroku Dev Center para obter mais informações. Feliz Herokuing!
Este projeto usa o WebSockets, que infelizmente não são suportados pelas funções sem servidor da Vercel.
Infelizmente, este projeto usa o WebSockets, que não é suportado pelas funções sem servidor do Netlify.
Além disso, a execução de um aplicativo FASTAPI não é possível no Netlify porque o aplicativo consiste em renderização do lado do servidor. Atualmente, a renderização do lado do cliente é permitida no Netlify, o que significa que você pode implantar sites gerados estaticamente apenas como os documentos. Tentei invadir o caminho, criando uma função sem servidor que executa uvicorn main:app --reload em segundo plano. No entanto, a função sem servidor está sendo implantada em um ambiente diferente.
Os pacotes a seguir são as principais dependências usadas para construir este projeto:
pythonfastapiuvicornpydanticSQLAlchemyPyJWTpasslibaiomysqlaioredispython-multipartdeta-pythonprometheus-fastapi-instrumentator Este projeto está aberto para qualquer pessoa contribuir:
Este projeto e os materiais que o acompanham são disponibilizados nos termos e condições da MIT LICENSE .