聊天平台Revolt的搭建

news2024/11/22 22:28:49

在这里插入图片描述

经网友 凌尘 提醒,Web-Check 最新的镜像版本,容器端口已经从 8888 改为了 3000,特此更正!


什么是 Revolt ?

Revolt 是一个开源的用户至上的聊天平台。是在不牺牲任何可用性的情况下与朋友和社区保持联系的最佳方式之一,可以确保您的对话是保密的。

安装

在群晖上以 Docker 方式安装。

官方提供了 self-hostedrepo,地址在:https://github.com/revoltchat/self-hosted,但要在群晖上部署,还需要做一些微调,涉及到下面三个文件

docker-compose.yml

采用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

version: "3.8"

services:
  # MongoDB database
  database:
    image: mongo
    container_name: revolt-database
    restart: always
    volumes:
      - ./data:/data/db

  # Redis server
  redis:
    image: eqalpha/keydb
    container_name: revolt-redis
    restart: always

  # S3-compatible storage server
  minio:
    image: minio/minio
    container_name: revolt-minio
    command: server /data
    env_file: env.txt
    volumes:
      - ./minio:/data
    restart: always

  # Caddy web server
  caddy:
    image: caddy
    container_name: revolt-caddy
    restart: always
    env_file: env.txt
    ports:
      - "11080:80"
      - "11443:443"
    volumes:
      - ./caddyfile.txt:/etc/caddy/Caddyfile
      - ./caddy-data:/data
      - ./caddy-config:/config

  # API server (delta)
  api:
    image: ghcr.io/revoltchat/server
    container_name: revolt-api
    env_file: env.txt
    depends_on:
      - database
      - redis
      - caddy
    restart: always

  # Events service (quark)
  events:
    image: ghcr.io/revoltchat/bonfire
    container_name: revolt-events
    env_file: env.txt
    depends_on:
      - database
      - redis
      - caddy
    restart: always

  # Web App (revite)
  web:
    image: ghcr.io/revoltchat/client:master
    container_name: revolt-web
    env_file: env.txt
    depends_on:
      - caddy
    restart: always

  # File server (autumn)
  autumn:
    image: ghcr.io/revoltchat/autumn
    container_name: revolt-autumn
    env_file: env.txt
    depends_on:
      - database
      - createbuckets
      - caddy
    environment:
      - AUTUMN_MONGO_URI=mongodb://database
    restart: always

  # Metadata and image proxy (january)
  january:
    image: ghcr.io/revoltchat/january
    container_name: revolt-january
    depends_on:
      - caddy
    restart: always

  # Create buckets for minio.
  createbuckets:
    image: minio/mc
    container_name: revolt-mc
    depends_on:
      - minio
    env_file: env.txt
    entrypoint: >
      /bin/sh -c "
      while ! curl -s --output /dev/null --connect-timeout 1 http://minio:9000; do echo 'Waiting minio...' && sleep 0.1; done;
      /usr/bin/mc alias set minio http://minio:9000 $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD;
      /usr/bin/mc mb minio/attachments;
      /usr/bin/mc mb minio/avatars;
      /usr/bin/mc mb minio/backgrounds;
      /usr/bin/mc mb minio/icons;
      /usr/bin/mc mb minio/banners;
      /usr/bin/mc mb minio/emojis;
      exit 0;
      "

镜像下载

这里一共涉及到了 10 个镜像,其中一半发布在 hub.docker.com,另一半发布在 ghcr.io,老苏建议先用 docker pull 拉取镜像,然后再安装

ghcr.io可以试试 docker 代理网站,当然如果 hub.docker.com 下不动也是可以用代理网站的

代理网站的地址:https://dockerproxy.com/,会多几个步骤,但总比下不了强

镜像说明

  • mongoMongoDB数据库在某些不支持 AVX 指令集 的 CPU 上,会导致容器不断重启,如果你遇到,可以尝试改为 mongo:4.4
  • eqalpha/keydbRedis 服务主要将数据缓存到内存,提升性能;latest 对应的版本是 x86_64_v6.3.3
  • minio/minio:用于实现存储服务;latest 对应的版本是 RELEASE.2023-08-16T20-17-30Z
  • minio/mcMinIO Client 简称 mc,是 minio服务器的客户端;latest 对应的版本是 RELEASE.2023-08-15T23-03-09Z
  • caddy:提供Web 服务;latest 对应的版本是 2.7.4-alpine
  • ghcr.io/revoltchat/server:提供API 服务;latest 对应的版本是 20230810-3
  • ghcr.io/revoltchat/bonfire:提供事件服务;latest 对应的版本是 20230810-3
  • ghcr.io/revoltchat/autumn:提供文件服务;latest 对应的版本是 1.1.10
  • ghcr.io/revoltchat/january:提供代理服务;latest 对应的版本是 0.3.5
  • ghcr.io/revoltchat/client:master:提供 Web 应用;选择了 tagmatser 的版本,因为latest 的版本是一年前的;

