mirror of
https://github.com/stoatchat/stoatchat.git
synced 2026-07-14 21:47:02 +00:00
* feat: create base of push daemon Signed-off-by: IAmTomahawkx <iamtomahawkx@gmail.com> * Add outbound senders * Make web_push send to rabbit instead (temp stuff) * feat: stability and friend requests * make vapid fr stuff not suck * swap naming of queue * move pushd into daemons folder * fix cargo file for move into daemons folder * feat: probably working fcm push notifs * comment out fcm webpush stuff since the config keys dont exist * fix fcm, name queues according to their prod status and configure routing keys * add pushd to docker * mix: Remove old code, add stuff to pushd * fix: lockfile * feat: update rocket to 5.0.1 * fix: fix queues and ack bugs * Move rabbit messsage processing into ack queue * chore: update readme * chore: optimizations for ack database hits * pushd flowchart * misc: update flowchart * exit dependancy hell * add rocket_impl flag to authifier * make the tests file of delta actually compile * fix: don't silence every push message * fix: don't silence all messages * add debug logging for sending data to rabbit from message events * validate mentions at a server membership level * put back that import that was actually important * minor fix to lockfile * update delta authifier * feat: proper permissions for push notifications * add unit test for mention sanitization * remove local file dependancy on authifier * update ports to proper defaults * fixTM the node bindings * Theoretically configure docker releases for pushd Signed-off-by: IAmTomahawkx <iamtomahawkx@gmail.com> * declare exchange in pushd and delta * fix createbuckets script Signed-off-by: IAmTomahawkx <iamtomahawkx@gmail.com> * fix: reference db implementation Signed-off-by: IAmTomahawkx <iamtomahawkx@gmail.com> * fix: remove finally redundant code Signed-off-by: IAmTomahawkx <iamtomahawkx@gmail.com> * fix: changes Signed-off-by: IAmTomahawkx <iamtomahawkx@gmail.com> * fix: other changes Signed-off-by: IAmTomahawkx <iamtomahawkx@gmail.com> * fix: make channel name return result Signed-off-by: IAmTomahawkx <iamtomahawkx@gmail.com> --------- Signed-off-by: IAmTomahawkx <iamtomahawkx@gmail.com>
188 lines
11 KiB
Markdown
188 lines
11 KiB
Markdown
<div align="center">
|
|
<h1>
|
|
Revolt Backend
|
|
|
|
[](https://github.com/revoltchat/backend/stargazers)
|
|
[](https://github.com/revoltchat/backend/network/members)
|
|
[](https://github.com/revoltchat/backend/pulls)
|
|
[](https://github.com/revoltchat/backend/issues)
|
|
[](https://github.com/revoltchat/backend/graphs/contributors)
|
|
[](https://github.com/revoltchat/backend/blob/main/LICENSE)
|
|
</h1>
|
|
The services and libraries that power the Revolt service.<br/>
|
|
<br/>
|
|
|
|
| Crate | Path | Description | |
|
|
| ------------------ | -------------------------------------------------- | ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
| `core/config` | [crates/core/config](crates/core/config) | Core: Configuration |     |
|
|
| `core/database` | [crates/core/database](crates/core/database) | Core: Database Implementation |     |
|
|
| `core/files` | [crates/core/files](crates/core/files) | Core: S3 and encryption subroutines |     |
|
|
| `core/models` | [crates/core/models](crates/core/models) | Core: API Models |     |
|
|
| `core/permissions` | [crates/core/permissions](crates/core/permissions) | Core: Permission Logic |     |
|
|
| `core/presence` | [crates/core/presence](crates/core/presence) | Core: User Presence |     |
|
|
| `core/result` | [crates/core/result](crates/core/result) | Core: Result and Error types |     |
|
|
| `delta` | [crates/delta](crates/delta) | REST API server |  |
|
|
| `bonfire` | [crates/bonfire](crates/bonfire) | WebSocket events server |  |
|
|
| `services/january` | [crates/services/january](crates/services/january) | Proxy server |  |
|
|
| `services/autumn` | [crates/services/autumn](crates/services/autumn) | File server |  |
|
|
| `bindings/node` | [crates/bindings/node](crates/bindings/node) | Node.js bindings for the Revolt software |  |
|
|
| `daemons/pushd` | [crates/daemons/pushd](crates/daemons/pushd) | Push notification daemon server |  |
|
|
|
|
</div>
|
|
<br/>
|
|
|
|
## Minimum Supported Rust Version
|
|
|
|
Rust 1.76 or higher.
|
|
|
|
> [!CAUTION]
|
|
> The events server has a significant performance regression between Rust 1.77.2 and 1.78.0 onwards, see [issue #341](https://github.com/revoltchat/backend/issues/341).
|
|
|
|
## Development Guide
|
|
|
|
Before contributing, make yourself familiar with [our contribution guidelines](https://developers.revolt.chat/contrib.html) and the [technical documentation for this project](https://revoltchat.github.io/backend/).
|
|
|
|
Before getting started, you'll want to install:
|
|
|
|
- Rust toolchain (rustup recommended)
|
|
- Docker
|
|
- Git
|
|
- mold (optional, faster compilation)
|
|
|
|
> A **default.nix** is available for Nix users!
|
|
> Just run `nix-shell` and continue.
|
|
|
|
As a heads-up, the development environment uses the following ports:
|
|
|
|
| Service | Port |
|
|
| ------------------------- | :------------: |
|
|
| MongoDB | 27017 |
|
|
| Redis | 6379 |
|
|
| MinIO | 14009 |
|
|
| Maildev | 14025<br>14080 |
|
|
| Revolt Web App | 14701 |
|
|
| RabbitMQ | 5672<br>15672 |
|
|
| `crates/delta` | 14702 |
|
|
| `crates/bonfire` | 14703 |
|
|
| `crates/services/autumn` | 14704 |
|
|
| `crates/services/january` | 14705 |
|
|
|
|
Now you can clone and build the project:
|
|
|
|
```bash
|
|
git clone https://github.com/revoltchat/backend revolt-backend
|
|
cd revolt-backend
|
|
cargo build
|
|
```
|
|
|
|
A default configuration `Revolt.toml` is present in this project that is suited for development.
|
|
|
|
If you'd like to change anything, create a `Revolt.overrides.toml` file and specify relevant variables.
|
|
|
|
> [!TIP]
|
|
> Use Sentry to catch unexpected service errors:
|
|
>
|
|
> ```toml
|
|
> # Revolt.overrides.toml
|
|
> [sentry]
|
|
> api = "https://abc@your.sentry/1"
|
|
> events = "https://abc@your.sentry/1"
|
|
> files = "https://abc@your.sentry/1"
|
|
> proxy = "https://abc@your.sentry/1"
|
|
> ```
|
|
|
|
Then continue:
|
|
|
|
```bash
|
|
# start other necessary services
|
|
docker compose up -d
|
|
|
|
# run everything together
|
|
./scripts/start.sh
|
|
# .. or individually
|
|
# run the API server
|
|
cargo run --bin revolt-delta
|
|
# run the events server
|
|
cargo run --bin revolt-bonfire
|
|
# run the file server
|
|
cargo run --bin revolt-autumn
|
|
# run the proxy server
|
|
cargo run --bin revolt-january
|
|
# run the push daemon (not usually needed in regular development)
|
|
cargo run --bin revolt-pushd
|
|
|
|
# hint:
|
|
# mold -run <cargo build, cargo run, etc...>
|
|
# mold -run ./scripts/start.sh
|
|
```
|
|
|
|
You can start a web client by doing the following:
|
|
|
|
```bash
|
|
# if you do not have yarn yet and have a modern Node.js:
|
|
corepack enable
|
|
|
|
# clone the web client and run it:
|
|
git clone --recursive https://github.com/revoltchat/revite
|
|
cd revite
|
|
yarn
|
|
yarn build:deps
|
|
echo "VITE_API_URL=http://local.revolt.chat:14702" > .env.local
|
|
yarn dev --port 14701
|
|
```
|
|
|
|
Then go to http://local.revolt.chat:14701 to create an account/login.
|
|
|
|
When signing up, go to http://localhost:14080 to find confirmation/password reset emails.
|
|
|
|
## Deployment Guide
|
|
|
|
### Cutting new crate releases
|
|
|
|
Begin by bumping crate versions:
|
|
|
|
```bash
|
|
just patch # 0.0.X
|
|
just minor # 0.X.0
|
|
just major # X.0.0
|
|
```
|
|
|
|
Then commit the changes to package files.
|
|
|
|
Proceed to publish all the new crates:
|
|
|
|
```bash
|
|
just publish
|
|
```
|
|
|
|
### Cutting new binary releases
|
|
|
|
Tag and push a new release by running:
|
|
|
|
```bash
|
|
just release
|
|
```
|
|
|
|
If you have bumped the crate versions, proceed to [GitHub releases](https://github.com/revoltchat/backend/releases/new) to create a changelog.
|
|
|
|
## Testing
|
|
|
|
First, start the required services:
|
|
|
|
```sh
|
|
docker compose -f docker-compose.db.yml up -d
|
|
```
|
|
|
|
Now run tests for whichever database:
|
|
|
|
```sh
|
|
TEST_DB=REFERENCE cargo nextest run
|
|
TEST_DB=MONGODB cargo nextest run
|
|
```
|
|
|
|
## License
|
|
|
|
The Revolt backend is generally licensed under the [GNU Affero General Public License v3.0](https://github.com/revoltchat/backend/blob/master/LICENSE).
|
|
|
|
**Individual crates may supply their own licenses!**
|