revolt init + grafana monitoring
This commit is contained in:
parent
d3571e2bc7
commit
019b71610e
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
Revolt/data
|
108
Revolt/.env
Normal file
108
Revolt/.env
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
##
|
||||||
|
## 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
|
||||||
|
|
||||||
|
# URL to where the Revolt app is publicly accessible
|
||||||
|
REVOLT_APP_URL=http://local.revolt.chat
|
||||||
|
|
||||||
|
# VITE_xxx variables are used in the new frontend https://github.com/revoltchat/frontend
|
||||||
|
|
||||||
|
# URL to where the API is publicly accessible
|
||||||
|
REVOLT_PUBLIC_URL=http://local.revolt.chat/api
|
||||||
|
VITE_API_URL=http://local.revolt.chat/api
|
||||||
|
|
||||||
|
# URL to where the WebSocket server is publicly accessible
|
||||||
|
REVOLT_EXTERNAL_WS_URL=ws://local.revolt.chat/ws
|
||||||
|
VITE_WS_URL=ws://local.revolt.chat/ws
|
||||||
|
|
||||||
|
# URL to where Autumn is publicly available
|
||||||
|
AUTUMN_PUBLIC_URL=http://local.revolt.chat/autumn
|
||||||
|
VITE_MEDIA_URL=http://local.revolt.chat/autumn
|
||||||
|
|
||||||
|
# URL to where January is publicly available
|
||||||
|
JANUARY_PUBLIC_URL=http://local.revolt.chat/january
|
||||||
|
VITE_PROXY_URL=http://local.revolt.chat/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
|
1
Revolt/.env.caddy
Normal file
1
Revolt/.env.caddy
Normal file
@ -0,0 +1 @@
|
|||||||
|
HOSTNAME=http://local.revolt.chat
|
42
Revolt/Caddyfile
Normal file
42
Revolt/Caddyfile
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
admin :2019
|
||||||
|
|
||||||
|
servers {
|
||||||
|
metrics
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// {$HOSTNAME} {
|
||||||
|
:80 {
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
route /stats* {
|
||||||
|
uri strip_prefix /stats
|
||||||
|
reverse_proxy http://grafana:3000
|
||||||
|
}
|
||||||
|
|
||||||
|
reverse_proxy http://web:5000
|
||||||
|
}
|
13
Revolt/README.md
Normal file
13
Revolt/README.md
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
Run a revolt server with fancy monitoring (WIP)
|
||||||
|
|
||||||
|
|
||||||
|
# Prep
|
||||||
|
|
||||||
|
You may need to run
|
||||||
|
```bash
|
||||||
|
sudo mount --make-rshared /
|
||||||
|
```
|
||||||
|
|
||||||
|
# Before Prod
|
||||||
|
- [ ] Change .env.grafana file usernames and passwords
|
||||||
|
- [ ] Change .env file urls
|
97
Revolt/Revolt.toml
Normal file
97
Revolt/Revolt.toml
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
[database]
|
||||||
|
mongodb = "mongodb://database"
|
||||||
|
redis = "redis://redis/"
|
||||||
|
|
||||||
|
[hosts]
|
||||||
|
app = "http://local.revolt.chat"
|
||||||
|
api = "http://local.revolt.chat/api"
|
||||||
|
events = "ws://local.revolt.chat/ws"
|
||||||
|
autumn = "http://local.revolt.chat/autumn"
|
||||||
|
january = "http://local.revolt.chat/january"
|
||||||
|
voso_legacy = ""
|
||||||
|
voso_legacy_ws = ""
|
||||||
|
|
||||||
|
[api]
|
||||||
|
|
||||||
|
[api.registration]
|
||||||
|
invite_only = false
|
||||||
|
|
||||||
|
[api.smtp]
|
||||||
|
host = ""
|
||||||
|
username = ""
|
||||||
|
password = ""
|
||||||
|
from_address = ""
|
||||||
|
|
||||||
|
[api.vapid]
|
||||||
|
private_key = "LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUJSUWpyTWxLRnBiVWhsUHpUbERvcEliYk1yeVNrNXpKYzVYVzIxSjJDS3hvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFWnkrQkg2TGJQZ2hEa3pEempXOG0rUXVPM3pCajRXT1phdkR6ZU00c0pqbmFwd1psTFE0WAp1ZDh2TzVodU94QWhMQlU3WWRldVovWHlBdFpWZmNyQi9BPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo"
|
||||||
|
public_key = "BGcvgR-i2z4IQ5Mw841vJvkLjt8wY-FjmWrw83jOLCY52qcGZS0OF7nfLzuYbjsQISwVO2HXrmf18gLWVX3Kwfw="
|
||||||
|
|
||||||
|
[api.fcm]
|
||||||
|
api_key = ""
|
||||||
|
|
||||||
|
[api.apn]
|
||||||
|
pkcs8 = ""
|
||||||
|
key_id = ""
|
||||||
|
team_id = ""
|
||||||
|
|
||||||
|
[api.security]
|
||||||
|
authifier_shield_key = ""
|
||||||
|
voso_legacy_token = ""
|
||||||
|
trust_cloudflare = false
|
||||||
|
|
||||||
|
[api.security.captcha]
|
||||||
|
hcaptcha_key = ""
|
||||||
|
hcaptcha_sitekey = ""
|
||||||
|
|
||||||
|
[api.workers]
|
||||||
|
max_concurrent_connections = 50
|
||||||
|
|
||||||
|
[features]
|
||||||
|
webhooks_enabled = false
|
||||||
|
|
||||||
|
[features.limits]
|
||||||
|
|
||||||
|
[features.limits.global]
|
||||||
|
group_size = 100
|
||||||
|
message_embeds = 5
|
||||||
|
message_replies = 5
|
||||||
|
message_reactions = 20
|
||||||
|
server_emoji = 100
|
||||||
|
server_roles = 200
|
||||||
|
server_channels = 200
|
||||||
|
|
||||||
|
new_user_days = 3
|
||||||
|
|
||||||
|
[features.limits.new_user]
|
||||||
|
outgoing_friend_requests = 5
|
||||||
|
|
||||||
|
bots = 2
|
||||||
|
message_length = 2000
|
||||||
|
message_attachments = 5
|
||||||
|
servers = 100
|
||||||
|
|
||||||
|
attachment_size = 20000000
|
||||||
|
avatar_size = 4000000
|
||||||
|
background_size = 6000000
|
||||||
|
icon_size = 2500000
|
||||||
|
banner_size = 6000000
|
||||||
|
emoji_size = 500000
|
||||||
|
|
||||||
|
[features.limits.default]
|
||||||
|
outgoing_friend_requests = 10
|
||||||
|
|
||||||
|
bots = 5
|
||||||
|
message_length = 2000
|
||||||
|
message_attachments = 5
|
||||||
|
servers = 100
|
||||||
|
|
||||||
|
attachment_size = 20000000
|
||||||
|
avatar_size = 4000000
|
||||||
|
background_size = 6000000
|
||||||
|
icon_size = 2500000
|
||||||
|
banner_size = 6000000
|
||||||
|
emoji_size = 500000
|
||||||
|
|
||||||
|
[sentry]
|
||||||
|
api = ""
|
||||||
|
events = ""
|
183
Revolt/compose.yaml
Normal file
183
Revolt/compose.yaml
Normal file
@ -0,0 +1,183 @@
|
|||||||
|
services:
|
||||||
|
# r-proxy, log generator
|
||||||
|
caddy:
|
||||||
|
image: caddy:latest
|
||||||
|
restart: always
|
||||||
|
env_file: .env.caddy
|
||||||
|
ports:
|
||||||
|
- '8880:80'
|
||||||
|
- '4443:443'
|
||||||
|
volumes:
|
||||||
|
- './Caddyfile:/etc/caddy/Caddyfile'
|
||||||
|
- './data/caddy-data:/data'
|
||||||
|
- './data/caddy-config:/config'
|
||||||
|
|
||||||
|
##########################################
|
||||||
|
# Monitoring
|
||||||
|
#####
|
||||||
|
|
||||||
|
# log collector
|
||||||
|
prometheus:
|
||||||
|
image: prom/prometheus:latest
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- ./prometheus/:/etc/prometheus/
|
||||||
|
- prometheus_storage:/prometheus
|
||||||
|
command:
|
||||||
|
- '--config.file=/etc/prometheus/prometheus.yml'
|
||||||
|
- '--storage.tsdb.path=/prometheus'
|
||||||
|
- '--web.console.libraries=/usr/share/prometheus/console_libraries'
|
||||||
|
- '--web.console.templates=/usr/share/prometheus/consoles'
|
||||||
|
ports:
|
||||||
|
- 9090:9090
|
||||||
|
# links:
|
||||||
|
# - cadvisor:cadvisor
|
||||||
|
depends_on:
|
||||||
|
- cadvisor
|
||||||
|
- caddy
|
||||||
|
|
||||||
|
# log viewer
|
||||||
|
grafana:
|
||||||
|
image: grafana/grafana:latest
|
||||||
|
user: "472"
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- 3000:3000
|
||||||
|
volumes:
|
||||||
|
- './grafana/provisioning/:/etc/grafana/provisioning/'
|
||||||
|
- 'grafana_storage:/var/lib/grafana'
|
||||||
|
env_file:
|
||||||
|
- ./grafana/.env.grafana
|
||||||
|
depends_on:
|
||||||
|
- prometheus
|
||||||
|
|
||||||
|
node-exporter:
|
||||||
|
image: quay.io/prometheus/node-exporter:latest
|
||||||
|
volumes:
|
||||||
|
- /proc:/host/proc:ro
|
||||||
|
- /sys:/host/sys:ro
|
||||||
|
- /:/rootfs:ro
|
||||||
|
- /:/host:ro,rslave
|
||||||
|
command:
|
||||||
|
- '--path.rootfs=/host'
|
||||||
|
- '--path.procfs=/host/proc'
|
||||||
|
- '--path.sysfs=/host/sys'
|
||||||
|
- --collector.filesystem.mount-points-exclude
|
||||||
|
- "^/(sys|proc|dev|host|etc|rootfs/var/lib/docker/containers|rootfs/var/lib/docker/overlay2|rootfs/run/docker/netns|rootfs/var/lib/docker/aufs)($$|/)"
|
||||||
|
ports:
|
||||||
|
- 9100:9100
|
||||||
|
restart: always
|
||||||
|
deploy:
|
||||||
|
mode: global
|
||||||
|
|
||||||
|
cadvisor:
|
||||||
|
image: gcr.io/cadvisor/cadvisor
|
||||||
|
volumes:
|
||||||
|
- /:/rootfs:ro
|
||||||
|
- /var/run:/var/run:rw
|
||||||
|
- /sys:/sys:ro
|
||||||
|
- /var/lib/docker/:/var/lib/docker:ro
|
||||||
|
ports:
|
||||||
|
- 8080:8080
|
||||||
|
restart: always
|
||||||
|
deploy:
|
||||||
|
mode: global
|
||||||
|
|
||||||
|
##########################################
|
||||||
|
# Revolt
|
||||||
|
#####
|
||||||
|
|
||||||
|
# MongoDB database
|
||||||
|
database:
|
||||||
|
image: mongo
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- './data/db:/data/db'
|
||||||
|
|
||||||
|
# Redis server
|
||||||
|
redis:
|
||||||
|
image: eqalpha/keydb
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
# S3-compatible storage server
|
||||||
|
minio:
|
||||||
|
image: minio/minio
|
||||||
|
command: server /data
|
||||||
|
env_file: .env
|
||||||
|
volumes:
|
||||||
|
- './data/minio:/data'
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
# API server (delta)
|
||||||
|
api:
|
||||||
|
image: ghcr.io/revoltchat/server:latest
|
||||||
|
env_file: .env
|
||||||
|
depends_on:
|
||||||
|
- database
|
||||||
|
- redis
|
||||||
|
- caddy
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- './Revolt.toml:/Revolt.toml'
|
||||||
|
|
||||||
|
# Events service (quark)
|
||||||
|
events:
|
||||||
|
image: ghcr.io/revoltchat/bonfire:latest
|
||||||
|
env_file: .env
|
||||||
|
depends_on:
|
||||||
|
- database
|
||||||
|
- redis
|
||||||
|
- caddy
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- './Revolt.toml:/Revolt.toml'
|
||||||
|
|
||||||
|
# Web App (revite)
|
||||||
|
web:
|
||||||
|
image: ghcr.io/revoltchat/client:master
|
||||||
|
env_file: .env
|
||||||
|
depends_on:
|
||||||
|
- caddy
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
# File server (autumn)
|
||||||
|
autumn:
|
||||||
|
image: ghcr.io/revoltchat/autumn:latest
|
||||||
|
env_file: .env
|
||||||
|
depends_on:
|
||||||
|
- database
|
||||||
|
- createbuckets
|
||||||
|
- caddy
|
||||||
|
environment:
|
||||||
|
- AUTUMN_MONGO_URI=mongodb://database
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
# Metadata and image proxy (january)
|
||||||
|
january:
|
||||||
|
image: ghcr.io/revoltchat/january:latest
|
||||||
|
depends_on:
|
||||||
|
- caddy
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
# Create buckets for minio.
|
||||||
|
createbuckets:
|
||||||
|
image: minio/mc
|
||||||
|
depends_on:
|
||||||
|
- minio
|
||||||
|
env_file: .env
|
||||||
|
entrypoint: >
|
||||||
|
/bin/sh -c "
|
||||||
|
/usr/bin/mc config host add minio http://minio:9000 $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD;
|
||||||
|
while ! /usr/bin/mc ready minio; do echo 'Waiting minio...' && sleep 1; done;
|
||||||
|
/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;
|
||||||
|
"
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
grafana_storage: {}
|
||||||
|
prometheus_storage: {}
|
4
Revolt/grafana/.env.grafana
Normal file
4
Revolt/grafana/.env.grafana
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
GF_AUTH_ANONYMOUS_ENABLED=true
|
||||||
|
GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
|
||||||
|
GF_AUTH_DISABLE_LOGIN_FORM=true
|
||||||
|
GF_FEATURE_TOGGLES_ENABLE=traceqlEditor
|
15
Revolt/grafana/provisioning/datasources/datasources.yaml
Normal file
15
Revolt/grafana/provisioning/datasources/datasources.yaml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
apiVersion: 1
|
||||||
|
|
||||||
|
datasources:
|
||||||
|
- name: Prometheus
|
||||||
|
type: prometheus
|
||||||
|
uid: prometheus
|
||||||
|
access: proxy
|
||||||
|
orgId: 1
|
||||||
|
url: http://prometheus:9090
|
||||||
|
basicAuth: false
|
||||||
|
isDefault: false
|
||||||
|
version: 1
|
||||||
|
editable: false
|
||||||
|
jsonData:
|
||||||
|
httpMethod: GET
|
24
Revolt/prometheus/prometheus.yml
Normal file
24
Revolt/prometheus/prometheus.yml
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
global:
|
||||||
|
scrape_interval: 15s
|
||||||
|
external_labels:
|
||||||
|
monitor: 'Revolt'
|
||||||
|
|
||||||
|
scrape_configs:
|
||||||
|
- job_name: caddy
|
||||||
|
static_configs:
|
||||||
|
# docker networking
|
||||||
|
- targets: ['caddy:2019']
|
||||||
|
|
||||||
|
- job_name: 'prometheus'
|
||||||
|
static_configs:
|
||||||
|
- targets: ['localhost:9090']
|
||||||
|
|
||||||
|
- job_name: 'cadvisor'
|
||||||
|
static_configs:
|
||||||
|
- targets: ['cadvisor:8080']
|
||||||
|
|
||||||
|
- job_name: 'node-exporter'
|
||||||
|
static_configs:
|
||||||
|
- targets: ['node-exporter:9100']
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user