7 Commits

Author SHA1 Message Date
d241581856 Stupid Caddyfile 2026-02-04 22:21:43 -06:00
ddcf2b3634 Update to new stoat name new docker config options 2026-02-04 22:11:11 -06:00
bd354e4e29 Added docker-compose.yml 2026-02-04 22:06:37 -06:00
490ff5686a Add .env 2026-02-04 22:05:55 -06:00
stoat-tofu[bot]
340484159e chore: modify .github/workflows/validate-pr-title.yml 2025-11-14 20:25:00 +00:00
Declan Chidlow
31ff9e81c0 chore: move to latest stoat stuff 2025-10-06 09:59:17 +08:00
Declan Chidlow
1a426356b5 docs: Switch name to Stoat 2025-10-06 09:03:07 +08:00
6 changed files with 259 additions and 29 deletions

2
.env Normal file
View File

@@ -0,0 +1,2 @@
HOSTNAME=http://local.revolt.chat
REVOLT_PUBLIC_URL=http://local.revolt.chat/api

20
.github/workflows/validate-pr-title.yml vendored Normal file
View File

@@ -0,0 +1,20 @@
name: "Lint PR"
on:
pull_request_target:
types:
- opened
- reopened
- edited
- synchronize
jobs:
main:
name: Validate PR title
runs-on: ubuntu-latest
permissions:
pull-requests: read
steps:
- uses: amannn/action-semantic-pull-request@v6
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -27,5 +27,12 @@
}
}
route /gifbox* {
uri strip_prefix /gifbox
reverse_proxy http://gifbox:14706 {
header_down Location "^/" "/gifbox/"
}
}
reverse_proxy http://web:5000
}

View File