整个文件中,只有访问的端口需要修改,和本地端口不冲突就行,不确定的话可以用命令查一下

# 查看端口占用
netstat -tunlp | grep 端口号

env.txt

为了便于在群晖的 File Station 中修改,老苏将 .env.example 重命名为了 env.txt 而不是 .env

##
## Quark configuration
##

# MongoDB
MONGODB=mongodb://database

# Redis
REDIS_URI=redis://redis/

# Hostname used for Caddy
# This should in most cases match REVOLT_APP_URL
#HOSTNAME=http://local.revolt.chat
HOSTNAME=:80

# URL to where the Revolt app is publicly accessible
REVOLT_APP_URL=http://192.168.0.197:11080

# URL to where the API is publicly accessible
REVOLT_PUBLIC_URL=http://192.168.0.197:11080/api
VITE_API_URL=http://192.168.0.197:11080/api

# URL to where the WebSocket server is publicly accessible
REVOLT_EXTERNAL_WS_URL=ws://192.168.0.197:11080/ws

# URL to where Autumn is publicly available
AUTUMN_PUBLIC_URL=http://192.168.0.197:11080/autumn

# URL to where January is publicly available
JANUARY_PUBLIC_URL=http://192.168.0.197:11080/january


##
## hCaptcha Settings
##

# If you are sure that you don't want to use hCaptcha, set to 1.
REVOLT_UNSAFE_NO_CAPTCHA=1

# hCaptcha API key (This is the "Secret key" from your User Settings page)
# REVOLT_HCAPTCHA_KEY=0x0000000000000000000000000000000000000000

# hCaptcha site key
# REVOLT_HCAPTCHA_SITEKEY=10000000-ffff-ffff-ffff-000000000001


##
## Email Settings
##

# If you are sure that you don't want to use email verification, set to 1.
REVOLT_UNSAFE_NO_EMAIL=1

# SMTP host
# REVOLT_SMTP_HOST=smtp.example.com

# SMTP username
# REVOLT_SMTP_USERNAME=noreply@example.com

# SMTP password
# REVOLT_SMTP_PASSWORD=CHANGEME

# SMTP From header
# REVOLT_SMTP_FROM=Revolt <noreply@example.com>


##
## Application Settings
##

# Whether to only allow users to sign up if they have an invite code
REVOLT_INVITE_ONLY=0

# Maximum number of people that can be in a group chat
REVOLT_MAX_GROUP_SIZE=150

# VAPID keys for push notifications
# Generate using this guide: https://gitlab.insrt.uk/revolt/delta/-/wikis/vapid
# --> Please replace these keys before going into production! <--
REVOLT_VAPID_PRIVATE_KEY=LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUJSUWpyTWxLRnBiVWhsUHpUbERvcEliYk1yeVNrNXpKYzVYVzIxSjJDS3hvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFWnkrQkg2TGJQZ2hEa3pEempXOG0rUXVPM3pCajRXT1phdkR6ZU00c0pqbmFwd1psTFE0WAp1ZDh2TzVodU94QWhMQlU3WWRldVovWHlBdFpWZmNyQi9BPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo=
REVOLT_VAPID_PUBLIC_KEY=BGcvgR-i2z4IQ5Mw841vJvkLjt8wY-FjmWrw83jOLCY52qcGZS0OF7nfLzuYbjsQISwVO2HXrmf18gLWVX3Kwfw=


##
## Autumn configuration
##

# S3 Region
AUTUMN_S3_REGION=minio

# S3 Endpoint
AUTUMN_S3_ENDPOINT=http://minio:9000

# MinIO Root User
MINIO_ROOT_USER=minioautumn

# MinIO Root Password
MINIO_ROOT_PASSWORD=minioautumn

# AWS Access Key ID
AWS_ACCESS_KEY_ID=minioautumn

# AWS Secret Key
AWS_SECRET_ACCESS_KEY=minioautumn
  • 第一处需要修改的地方是 HOSTNAME=http://local.revolt.chat,因为我们没有使用默认的 80 端口,而是 11080 ,所以按照官方的说法,要改为 HOSTNAME=:80

  • 其他的所有的 http://local.revolt.chat 都改为了 http://192.168.0.197:11080

老苏的群晖主机为 192.168.0.197,你需要按你自己 IP 进行修改;

更多环境变量的说明请参考官方文档:https://developers.revolt.chat/stack/env

caddyfile.txt

同样也是为了便于修改,没有用 Caddyfile,而是改为了 caddyfile.txt,看起来是不是有点像 Nginx?这个文件没有做任何改动,主要的原因是老苏没折腾过 Caddy

