app-store/apps/revolt/docker-compose.yml

381 lines
14 KiB
YAML

version: "3.8"
services:
revolt-database:
image: mongo
container_name: revolt-database
restart: always
volumes:
- ${APP_DATA_DIR}/data/db:/data/db
networks:
- tipi_main_network
environment:
- MONGODB=mongodb://revolt-database
- REDIS_URI=redis://revolt-redis/
- HOSTNAME=:80
- REVOLT_APP_URL=https://${APP_DOMAIN}
- REVOLT_PUBLIC_URL=https://${APP_DOMAIN}/api
- VITE_API_URL=https://${APP_DOMAIN}/api
- REVOLT_EXTERNAL_WS_URL=wss://${APP_DOMAIN}/ws
- AUTUMN_PUBLIC_URL=https://${APP_DOMAIN}/autumn
- JANUARY_PUBLIC_URL=https://${APP_DOMAIN}/january
- REVOLT_UNSAFE_NO_CAPTCHA=1
- REVOLT_SMTP_HOST=${REVOLT_SMTP_HOST}
- REVOLT_SMTP_USERNAME=${REVOLT_SMTP_USERNAME}
- REVOLT_SMTP_PASSWORD=${REVOLT_SMTP_PASSWORD}
- REVOLT_SMTP_FROM=${REVOLT_SMTP_FROM}
- REVOLT_INVITE_ONLY=${REVOLT_INVITE_ONLY}
- REVOLT_MAX_GROUP_SIZE=150
- REVOLT_VAPID_PUBLIC_KEY=${VAPID_PUBLIC_KEY}
- REVOLT_VAPID_PRIVATE_KEY=${VAPID_PRIVATE_KEY}
- AUTUMN_S3_REGION=minio
- AUTUMN_S3_ENDPOINT=http://revolt-minio:9000
- MINIO_ROOT_USER=minioautumn
- MINIO_ROOT_PASSWORD=${REVOLT_MINIO_ROOT_PASSWORD}
- AWS_ACCESS_KEY_ID=${REVOLT_AWS_ACCESS_KEY_ID}
- AWS_SECRET_ACCESS_KEY=${REVOLT_AWS_SECRET_ACCESS_KEY}
# Redis server
revolt-redis:
image: eqalpha/keydb
container_name: revolt-redis
restart: always
networks:
- tipi_main_network
environment:
- MONGODB=mongodb://revolt-database
- REDIS_URI=redis://revolt-redis/
- HOSTNAME=:80
- REVOLT_APP_URL=https://${APP_DOMAIN}
- REVOLT_PUBLIC_URL=https://${APP_DOMAIN}/api
- VITE_API_URL=https://${APP_DOMAIN}/api
- REVOLT_EXTERNAL_WS_URL=wss://${APP_DOMAIN}/ws
- AUTUMN_PUBLIC_URL=https://${APP_DOMAIN}/autumn
- JANUARY_PUBLIC_URL=https://${APP_DOMAIN}/january
- REVOLT_UNSAFE_NO_CAPTCHA=1
- REVOLT_SMTP_HOST=${REVOLT_SMTP_HOST}
- REVOLT_SMTP_USERNAME=${REVOLT_SMTP_USERNAME}
- REVOLT_SMTP_PASSWORD=${REVOLT_SMTP_PASSWORD}
- REVOLT_SMTP_FROM=${REVOLT_SMTP_FROM}
- REVOLT_INVITE_ONLY=${REVOLT_INVITE_ONLY}
- REVOLT_MAX_GROUP_SIZE=150
- REVOLT_VAPID_PUBLIC_KEY=${VAPID_PUBLIC_KEY}
- REVOLT_VAPID_PRIVATE_KEY=${VAPID_PRIVATE_KEY}
- AUTUMN_S3_REGION=minio
- AUTUMN_S3_ENDPOINT=http://revolt-minio:9000
- MINIO_ROOT_USER=minioautumn
- MINIO_ROOT_PASSWORD=${REVOLT_MINIO_ROOT_PASSWORD}
- AWS_ACCESS_KEY_ID=${REVOLT_AWS_ACCESS_KEY_ID}
- AWS_SECRET_ACCESS_KEY=${REVOLT_AWS_SECRET_ACCESS_KEY}
# S3-compatible storage server
revolt-minio:
image: minio/minio
container_name: revolt-minio
command: server /data
volumes:
- ${APP_DATA_DIR}/data/minio:/data
restart: always
networks:
- tipi_main_network
environment:
- MONGODB=mongodb://revolt-database
- REDIS_URI=redis://revolt-redis/
- HOSTNAME=:80
- REVOLT_APP_URL=https://${APP_DOMAIN}
- REVOLT_PUBLIC_URL=https://${APP_DOMAIN}/api
- VITE_API_URL=https://${APP_DOMAIN}/api
- REVOLT_EXTERNAL_WS_URL=wss://${APP_DOMAIN}/ws
- AUTUMN_PUBLIC_URL=https://${APP_DOMAIN}/autumn
- JANUARY_PUBLIC_URL=https://${APP_DOMAIN}/january
- REVOLT_UNSAFE_NO_CAPTCHA=1
- REVOLT_SMTP_HOST=${REVOLT_SMTP_HOST}
- REVOLT_SMTP_USERNAME=${REVOLT_SMTP_USERNAME}
- REVOLT_SMTP_PASSWORD=${REVOLT_SMTP_PASSWORD}
- REVOLT_SMTP_FROM=${REVOLT_SMTP_FROM}
- REVOLT_INVITE_ONLY=${REVOLT_INVITE_ONLY}
- REVOLT_MAX_GROUP_SIZE=150
- REVOLT_VAPID_PUBLIC_KEY=${VAPID_PUBLIC_KEY}
- REVOLT_VAPID_PRIVATE_KEY=${VAPID_PRIVATE_KEY}
- AUTUMN_S3_REGION=minio
- AUTUMN_S3_ENDPOINT=http://revolt-minio:9000
- MINIO_ROOT_USER=minioautumn
- MINIO_ROOT_PASSWORD=${REVOLT_MINIO_ROOT_PASSWORD}
- AWS_ACCESS_KEY_ID=${REVOLT_AWS_ACCESS_KEY_ID}
- AWS_SECRET_ACCESS_KEY=${REVOLT_AWS_SECRET_ACCESS_KEY}
# Web App (revite)
revolt-web:
image: ghcr.io/revoltchat/client:master
container_name: revolt-web
restart: always
networks:
- tipi_main_network
environment:
- MONGODB=mongodb://revolt-database
- REDIS_URI=redis://revolt-redis/
- HOSTNAME=:80
- REVOLT_APP_URL=https://${APP_DOMAIN}
- REVOLT_PUBLIC_URL=https://${APP_DOMAIN}/api
- VITE_API_URL=https://${APP_DOMAIN}/api
- REVOLT_EXTERNAL_WS_URL=wss://${APP_DOMAIN}/ws
- AUTUMN_PUBLIC_URL=https://${APP_DOMAIN}/autumn
- JANUARY_PUBLIC_URL=https://${APP_DOMAIN}/january
- REVOLT_UNSAFE_NO_CAPTCHA=1
- REVOLT_SMTP_HOST=${REVOLT_SMTP_HOST}
- REVOLT_SMTP_USERNAME=${REVOLT_SMTP_USERNAME}
- REVOLT_SMTP_PASSWORD=${REVOLT_SMTP_PASSWORD}
- REVOLT_SMTP_FROM=${REVOLT_SMTP_FROM}
- REVOLT_INVITE_ONLY=${REVOLT_INVITE_ONLY}
- REVOLT_MAX_GROUP_SIZE=150
- REVOLT_VAPID_PUBLIC_KEY=${VAPID_PUBLIC_KEY}
- REVOLT_VAPID_PRIVATE_KEY=${VAPID_PRIVATE_KEY}
- AUTUMN_S3_REGION=minio
- AUTUMN_S3_ENDPOINT=http://revolt-minio:9000
- MINIO_ROOT_USER=minioautumn
- MINIO_ROOT_PASSWORD=${REVOLT_MINIO_ROOT_PASSWORD}
- AWS_ACCESS_KEY_ID=${REVOLT_AWS_ACCESS_KEY_ID}
- AWS_SECRET_ACCESS_KEY=${REVOLT_AWS_SECRET_ACCESS_KEY}
# API server (delta)
revolt-api:
image: ghcr.io/revoltchat/server:20240611-3
container_name: revolt-api
depends_on:
- revolt-database
- revolt-redis
- revolt
restart: always
networks:
- tipi_main_network
environment:
- MONGODB=mongodb://revolt-database
- REDIS_URI=redis://revolt-redis/
- HOSTNAME=:80
- REVOLT_APP_URL=https://${APP_DOMAIN}
- REVOLT_PUBLIC_URL=https://${APP_DOMAIN}/api
- VITE_API_URL=https://${APP_DOMAIN}/api
- REVOLT_EXTERNAL_WS_URL=wss://${APP_DOMAIN}/ws
- AUTUMN_PUBLIC_URL=https://${APP_DOMAIN}/autumn
- JANUARY_PUBLIC_URL=https://${APP_DOMAIN}/january
- REVOLT_UNSAFE_NO_CAPTCHA=1
- REVOLT_SMTP_HOST=${REVOLT_SMTP_HOST}
- REVOLT_SMTP_USERNAME=${REVOLT_SMTP_USERNAME}
- REVOLT_SMTP_PASSWORD=${REVOLT_SMTP_PASSWORD}
- REVOLT_SMTP_FROM=${REVOLT_SMTP_FROM}
- REVOLT_INVITE_ONLY=${REVOLT_INVITE_ONLY}
- REVOLT_MAX_GROUP_SIZE=150
- REVOLT_VAPID_PUBLIC_KEY=${VAPID_PUBLIC_KEY}
- REVOLT_VAPID_PRIVATE_KEY=${VAPID_PRIVATE_KEY}
- AUTUMN_S3_REGION=minio
- AUTUMN_S3_ENDPOINT=http://revolt-minio:9000
- MINIO_ROOT_USER=minioautumn
- MINIO_ROOT_PASSWORD=${REVOLT_MINIO_ROOT_PASSWORD}
- AWS_ACCESS_KEY_ID=${REVOLT_AWS_ACCESS_KEY_ID}
- AWS_SECRET_ACCESS_KEY=${REVOLT_AWS_SECRET_ACCESS_KEY}
# Events service (quark)
revolt-events:
image: ghcr.io/revoltchat/bonfire:20240611-3
container_name: revolt-events
depends_on:
- revolt-database
- revolt-redis
- revolt
restart: always
networks:
- tipi_main_network
environment:
- MONGODB=mongodb://revolt-database
- REDIS_URI=redis://revolt-redis/
- HOSTNAME=:80
- REVOLT_APP_URL=https://${APP_DOMAIN}
- REVOLT_PUBLIC_URL=https://${APP_DOMAIN}/api
- VITE_API_URL=https://${APP_DOMAIN}/api
- REVOLT_EXTERNAL_WS_URL=wss://${APP_DOMAIN}/ws
- AUTUMN_PUBLIC_URL=https://${APP_DOMAIN}/autumn
- JANUARY_PUBLIC_URL=https://${APP_DOMAIN}/january
- REVOLT_UNSAFE_NO_CAPTCHA=1
- REVOLT_SMTP_HOST=${REVOLT_SMTP_HOST}
- REVOLT_SMTP_USERNAME=${REVOLT_SMTP_USERNAME}
- REVOLT_SMTP_PASSWORD=${REVOLT_SMTP_PASSWORD}
- REVOLT_SMTP_FROM=${REVOLT_SMTP_FROM}
- REVOLT_INVITE_ONLY=${REVOLT_INVITE_ONLY}
- REVOLT_MAX_GROUP_SIZE=150
- REVOLT_VAPID_PUBLIC_KEY=${VAPID_PUBLIC_KEY}
- REVOLT_VAPID_PRIVATE_KEY=${VAPID_PRIVATE_KEY}
- AUTUMN_S3_REGION=minio
- AUTUMN_S3_ENDPOINT=http://revolt-minio:9000
- MINIO_ROOT_USER=minioautumn
- MINIO_ROOT_PASSWORD=${REVOLT_MINIO_ROOT_PASSWORD}
- AWS_ACCESS_KEY_ID=${REVOLT_AWS_ACCESS_KEY_ID}
- AWS_SECRET_ACCESS_KEY=${REVOLT_AWS_SECRET_ACCESS_KEY}
# File server (autumn)
revolt-autumn:
image: ghcr.io/revoltchat/autumn:1.1.10
container_name: revolt-autumn
depends_on:
- revolt-database
- revolt-createbuckets
- revolt
restart: always
networks:
- tipi_main_network
environment:
# Container Specific
- AUTUMN_MONGO_URI=mongodb://revolt-database
# Below is Standard Config
- MONGODB=mongodb://revolt-database
- REDIS_URI=redis://revolt-redis/
- HOSTNAME=:80
- REVOLT_APP_URL=https://${APP_DOMAIN}
- REVOLT_PUBLIC_URL=https://${APP_DOMAIN}/api
- VITE_API_URL=https://${APP_DOMAIN}/api
- REVOLT_EXTERNAL_WS_URL=wss://${APP_DOMAIN}/ws
- AUTUMN_PUBLIC_URL=https://${APP_DOMAIN}/autumn
- JANUARY_PUBLIC_URL=https://${APP_DOMAIN}/january
- REVOLT_UNSAFE_NO_CAPTCHA=1
- REVOLT_SMTP_HOST=${REVOLT_SMTP_HOST}
- REVOLT_SMTP_USERNAME=${REVOLT_SMTP_USERNAME}
- REVOLT_SMTP_PASSWORD=${REVOLT_SMTP_PASSWORD}
- REVOLT_SMTP_FROM=${REVOLT_SMTP_FROM}
- REVOLT_INVITE_ONLY=${REVOLT_INVITE_ONLY}
- REVOLT_MAX_GROUP_SIZE=150
- REVOLT_VAPID_PUBLIC_KEY=${VAPID_PUBLIC_KEY}
- REVOLT_VAPID_PRIVATE_KEY=${VAPID_PRIVATE_KEY}
- AUTUMN_S3_REGION=minio
- AUTUMN_S3_ENDPOINT=http://revolt-minio:9000
- MINIO_ROOT_USER=minioautumn
- MINIO_ROOT_PASSWORD=${REVOLT_MINIO_ROOT_PASSWORD}
- AWS_ACCESS_KEY_ID=${REVOLT_AWS_ACCESS_KEY_ID}
- AWS_SECRET_ACCESS_KEY=${REVOLT_AWS_SECRET_ACCESS_KEY}
# Metadata and image proxy (january)
revolt-january:
image: ghcr.io/revoltchat/january:master
container_name: revolt-january
depends_on:
- revolt
restart: always
networks:
- tipi_main_network
environment:
- MONGODB=mongodb://revolt-database
- REDIS_URI=redis://revolt-redis/
- HOSTNAME=:80
- REVOLT_APP_URL=https://${APP_DOMAIN}
- REVOLT_PUBLIC_URL=https://${APP_DOMAIN}/api
- VITE_API_URL=https://${APP_DOMAIN}/api
- REVOLT_EXTERNAL_WS_URL=wss://${APP_DOMAIN}/ws
- AUTUMN_PUBLIC_URL=https://${APP_DOMAIN}/autumn
- JANUARY_PUBLIC_URL=https://${APP_DOMAIN}/january
- REVOLT_UNSAFE_NO_CAPTCHA=1
- REVOLT_SMTP_HOST=${REVOLT_SMTP_HOST}
- REVOLT_SMTP_USERNAME=${REVOLT_SMTP_USERNAME}
- REVOLT_SMTP_PASSWORD=${REVOLT_SMTP_PASSWORD}
- REVOLT_SMTP_FROM=${REVOLT_SMTP_FROM}
- REVOLT_INVITE_ONLY=${REVOLT_INVITE_ONLY}
- REVOLT_MAX_GROUP_SIZE=150
- REVOLT_VAPID_PUBLIC_KEY=${VAPID_PUBLIC_KEY}
- REVOLT_VAPID_PRIVATE_KEY=${VAPID_PRIVATE_KEY}
- AUTUMN_S3_REGION=minio
- AUTUMN_S3_ENDPOINT=http://revolt-minio:9000
- MINIO_ROOT_USER=minioautumn
- MINIO_ROOT_PASSWORD=${REVOLT_MINIO_ROOT_PASSWORD}
- AWS_ACCESS_KEY_ID=${REVOLT_AWS_ACCESS_KEY_ID}
- AWS_SECRET_ACCESS_KEY=${REVOLT_AWS_SECRET_ACCESS_KEY}
# Create buckets for minio.
revolt-createbuckets:
image: minio/mc
container_name: revolt-createbuckets
depends_on:
- revolt-minio
entrypoint: >
/bin/sh -c "
while ! curl -s --output /dev/null --connect-timeout 1 http://revolt-minio:9000; do echo 'Waiting minio...' && sleep 0.1; done;
/usr/bin/mc alias set minio http://revolt-minio:9000 minioautumn ${REVOLT_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;
"
networks:
- tipi_main_network
environment:
- MONGODB=mongodb://revolt-database
- REDIS_URI=redis://revolt-redis/
- HOSTNAME=:80
- REVOLT_APP_URL=https://${APP_DOMAIN}
- REVOLT_PUBLIC_URL=https://${APP_DOMAIN}/api
- VITE_API_URL=https://${APP_DOMAIN}/api
- REVOLT_EXTERNAL_WS_URL=wss://${APP_DOMAIN}/ws
- AUTUMN_PUBLIC_URL=https://${APP_DOMAIN}/autumn
- JANUARY_PUBLIC_URL=https://${APP_DOMAIN}/january
- REVOLT_UNSAFE_NO_CAPTCHA=1
- REVOLT_SMTP_HOST=${REVOLT_SMTP_HOST}
- REVOLT_SMTP_USERNAME=${REVOLT_SMTP_USERNAME}
- REVOLT_SMTP_PASSWORD=${REVOLT_SMTP_PASSWORD}
- REVOLT_SMTP_FROM=${REVOLT_SMTP_FROM}
- REVOLT_INVITE_ONLY=${REVOLT_INVITE_ONLY}
- REVOLT_MAX_GROUP_SIZE=150
- REVOLT_VAPID_PUBLIC_KEY=${VAPID_PUBLIC_KEY}
- REVOLT_VAPID_PRIVATE_KEY=${VAPID_PRIVATE_KEY}
- AUTUMN_S3_REGION=minio
- AUTUMN_S3_ENDPOINT=http://revolt-minio:9000
- MINIO_ROOT_USER=minioautumn
- MINIO_ROOT_PASSWORD=${REVOLT_MINIO_ROOT_PASSWORD}
- AWS_ACCESS_KEY_ID=${REVOLT_AWS_ACCESS_KEY_ID}
- AWS_SECRET_ACCESS_KEY=${REVOLT_AWS_SECRET_ACCESS_KEY}
revolt:
image: caddy
container_name: revolt
restart: always
environment:
- MONGODB=mongodb://revolt-database
- REDIS_URI=redis://revolt-redis/
- HOSTNAME=:80
- REVOLT_APP_URL=https://${APP_DOMAIN}
- REVOLT_PUBLIC_URL=https://${APP_DOMAIN}/api
- VITE_API_URL=https://${APP_DOMAIN}/api
- REVOLT_EXTERNAL_WS_URL=wss://${APP_DOMAIN}/ws
- AUTUMN_PUBLIC_URL=https://${APP_DOMAIN}/autumn
- JANUARY_PUBLIC_URL=https://${APP_DOMAIN}/january
- REVOLT_UNSAFE_NO_CAPTCHA=1
- REVOLT_SMTP_HOST=${REVOLT_SMTP_HOST}
- REVOLT_SMTP_USERNAME=${REVOLT_SMTP_USERNAME}
- REVOLT_SMTP_PASSWORD=${REVOLT_SMTP_PASSWORD}
- REVOLT_SMTP_FROM=${REVOLT_SMTP_FROM}
- REVOLT_INVITE_ONLY=${REVOLT_INVITE_ONLY}
- REVOLT_MAX_GROUP_SIZE=150
- REVOLT_VAPID_PUBLIC_KEY=${VAPID_PUBLIC_KEY}
- REVOLT_VAPID_PRIVATE_KEY=${VAPID_PRIVATE_KEY}
- AUTUMN_S3_REGION=minio
- AUTUMN_S3_ENDPOINT=http://revolt-minio:9000
- MINIO_ROOT_USER=minioautumn
- MINIO_ROOT_PASSWORD=${REVOLT_MINIO_ROOT_PASSWORD}
- AWS_ACCESS_KEY_ID=${REVOLT_AWS_ACCESS_KEY_ID}
- AWS_SECRET_ACCESS_KEY=${REVOLT_AWS_SECRET_ACCESS_KEY}
ports:
- "${APP_PORT}:80"
- "8273:443"
volumes:
- ${APP_DATA_DIR}/data/CaddyFiles:/etc/caddy/
- ${APP_DATA_DIR}/data/caddy-data:/data
- ${APP_DATA_DIR}/data/caddy-config:/config
networks:
- tipi_main_network
labels:
traefik.enable: ${APP_EXPOSED}
traefik.http.routers.revolt.rule: Host(`${APP_DOMAIN}`)
traefik.http.routers.revolt.entrypoints: websecure
traefik.http.routers.revolt.service: revolt
traefik.http.routers.revolt.tls.certresolver: myresolver
traefik.http.services.revolt.loadbalancer.server.port: 80