@@ -1,6 +1,6 @@
<div align="center">
<h1>
Revolt Self-Hosted
Stoat Self-Hosted
[![Stars](https://img.shields.io/github/stars/revoltchat/self-hosted?style=flat-square&logoColor=white)](https://github.com/revoltchat/self-hosted/stargazers)
[![Forks](https://img.shields.io/github/forks/revoltchat/self-hosted?style=flat-square&logoColor=white)](https://github.com/revoltchat/self-hosted/network/members)
@@ -9,20 +9,20 @@
[![Contributors](https://img.shields.io/github/contributors/revoltchat/self-hosted?style=flat-square&logoColor=white)](https://github.com/revoltchat/self-hosted/graphs/contributors)
[![License](https://img.shields.io/github/license/revoltchat/self-hosted?style=flat-square&logoColor=white)](https://github.com/revoltchat/self-hosted/blob/main/LICENSE)
</h1>
Self-hosting Revolt using Docker
Self-hosting Stoat using Docker
</div>
<br/>
This repository contains configurations and instructions that can be used for deploying Revolt.
This repository contains configurations and instructions that can be used for deploying a full instance of Stoat, including the back-end, web front-end, file server, and metadata and image proxy.
> [!WARNING]
> If you are updating an instance from before November 28, 2024, please see the [notices section](#notices) at the bottom of this README!
> If you are updating an instance from before November 28, 2024, please consult the [notices section](#notices) at the bottom.
> [!IMPORTANT]
> A list of security advisories is [provided at the bottom](#security-advisories).
> [!NOTE]
> Please consult _[What can I do with Revolt, and how do I self-host?](https://developers.revolt.chat/faq.html#admonition-what-can-i-do-with-revolt-and-how-do-i-self-host)_ on our developer site for information about licensing and brand use.
> Please consult _[What can I do with Stoat, and how do I self-host?](https://developers.revolt.chat/faq.html#admonition-what-can-i-do-with-revolt-and-how-do-i-self-host)_ on our developer site for information about licensing and brand use.
> [!NOTE]
> amd64 builds are not currently available for the web client.
@@ -31,6 +31,7 @@ This repository contains configurations and instructions that can be used for de
> This guide does not include working voice channels ([#138](https://github.com/revoltchat/self-hosted/pull/138#issuecomment-2762682655)). A [rework](https://github.com/revoltchat/backend/issues/313) is currently in progress.
## Table of Contents
- [Deployment](#deployment)
- [Updating](#updating)
- [Advanced Deployment](#advanced-deployment)
@@ -137,11 +138,11 @@ apt-get update
apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
```
Now, we can pull in the configuration for Revolt:
Now, we can pull in the configuration for Stoat:
```bash
git clone https://github.com/revoltchat/self-hosted revolt
cd revolt
git clone https://github.com/revoltchat/self-hosted stoat
cd stoat
```
Generate a configuration file by running:
@@ -164,7 +165,7 @@ If you'd like to edit the configuration, just run:
micro Revolt.toml
```
Finally, we can start up Revolt. First, run it in the foreground with:
Finally, we can start up Stoat. First, run it in the foreground with:
```bash
docker compose up
@@ -212,8 +213,8 @@ Prerequisites before continuing:
Clone this repository.
```bash
git clone https://github.com/revoltchat/self-hosted revolt
cd revolt
git clone https://github.com/revoltchat/self-hosted stoat
cd stoat
```
Create `.env.web` and download `Revolt.toml`, then modify them according to your requirements.
@@ -222,12 +223,12 @@ Create `.env.web` and download `Revolt.toml`, then modify them according to your
> The default configurations are intended exclusively for testing and will only work locally. If you wish to deploy to a remote server, you **must** edit the URLs in `.env.web` and `Revolt.toml`. Please reference the section below on [configuring a custom domain](#custom-domain).
```bash
echo "HOSTNAME=http://local.revolt.chat" > .env.web
echo "REVOLT_PUBLIC_URL=http://local.revolt.chat/api" >> .env.web
echo "HOSTNAME=http://local.stoat.chat" > .env.web
echo "REVOLT_PUBLIC_URL=http://local.stoat.chat/api" >> .env.web
wget -O Revolt.toml https://raw.githubusercontent.com/revoltchat/backend/main/crates/core/config/Revolt.toml
```
Then start Revolt:
Then start Stoat:
```bash
docker compose up -d
@@ -244,21 +245,22 @@ chmod +x ./generate_config.sh
./generate_config.sh your.domain
```
Or alternatively do it manually, you will need to replace *all* instances of `local.revolt.chat` in `Revolt.toml` and `.env.web` to your chosen domain (here represented as `example.com`), like so:
Or alternatively do it manually, you will need to replace _all_ instances of `local.stoat.chat` in `Revolt.toml` and `.env.web` to your chosen domain (here represented as `example.com`), like so:
```diff
# .env.web
- REVOLT_PUBLIC_URL=http://local.revolt.chat/api
- REVOLT_PUBLIC_URL=http://local.stoat.chat/api
+ REVOLT_PUBLIC_URL=http://example.com/api
```
```diff
# Revolt.toml
- app = "http://local.revolt.chat"
- app = "http://local.stoat.chat"
+ app = "http://example.com"
```
In the case of `HOSTNAME`, you must strip the protocol prefix:
```diff
# .env.web
- HOSTNAME=http://example.com
@@ -284,7 +286,7 @@ You will likely also want to change the protocols to enable HTTPS:
### Placing Behind Another Reverse-Proxy or Another Port
If you'd like to place Revolt behind another reverse proxy or on a non-standard port, you'll need to edit `compose.yml`.
If you'd like to place Stoat behind another reverse proxy or on a non-standard port, you'll need to edit `compose.yml`.
Override the port definitions on `caddy`:
@@ -352,14 +354,14 @@ db.invites.insertOne({ _id: "enter_an_invite_code_here" })
## Notices
> [!IMPORTANT]
> If you deployed Revolt before [2022-10-29](https://github.com/minio/docs/issues/624#issuecomment-1296608406), you may have to tag the `minio` image release if it's configured in "fs" mode.
> If you deployed Stoat before [2022-10-29](https://github.com/minio/docs/issues/624#issuecomment-1296608406), you may have to tag the `minio` image release if it's configured in "fs" mode.
>
> ```yml
> image: minio/minio:RELEASE.2022-10-24T18-35-07Z
> ```
> [!IMPORTANT]
> If you deployed Revolt before [2023-04-21](https://github.com/revoltchat/backend/commit/32542a822e3de0fc8cc7b29af46c54a9284ee2de), you may have to flush your Redis database.
> If you deployed Stoat before [2023-04-21](https://github.com/revoltchat/backend/commit/32542a822e3de0fc8cc7b29af46c54a9284ee2de), you may have to flush your Redis database.
>
> ```bash
> # for stock Redis and older KeyDB images:
@@ -403,15 +405,16 @@ db.invites.insertOne({ _id: "enter_an_invite_code_here" })
> [!IMPORTANT]
> As of November 28, 2024, the following breaking changes have been applied:
>
> - Rename config section `api.vapid` -> `pushd.vapid`
> - Rename config section `api.fcm` -> `pushd.fcm`
> - Rename config section `api.apn` -> `pushd.apn`
>
> These will NOT automatically be applied to your config and must be changed/added manually.
>
>
> The following components have been added to the compose file:
> - Added `rabbit` (RabbitMQ) and `pushd` (Revolt push daemon)
>
> - Added `rabbit` (RabbitMQ) and `pushd` (Stoat push daemon)
## Security Advisories

View File

@@ -1,4 +1,4 @@
name: revolt
name: stoat
services:
# MongoDB: Database
@@ -73,7 +73,7 @@ services:
# API server
api:
image: ghcr.io/revoltchat/server:20250210-1
image: ghcr.io/revoltchat/server:20250930-2
depends_on:
database:
condition: service_healthy
@@ -89,7 +89,7 @@ services:
# Events service
events:
image: ghcr.io/revoltchat/bonfire:20250210-1
image: ghcr.io/revoltchat/bonfire:20250930-2
depends_on:
database:
condition: service_healthy
@@ -109,7 +109,7 @@ services:
# File server
autumn:
image: ghcr.io/revoltchat/autumn:20250210-1
image: ghcr.io/revoltchat/autumn:20250930-2
depends_on:
database:
condition: service_healthy
@@ -123,7 +123,16 @@ services:
# Metadata and image proxy
january:
image: ghcr.io/revoltchat/january:20250210-1
image: ghcr.io/revoltchat/january:20250930-2
volumes:
- type: bind
source: ./Revolt.toml
target: /Revolt.toml
restart: always
# Tenor proxy
gifbox:
image: ghcr.io/revoltchat/gifbox:20250930-2
volumes:
- type: bind
source: ./Revolt.toml
@@ -132,7 +141,7 @@ services:
# Regular task daemon
crond:
image: ghcr.io/revoltchat/crond:20250210-1-debug
image: ghcr.io/revoltchat/crond:20250930-2
depends_on:
database:
condition: service_healthy
@@ -146,7 +155,7 @@ services:
# Push notification daemon
pushd:
image: ghcr.io/revoltchat/pushd:20250210-1
image: ghcr.io/revoltchat/pushd:20250930-2
depends_on:
database:
condition: service_healthy

189
docker-compose.yml Normal file
View File

@@ -0,0 +1,189 @@
name: stoat
services:
# MongoDB: Database
database:
image: docker.io/mongo
restart: always
volumes:
- ./data/db:/data/db
healthcheck:
test: echo 'db.runCommand("ping").ok' | mongosh localhost:27017/test --quiet
interval: 10s
timeout: 10s
retries: 5
start_period: 10s
# Redis: Event message broker & KV store
redis:
image: docker.io/eqalpha/keydb
restart: always
# RabbitMQ: Internal message broker
rabbit:
image: docker.io/rabbitmq:4
restart: always
environment:
RABBITMQ_DEFAULT_USER: rabbituser
RABBITMQ_DEFAULT_PASS: rabbitpass
volumes:
- ./data/rabbit:/var/lib/rabbitmq
healthcheck:
test: rabbitmq-diagnostics -q ping
interval: 10s
timeout: 10s
retries: 3
start_period: 20s
# MinIO: S3-compatible storage server
minio:
image: docker.io/minio/minio
command: server /data
volumes:
- ./data/minio:/data
environment:
MINIO_ROOT_USER: minioautumn
MINIO_ROOT_PASSWORD: minioautumn
MINIO_DOMAIN: minio
networks:
default:
aliases:
- revolt-uploads.minio
# legacy support:
- attachments.minio
- avatars.minio
- backgrounds.minio
- icons.minio
- banners.minio
- emojis.minio
restart: always
# Caddy: Web server
caddy:
image: docker.io/caddy
restart: always
environment:
- HOSTNAME=${HOSTNAME}
- REVOLT_PUBLIC_URL={REVOLT_PUBLIC_URL}
ports:
- "8880:80"
- "8443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./data/caddy-data:/data
- ./data/caddy-config:/config
# API server
api:
image: ghcr.io/revoltchat/server:20250930-2
depends_on:
database:
condition: service_healthy
redis:
condition: service_started
rabbit:
condition: service_healthy
volumes:
- type: bind
source: ./Revolt.toml
target: /Revolt.toml
restart: always
# Events service
events:
image: ghcr.io/revoltchat/bonfire:20250930-2
depends_on:
database:
condition: service_healthy
redis:
condition: service_started
volumes:
- type: bind
source: ./Revolt.toml
target: /Revolt.toml
restart: always
# Web App
web:
image: ghcr.io/revoltchat/client:master
restart: always
environment:
- HOSTNAME=${HOSTNAME}
- REVOLT_PUBLIC_URL={REVOLT_PUBLIC_URL}
# File server
autumn:
image: ghcr.io/revoltchat/autumn:20250930-2
depends_on:
database:
condition: service_healthy
createbuckets:
condition: service_started
volumes:
- type: bind
source: ./Revolt.toml
target: /Revolt.toml
restart: always
# Metadata and image proxy
january:
image: ghcr.io/revoltchat/january:20250930-2
volumes:
- type: bind
source: ./Revolt.toml
target: /Revolt.toml
restart: always
# Tenor proxy
gifbox:
image: ghcr.io/revoltchat/gifbox:20250930-2
volumes:
- type: bind
source: ./Revolt.toml
target: /Revolt.toml
restart: always
# Regular task daemon
crond:
image: ghcr.io/revoltchat/crond:20250930-2
depends_on:
database:
condition: service_healthy
minio:
condition: service_started
volumes:
- type: bind
source: ./Revolt.toml
target: /Revolt.toml
restart: always
# Push notification daemon
pushd:
image: ghcr.io/revoltchat/pushd:20250930-2
depends_on:
database:
condition: service_healthy
redis:
condition: service_started
rabbit:
condition: service_healthy
volumes:
- type: bind
source: ./Revolt.toml
target: /Revolt.toml
restart: always
# Create buckets for minio.
createbuckets:
image: docker.io/minio/mc
depends_on:
- minio
entrypoint: >
/bin/sh -c "
while ! /usr/bin/mc ready minio; do
/usr/bin/mc alias set minio http://minio:9000 minioautumn minioautumn;
echo 'Waiting minio...' && sleep 1;
done;
/usr/bin/mc mb minio/revolt-uploads;
exit 0;
"