{$HOSTNAME} {
	route /api* {
		uri strip_prefix /api
		reverse_proxy http://api:8000
	}

	route /ws {
		@upgrade {
			header Connection *Upgrade*
			header Upgrade websocket
		}

		uri strip_prefix /ws
		reverse_proxy @upgrade http://events:9000
	}

	route /autumn* {
		uri strip_prefix /autumn
		reverse_proxy http://autumn:3000
	}

	route /january* {
		uri strip_prefix /january
		reverse_proxy http://january:7000
	}

	reverse_proxy http://web:5000
}

一键启动

然后执行下面的命令

# 新建文件夹 revolt 和 子目录
mkdir -p /volume1/docker/revolt/{caddy-config,caddy-data,data,minio}

# 进入 revolt 目录
cd /volume1/docker/revolt

# 将 docker-compose.yml 、 env.txt  caddyfile.txt 放入当前目录

# 一键启动
docker-compose up -d

如果不出意外的话,除了 revolt-mc,另外 9 个容器都是运行状态

运行

在浏览器中输入 http://群晖IP:11080 就能看到主界面

第一次需要注册账号

登录成功后的主界面

创建频道

完成之后,就等着好友加入聊天了

设置

黄色部分的大意是说

我们目前正在从头开始重建客户端和语音服务器。

在大多数情况下,旧声音应该有效,但在某些情况下,它可能莫名其妙地无法连接和/或表现出奇怪的行为。

老苏翻了一下,最早的语音服务器代码地址是:https://github.com/revoltchat/vortex,但是已经弃用,官方说在新的分支重写,不过看起来一直也没更新,以后再说吧

参考文档

Revolt
地址:https://github.com/revoltchat

revoltchat/self-hosted: Deploy Revolt using Docker.
地址:https://github.com/revoltchat/self-hosted

Revolt - Find Your Community
地址:https://revolt.chat/

Introduction | Revolt
地址:https://developers.revolt.chat/

Revolt 搭建指南 - 神代綺凛の随波逐流
地址:https://moe.best/tutorial/revolt.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/938440.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

帝国CMS仿管理资源吧资料下载网站模板源码/下载会员+积分付费下载功能自动采集资源网站源码

帝国CMS仿管理资源吧资料下载网站模板源码&#xff0c;带下载会员积分付费下载功能自动采集资源网站源码&#xff0c;管理资源吧——为中小企业管理者提供全方位的管理资料下载服务&#xff1b;是一个所有资料免费下载&#xff0c;免注册、免登陆、免积分的公益性的管理知识共享…

地球的“第三极”及其在全球气候中的作用

青藏高原是全球气候系统的重要力量&#xff0c;也是气候变化的热点地区。一项新的审查总结了知识状况并确定了与该地区相关的研究需求。 西门措湖是一个冰川冰碛湖&#xff0c;坐落在青藏高原的山​​峰之中。图片来源&#xff1a;Tenace10/Wikimedia Commons &#xff0c; 资料…

ModaHub魔搭社区:WinPlan经营大脑开放API调用指南

本文主要是介绍开放API调用流程 1. 开放API调用流程 1.1 创建API-TOKEN 即API访问凭证, 是用户在调用API接口时的应用和组织身份凭证,请妥善保管。如遇到丢失或者泄漏的情况,请及时重新生成。 API-TOKEN生成方式: 请前往[管理中心]->[数据集成]页面创建/重新生成。Win…

