15 Commits
main ... main

Author SHA1 Message Date
82913d7f83 Update docker-compose2.yml
update for reverse proxy
2026-02-28 01:55:53 -06:00
6d6a3cceb6 Update .env.web
update for reverse proxy
2026-02-28 01:55:23 -06:00
3f716efe70 Update .gitignore
commented out the gitignore.
2026-02-28 01:28:48 -06:00
5b753f6762 added docker-compose2.yml 2026-02-28 01:21:11 -06:00
97367d1f41 Update docker-compose.yml
changed 4443 to 8443
2026-02-28 01:09:38 -06:00
bd52dc4688 Update docker-compose.yml
added &env and *env entries instead of using .env.web
2026-02-28 01:07:18 -06:00
0992048935 Update docker-compose.yml 2026-02-28 00:50:33 -06:00
e21d86d3fa Upload files to "/" 2026-02-28 00:49:19 -06:00
cbff098301 Upload files to "/" 2026-02-28 00:46:18 -06:00
eb7787a851 Update .env 2026-02-28 00:45:33 -06:00
c01603c51a merge upstream 2026-02-28 00:38:43 -06:00
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
7 changed files with 493 additions and 4 deletions

6
.env Normal file
View File

@@ -0,0 +1,6 @@
HOSTNAME=https://chat.kofal.net
REVOLT_PUBLIC_URL=https://chat.kofal.net/api
VITE_API_URL=https://chat.kofal.net/api
VITE_WS_URL=wss://chat.kofal.net/ws
VITE_MEDIA_URL=https://chat.kofal.net/autumn
VITE_PROXY_URL=https://chat.kofal.net/january

6
.env.web Normal file
View File

@@ -0,0 +1,6 @@
HOSTNAME=:80
REVOLT_PUBLIC_URL=https://chat.kofal.net/api
VITE_API_URL=https://chat.kofal.net/api
VITE_WS_URL=wss://chat.kofal.net/ws
VITE_MEDIA_URL=https://chat.kofal.net/autumn
VITE_PROXY_URL=https://chat.kofal.net/january

8
.gitignore vendored
View File

@@ -1,9 +1,9 @@
data* data*
.env #.env
.env.web #.env.web
Revolt.toml #Revolt.toml
livekit.yml #livekit.yml
Revolt.toml.old Revolt.toml.old
livekit.yml.old livekit.yml.old

23
Revolt.toml Normal file
View File

@@ -0,0 +1,23 @@
[hosts]
app = "https://chat.kofal.net"
api = "https://chat.kofal.net/api"
events = "wss://chat.kofal.net/ws"
autumn = "https://chat.kofal.net/autumn"
january = "https://chat.kofal.net/january"
[hosts.livekit]
worldwide = "wss://chat.kofal.net/livekit"
[pushd.vapid]
private_key = "LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUVEQmZCeDl6WitaQlVoZzI3TjNHM1REQ2xzM084Qkk0K2lrT1A5cXJ2UmlvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFamUrMU92YjUrYkwzS3BtOXJ2cWhxbTNtMHlMa1g2dDhiTGVDVW9pQ044Wmp0ZjRTNmJRRgptYVhiWUVHQWVDTEphdmxVdUh3SVZpZWFmSjJFVEFTNnd3PT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo"
public_key = "BI3vtTr2-fmy9yqZva76oapt5tMi5F-rfGy3glKIgjfGY7X-Eum0BZml22BBgHgiyWr5VLh8CFYnmnydhEwEusM"
[files]
encryption_key = "KcOMrR6lTE5wcHvL3z7aB/0tj2+4rJD2KNDnB/tjp3I="
[api.livekit.nodes.worldwide]
url = "http://livekit:7880"
lat = 0.0
lon = 0.0
key = "317d0847b3a2"
secret = "5a25b201ae80573c064e01b7387e7ac6fa99b0039a128dff"

221
docker-compose.yml Normal file
View File

