Skip to content

revoltchat/self-hosted

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

65 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Revolt Self-Hosted

Stars Forks Pull Requests Issues Contributors License

Self-hosting Revolt using Docker

This repository contains configurations and instructions that can be used for deploying Revolt.

Note

Please consult 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 only available for backend and bonfire images currently, more to come.

Important

If you deployed Revolt before 2022-10-29, you may have to tag the minio image release if it's configured in "fs" mode.

image: minio/minio:RELEASE.2022-10-24T18-35-07Z

Important

If you deployed Revolt before 2023-04-21, you may have to flush your Redis database.

# for stock Redis and older KeyDB images:
docker compose exec redis redis-cli
# ...or for newer KeyDB images:
docker compose exec redis keydb-cli

# then run:
FLUSHDB

Quick Start

This repository provides reasonable defaults, so you can immediately get started with it on your local machine.

Warning

This is not fit for production usage; see below for the full guide.

git clone https://github.com/revoltchat/self-hosted revolt
cd revolt
cp .env.example .env
docker compose up

Now navigate to http://local.revolt.chat in your browser.

Production Setup

Prerequisites before continuing:

Clone this repository.

git clone https://github.com/revoltchat/self-hosted revolt
cd revolt

Copy .env and download Revolt.toml, then modify them according to your requirements.

Warning

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 and Revolt.toml. Please reference the section below on configuring a custom domain.

cp .env.example .env
wget -O Revolt.toml https://raw.githubusercontent.com/revoltchat/backend/main/crates/core/config/Revolt.toml

Then start Revolt:

docker compose up

Updating

Before updating, ensure you consult the notices at the top of this README to check if there are any important changes to be aware of.

Pull the latest version of this repository:

git pull

Then pull all the latest images:

docker compose pull

Then restart the services:

docker compose up

Additional Notes

Custom domain

To configure a custom domain, you will need to replace all instances of local.revolt.chat in the Revolt.toml and .env files, like so:

# .env
- REVOLT_APP_URL=http://local.revolt.chat
+ REVOLT_APP_URL=http://my.domain
# Revolt.toml
- app = "http://local.revolt.chat"
+ app = "http://my.domain"

You will also want to change the protocols to enable HTTPS:

# .env
- REVOLT_APP_URL=http://my.domain
+ REVOLT_APP_URL=https://my.domain

- REVOLT_EXTERNAL_WS_URL=ws://my.domain/ws
+ REVOLT_EXTERNAL_WS_URL=wss://my.domain/ws
# Revolt.toml
- app = "http://local.revolt.chat"
+ app = "https://my.domain"

- events = "ws://my.domain/ws"
+ events = "wss://my.domain/ws"

In the case of HOSTNAME, you must strip the protocol prefix:

# .env
- HOSTNAME=https://my.domain
+ HOSTNAME=my.domain

Putting Revolt behind another reverse proxy (or on a non-standard port)

Override the port definitions on caddy:

# compose.yml
services:
  caddy:
    ports:
      - "1234:80"

Warning

This file is not Git ignored. It may be sufficient to use an override file, but that will not remove port 80 / 443 allocations.

Update the hostname used by the web server:

# .env
- HOSTNAME=http://local.revolt.chat
+ HOSTNAME=:80

You can now reverse proxy to http://localhost:1234.

Insecurely expose database

You can insecurely expose the database by adding a port definition:

# compose.override.yml
services:
  database:
    ports:
      - "27017:27017"

Mongo compatibility

Older processors may not support the latest MongoDB version, you may pin to MongoDB 4.4 as such:

# compose.override.yml
services:
  database:
    image: mongo:4.4

Making your instance invite-only

Enable invite-only mode by setting REVOLT_INVITE_ONLY in .env to 1 and invite_only in Revolt.toml to true.

Create an invite:

# drop into mongo shell
docker compose exec database mongosh

# create the invite
use revolt
db.invites.insertOne({ _id: "enter_an_invite_code_here" })