将Series序列中的缺失值用后一个值填充Series.bfill()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 对于Series序列中的缺失值n1 用n1后面的值n2来填充替代 Series.bfill() [太阳]选择题 关于以下代码的说法中错误的是? import numpy as np import pandas as pd a pd.Series([1,np.nan,2,np.…

PCI控制器扫描PCI总线过程解析

1、PCI的三种地址空间介绍 地址空间描述命令说明I/O空间供给设备驱动程序使用I/O操作命令对设备对应的I/O地址空间进行访问&#xff0c;此类访问不可预取存储空间供给设备驱动程序使用memory操作命令对设备的Memory空间进行访问&#xff0c;其中Memory操作命令又可分为Prefech…

Linux部署RocketMQ并使用SpringBoot创建生产、消费者

&#x1f61c;作 者&#xff1a;是江迪呀✒️本文关键词&#xff1a;RocketMQ、消息队列☀️每日 一言&#xff1a;在你心灰意冷、心烦意乱时也不要停下你的脚步&#xff01; 一、前言 RocketMQ&#xff08;Apache RocketMQ&#xff09;是一种开源的分布式消息中间…

【Day-21慢就是快】代码随想录-栈与队列-逆波兰表达式求值

逆波兰表达式&#xff1a;是一种后缀表达式&#xff0c;所谓后缀就是指运算符写在后面。 平常使用的算式则是一种中缀表达式&#xff0c;如 ( 1 2 ) * ( 3 4 ) 。 该算式的逆波兰表达式写法为 ( ( 1 2 ) ( 3 4 ) * ) 。 逆波兰表达式主要有以下两个优点&#xff1a; 去掉…

Cesium 显示经纬高

文章目录 需求分析 需求 页面展示经、纬度和高 分析 html <div id"latlng_show" style"width:340px;height:30px;position:absolute;bottom:40px;right:200px;z-index:1;font-size:15px;"><div style"width:100px;height:30px;float:left;…

浅析三维模型OBJ格式轻量化压缩文件大小的技术方法

浅析三维模型OBJ格式轻量化压缩文件大小的技术方法 在减小三维模型OBJ格式轻量化文件大小方面&#xff0c;有许多技术和方法可以使用。下面我将介绍一些常用的方法来减小OBJ文件的大小。 1、优化顶点数量&#xff1a;减少OBJ文件中的顶点数量是减小文件大小的一种有效方法。可…

LSF 安装目录,快速参考 LSF 命令、守护程序、配置文件、日志文件和重要集群配置参数

样本 UNIX 和 Linux 安装目录 守护程序错误日志文件 守护程序错误日志文件存储在 LSF_LOGDIR 在 lsf.conf 文件中定义的目录中。 LSF 基本系统守护程序日志文件LSF 批处理系统守护程序日志文件pim.log.host_namembatchd.log.host_namembatchd.log.host_namesbatchd.log.host_…

【Go 基础篇】切片:Go语言中的灵活数据结构

在Go语言中&#xff0c;切片&#xff08;Slice&#xff09;是一种强大且灵活的数据结构&#xff0c;用于管理和操作一系列元素。与数组相比&#xff0c;切片的大小可以动态调整&#xff0c;这使得它成为处理动态数据集合的理想选择。本文将围绕Go语言中切片的引入&#xff0c;介…

Java【手撕双指针】LeetCode 18. “四数之和“, 图文详解思路分析 + 代码

文章目录 前言一、四数之和1, 题目2, 思路分析3, 代码 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: &#x1f4d5; JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统等 &#x1f4d7; Java数据结构: 顺序表, 链表, 堆…

C# Emgu.CV 条码检测

效果 项目 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Emgu.CV; using Emgu.CV.Util; using static Emgu.C…

ThinkPHP 资源路由的简单使用,restfull风格API

ThinkPHP 资源路由的简单使用&#xff0c;restfull风格API 一、资源控制器二、资源控制器简单使用 一、资源控制器 资源控制器可以轻松的创建RESTFul资源控制器&#xff0c;可以通过命令行生成需要的资源控制器&#xff0c;例如生成index应用的TestR资源控制器使用&#xff1a…

layoutdm:discrete diffusion model for controllable layout generation

自动布局生成是我之前做banner生成中非常重要的一步&#xff0c;好的布局是成功的一半&#xff0c;在19年之前甚至更早时间&#xff0c;我们做这块主要是对标阿里的鹿班&#xff0c;那时候的技术方案主要是我之前发的smartbanner中&#xff0c;基本还是要靠模板以及相应的pipel…

软考A计划-网络工程师-必考知识点-上

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

[C/C++]笔记-函数的栈空间(避免栈空间溢出)

个人主页&#xff1a;北海 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏✨收录专栏&#xff1a;C/C&#x1f91d;希望作者的文章能对你有所帮助&#xff0c;有不足的地方请在评论区留言指正&#xff0c;大家一起学习交流&#xff01;&#x1f9…

机器视觉工程师们,人生而不平等,你更要迈出第一步的勇气

我永远相信人生而不公平&#xff0c;所以你必须跨出第一步。 有些事情试试才知道&#xff0c;每一个人每件事对待每一个人都是公平公正的。 很多小白&#xff0c;做事情总有一种胆怯的心理&#xff0c;我给一句忠告&#xff0c;先干再说&#xff0c;一边干&#xff0c;一边思考…

基于加密接口的测试用例设计

这里写目录标题 一、环境准备二、原理三、实战练习 一、环境准备 1、对响应加密的接口。对它发起一个get请求后&#xff0c;得到一个加密过后的响应信息。(如果有可用的加密过的接口以及了解它的解密方法&#xff0c;可以跳过) 2、准备一个加密文件 加密字段 3、使用python…

Java【手撕双指针】LeetCode 15. “三数之和“, 图文详解思路分析 + 代码

文章目录 前言一、三数之和1, 题目2, 思路分析3, 代码 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: &#x1f4d5; JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统等 &#x1f4d7; Java数据结构: 顺序表, 链表, 堆…