@@ -0,0 +1,221 @@
name: stoat
services:
# MongoDB: Database
database:
image: docker.io/mongo
restart: always
environment: &env
- HOSTNAME=https://chat.kofal.net
- REVOLT_PUBLIC_URL=https://chat.kofal.net/api
- VITE_API_URL=https://chat.kofal.net/api
- VITE_WS_URL=wss://chat.kofal.net/ws
- VITE_MEDIA_URL=https://chat.kofal.net/autumn
- VITE_PROXY_URL=https://chat.kofal.net/january
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: *env
ports:
- "8880:80"
- "8443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./data/caddy-data:/data
- ./data/caddy-config:/config
# API server
api:
image: ghcr.io/stoatchat/api:v0.11.1
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/stoatchat/events:v0.11.1
depends_on:
database:
condition: service_healthy
redis:
condition: service_started
volumes:
- type: bind
source: ./Revolt.toml
target: /Revolt.toml
restart: always
# File server
autumn:
image: ghcr.io/stoatchat/file-server:v0.11.1
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/stoatchat/proxy:v0.11.1
volumes:
- type: bind
source: ./Revolt.toml
target: /Revolt.toml
restart: always
# Tenor proxy
gifbox:
image: ghcr.io/stoatchat/gifbox:v0.11.1
volumes:
- type: bind
source: ./Revolt.toml
target: /Revolt.toml
restart: always
# Regular task daemon
crond:
image: ghcr.io/stoatchat/crond:v0.11.1
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/stoatchat/pushd:v0.11.1
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
# Voice ingress daemon
voice-ingress:
image: ghcr.io/stoatchat/voice-ingress:v0.11.1
restart: always
depends_on:
database:
condition: service_healthy
rabbit:
condition: service_healthy
volumes:
- type: bind
source: ./Revolt.toml
target: /Revolt.toml
livekit:
image: ghcr.io/stoatchat/livekit-server:v1.9.6
depends_on:
redis:
condition: service_started
command: --config /etc/livekit.yml
ports:
- "7881:7881"
- "50000-50100:50000-50100/udp"
restart: always
volumes:
- type: bind
source: ./livekit.yml
target: /etc/livekit.yml
# 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;
"
# Web App
web:
image: ghcr.io/stoatchat/for-web:addb6b7
restart: always
environment: *env

214
docker-compose2.yml Normal file
View File

@@ -0,0 +1,214 @@
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
env_file: .env.web
ports:
- "8880:80"
#- "8443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./data/caddy-data:/data
- ./data/caddy-config:/config
# API server
api:
image: ghcr.io/stoatchat/api:v0.11.1
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/stoatchat/events:v0.11.1
depends_on:
database:
condition: service_healthy
redis:
condition: service_started
volumes:
- type: bind
source: ./Revolt.toml
target: /Revolt.toml
restart: always
# File server
autumn:
image: ghcr.io/stoatchat/file-server:v0.11.1
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/stoatchat/proxy:v0.11.1
volumes:
- type: bind
source: ./Revolt.toml
target: /Revolt.toml
restart: always
# Tenor proxy
gifbox:
image: ghcr.io/stoatchat/gifbox:v0.11.1
volumes:
- type: bind
source: ./Revolt.toml
target: /Revolt.toml
restart: always
# Regular task daemon
crond:
image: ghcr.io/stoatchat/crond:v0.11.1
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/stoatchat/pushd:v0.11.1
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
# Voice ingress daemon
voice-ingress:
image: ghcr.io/stoatchat/voice-ingress:v0.11.1
restart: always
depends_on:
database:
condition: service_healthy
rabbit:
condition: service_healthy
volumes:
- type: bind
source: ./Revolt.toml
target: /Revolt.toml
livekit:
image: ghcr.io/stoatchat/livekit-server:v1.9.6
depends_on:
redis:
condition: service_started
command: --config /etc/livekit.yml
ports:
- "7881:7881"
- "50000-50100:50000-50100/udp"
restart: always
volumes:
- type: bind
source: ./livekit.yml
target: /etc/livekit.yml
# 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;
"
# Web App
web:
image: ghcr.io/stoatchat/for-web:addb6b7
restart: always
env_file: .env.web

19
livekit.yml Normal file
View File

@@ -0,0 +1,19 @@
rtc:
use_external_ip: true
port_range_start: 50000
port_range_end: 50100
tcp_port: 7881
redis:
address: redis:6379
turn:
enabled: false
keys:
317d0847b3a2: 5a25b201ae80573c064e01b7387e7ac6fa99b0039a128dff
webhook:
api_key: 317d0847b3a2
urls:
- "http://voice-ingress:8500/worldwide"