From 2458237e9fb77ad318ea0695e39d27ad25c20926 Mon Sep 17 00:00:00 2001 From: Meng Sen Date: Fri, 14 Mar 2025 16:08:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E5=B8=83=E5=BA=94=E7=94=A8=20?= =?UTF-8?q?=E9=95=BF=E6=AF=9B=E8=B1=A1=20Mastodon?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Meng Sen --- .github/README.md | 2 +- README.md | 1 + apps/mastodon/4.3.6/data.yml | 159 +++++++++++++++++++++++ apps/mastodon/4.3.6/docker-compose.yml | 62 +++++++++ apps/mastodon/4.3.6/envs/default.env | 2 + apps/mastodon/4.3.6/envs/global.env | 2 + apps/mastodon/4.3.6/envs/mastodon.env | 109 ++++++++++++++++ apps/mastodon/4.3.6/scripts/init.sh | 17 +++ apps/mastodon/4.3.6/scripts/uninstall.sh | 10 ++ apps/mastodon/4.3.6/scripts/upgrade.sh | 17 +++ apps/mastodon/README.md | 48 +++++++ apps/mastodon/data.yml | 14 ++ apps/mastodon/logo.png | Bin 0 -> 41324 bytes envs/mastodon/mastodon.env | 109 ++++++++++++++++ 14 files changed, 551 insertions(+), 1 deletion(-) create mode 100644 apps/mastodon/4.3.6/data.yml create mode 100644 apps/mastodon/4.3.6/docker-compose.yml create mode 100644 apps/mastodon/4.3.6/envs/default.env create mode 100644 apps/mastodon/4.3.6/envs/global.env create mode 100644 apps/mastodon/4.3.6/envs/mastodon.env create mode 100644 apps/mastodon/4.3.6/scripts/init.sh create mode 100644 apps/mastodon/4.3.6/scripts/uninstall.sh create mode 100644 apps/mastodon/4.3.6/scripts/upgrade.sh create mode 100644 apps/mastodon/README.md create mode 100644 apps/mastodon/data.yml create mode 100644 apps/mastodon/logo.png create mode 100644 envs/mastodon/mastodon.env diff --git a/.github/README.md b/.github/README.md index e3d2fd7df..b48682e49 100644 --- a/.github/README.md +++ b/.github/README.md @@ -101,6 +101,7 @@ | 🟢 | | 苹果CMS V10 | https://www.maccms.la/ | 基于ThinkPHP和Layui的多功能开源免费内容管理系统 | | | 🟢 | | Docker Mailserver | https://docker-mailserver.github.io/docker-mailserver/latest/ | 可用于生产的全栈但简单的邮件服务器 | | | 🟢 | | MDC-NG | https://github.com/mdc-ng/mdc-ng/ | 成人电影数据采集工具 | | +| 🟢 | | Mastodon (长毛象) | https://joinmastodon.org/ | 自由开源的去中心化的分布式微博客社交网络 | | | 🟢 | | MaxKB | https://maxkb.cn/ | 基于 LLM 大语言模型的知识库问答系统 | | | 🟢 | | Media CMS | https://mediacms.io/ | 现代、功能齐全的开源视频和媒体内容管理系统 | | | 🟢 | | MetaTube | https://github.com/metatube-community/ | 为 Jellyfin/Emby/Plex 开发的超级好用的成人元数据刮削插件 | | @@ -184,7 +185,6 @@ > > 维护状态:🟢 维护中 🔴 未维护 🟡 表示不定期维护 - --- ## 1Pane 导入应用商店 diff --git a/README.md b/README.md index d1e18bb90..9442df3b4 100644 --- a/README.md +++ b/README.md @@ -96,6 +96,7 @@ | 🟢 | | 苹果CMS V10 | https://www.maccms.la/ | 基于ThinkPHP和Layui的多功能开源免费内容管理系统 | | | 🟢 | | Docker Mailserver | https://docker-mailserver.github.io/docker-mailserver/latest/ | 可用于生产的全栈但简单的邮件服务器 | | | 🟢 | | MDC-NG | https://github.com/mdc-ng/mdc-ng/ | 成人电影数据采集工具 | | +| 🟢 | | Mastodon (长毛象) | https://joinmastodon.org/ | 自由开源的去中心化的分布式微博客社交网络 | | | 🟢 | | MaxKB | https://maxkb.cn/ | 基于 LLM 大语言模型的知识库问答系统 | | | 🟢 | | Media CMS | https://mediacms.io/ | 现代、功能齐全的开源视频和媒体内容管理系统 | | | 🟢 | | MetaTube | https://github.com/metatube-community/ | 为 Jellyfin/Emby/Plex 开发的超级好用的成人元数据刮削插件 | | diff --git a/apps/mastodon/4.3.6/data.yml b/apps/mastodon/4.3.6/data.yml new file mode 100644 index 000000000..2b490eee1 --- /dev/null +++ b/apps/mastodon/4.3.6/data.yml @@ -0,0 +1,159 @@ +additionalProperties: + formFields: + - child: + default: "" + envKey: PANEL_POSTGRES_SERVICE + required: true + type: service + default: postgresql + envKey: PANEL_POSTGRES_TYPE + labelZh: Postgres 服务 (前置检查) + labelEn: Postgres Service (Pre-check) + required: true + type: apps + values: + - label: PostgreSQL + value: postgresql + - child: + default: "" + envKey: PANEL_REDIS_SERVICE + required: true + type: service + default: redis + envKey: PANEL_REDIS_TYPE + labelZh: Redis 服务 (前置检查) + labelEn: Redis Service (Pre-check) + required: true + type: apps + values: + - label: Redis + value: redis + - default: "/home/mastodon" + edit: true + envKey: MASTODON_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 3000 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: 4000 + edit: true + envKey: PANEL_APP_PORT_STREAM + labelZh: Stream 端口 + labelEn: Stream port + required: true + rule: paramPort + type: number + - default: "127.0.0.1" + edit: true + envKey: DB_HOST + labelZh: 数据库 主机地址 + labelEn: Database Host + required: true + type: text + - default: 5432 + edit: true + envKey: DB_PORT + labelZh: 数据库 端口 + labelEn: Database Port + required: true + rule: paramPort + type: number + - default: "mastodon" + edit: true + envKey: DB_NAME + labelZh: 数据库 名称 + labelEn: Database Name + required: true + rule: paramCommon + type: text + - default: "mastodon" + edit: true + envKey: DB_USER + labelZh: 数据库 用户名 + labelEn: Database Username + required: true + type: text + - default: "" + edit: true + envKey: DB_PASS + labelZh: 数据库 密码 + labelEn: Database Password + random: true + required: true + rule: paramComplexity + type: password + - default: "127.0.0.1" + edit: true + envKey: REDIS_HOST + labelZh: Redis 主机 + labelEn: Redis Host + required: true + type: text + - default: 6379 + edit: true + envKey: REDIS_PORT + labelZh: Redis 端口 + labelEn: Redis Port + required: true + rule: paramPort + type: number + - default: 0 + edit: true + envKey: REDIS_DB + labelZh: Redis 索引 (0-20) + labelEn: Redis Index (0-20) + required: true + type: number + - default: "" + edit: true + envKey: REDIS_USERNAME + labelZh: Redis 用户名 + labelEn: Redis UserName + required: false + type: text + - default: "" + edit: true + envKey: REDIS_PASSWORD + labelZh: Redis 密码 + labelEn: Redis Password + required: false + type: password + - default: "127.0.0.1" + edit: true + envKey: ES_HOST + labelZh: ES数据库 主机地址 + labelEn: Database Host + required: false + type: text + - default: 9200 + edit: true + envKey: ES_PORT + labelZh: ES数据库 端口 + labelEn: Database Port + required: false + rule: paramPort + type: number + - default: "elastic" + edit: true + envKey: ES_USER + labelZh: ES数据库 用户名 + labelEn: Database Username + required: false + type: text + - default: "" + edit: true + envKey: ES_PASS + labelZh: ES数据库 密码 + labelEn: Database Password + random: true + required: false + rule: paramComplexity + type: password diff --git a/apps/mastodon/4.3.6/docker-compose.yml b/apps/mastodon/4.3.6/docker-compose.yml new file mode 100644 index 000000000..7c637eb12 --- /dev/null +++ b/apps/mastodon/4.3.6/docker-compose.yml @@ -0,0 +1,62 @@ +networks: + 1panel-network: + external: true + +services: + mastodon: + image: ghcr.io/mastodon/mastodon:v4.3.6 + container_name: ${CONTAINER_NAME} + labels: + createdBy: "Apps" + restart: always + command: bundle exec puma -C config/puma.rb + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3000 + env_file: + - ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env} + - ${APP_ENV_FILE:-/etc/1panel/envs/mastodon/mastodon.env} + - ${ENV_FILE:-/etc/1panel/envs/default.env} + volumes: + - ${MASTODON_ROOT_PATH}/system:/mastodon/public/system + environment: + - TZ=Asia/Shanghai + healthcheck: + test: [ 'CMD-SHELL',"curl -s --noproxy localhost localhost:3000/health | grep -q 'OK' || exit 1" ] + + streaming-mastodon: + image: ghcr.io/mastodon/mastodon-streaming:v4.3.6 + container_name: streaming-${CONTAINER_NAME} + restart: always + command: node ./streaming/index.js + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_STREAM}:4000 + env_file: + - ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env} + - ${APP_ENV_FILE:-/etc/1panel/envs/mastodon/mastodon.env} + - ${ENV_FILE:-/etc/1panel/envs/default.env} + environment: + - TZ=Asia/Shanghai + healthcheck: + test: [ 'CMD-SHELL', "curl -s --noproxy localhost localhost:4000/api/v1/streaming/health | grep -q 'OK' || exit 1" ] + + sidekiq-mastodon: + image: ghcr.io/mastodon/mastodon:v4.3.6 + container_name: sidekiq-${CONTAINER_NAME} + restart: always + command: bundle exec sidekiq + networks: + - 1panel-network + env_file: + - ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env} + - ${APP_ENV_FILE:-/etc/1panel/envs/mastodon/mastodon.env} + - ${ENV_FILE:-/etc/1panel/envs/default.env} + volumes: + - ${MASTODON_ROOT_PATH}/system:/mastodon/public/system + environment: + - TZ=Asia/Shanghai + healthcheck: + test: [ 'CMD-SHELL', "ps aux | grep '[s]idekiq\ 6' || false" ] diff --git a/apps/mastodon/4.3.6/envs/default.env b/apps/mastodon/4.3.6/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/apps/mastodon/4.3.6/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/apps/mastodon/4.3.6/envs/global.env b/apps/mastodon/4.3.6/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/apps/mastodon/4.3.6/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/apps/mastodon/4.3.6/envs/mastodon.env b/apps/mastodon/4.3.6/envs/mastodon.env new file mode 100644 index 000000000..12ab2b6dc --- /dev/null +++ b/apps/mastodon/4.3.6/envs/mastodon.env @@ -0,0 +1,109 @@ +# This is a sample configuration file. You can generate your configuration +# with the `bundle exec rails mastodon:setup` interactive setup wizard, but to customize +# your setup even further, you'll need to edit it manually. This sample does +# not demonstrate all available configuration options. Please look at +# https://docs.joinmastodon.org/admin/config/ for the full documentation. + +# Note that this file accepts slightly different syntax depending on whether +# you are using `docker-compose` or not. In particular, if you use +# `docker-compose`, the value of each declared variable will be taken verbatim, +# including surrounding quotes. +# See: https://github.com/mastodon/mastodon/issues/16895 + +# Federation +# ---------- +# This identifies your server and cannot be changed safely later +# ---------- +LOCAL_DOMAIN=example.com + +# Redis +# ----- +REDIS_HOST=localhost +REDIS_PORT=6379 + +# PostgreSQL +# ---------- +DB_HOST=/var/run/postgresql +DB_USER=mastodon +DB_NAME=mastodon_production +DB_PASS= +DB_PORT=5432 + +# Elasticsearch (optional) +# ------------------------ +ES_ENABLED=true +ES_HOST=localhost +ES_PORT=9200 +# Authentication for ES (optional) +ES_USER=elastic +ES_PASS=password + +# Secrets +# ------- +# Make sure to use `bundle exec rails secret` to generate secrets +# ------- +SECRET_KEY_BASE= +OTP_SECRET= + +# Encryption secrets +# ------------------ +# Must be available (and set to same values) for all server processes +# These are private/secret values, do not share outside hosting environment +# Use `bin/rails db:encryption:init` to generate fresh secrets +# Do NOT change these secrets once in use, as this would cause data loss and other issues +# ------------------ +# ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY= +# ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT= +# ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY= + +# Web Push +# -------- +# Generate with `bundle exec rails mastodon:webpush:generate_vapid_key` +# -------- +VAPID_PRIVATE_KEY= +VAPID_PUBLIC_KEY= + +# Sending mail +# ------------ +SMTP_SERVER= +SMTP_PORT=587 +SMTP_LOGIN= +SMTP_PASSWORD= +SMTP_FROM_ADDRESS=notifications@example.com + +# File storage (optional) +# ----------------------- +S3_ENABLED=true +S3_BUCKET=files.example.com +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +S3_ALIAS_HOST=files.example.com + +# IP and session retention +# ----------------------- +# Make sure to modify the scheduling of ip_cleanup_scheduler in config/sidekiq.yml +# to be less than daily if you lower IP_RETENTION_PERIOD below two days (172800). +# ----------------------- +IP_RETENTION_PERIOD=31556952 +SESSION_RETENTION_PERIOD=31556952 + +# Fetch All Replies Behavior +# -------------------------- +# When a user expands a post (DetailedStatus view), fetch all of its replies +# (default: false) +FETCH_REPLIES_ENABLED=false + +# Period to wait between fetching replies (in minutes) +FETCH_REPLIES_COOLDOWN_MINUTES=15 + +# Period to wait after a post is first created before fetching its replies (in minutes) +FETCH_REPLIES_INITIAL_WAIT_MINUTES=5 + +# Max number of replies to fetch - total, recursively through a whole reply tree +FETCH_REPLIES_MAX_GLOBAL=1000 + +# Max number of replies to fetch - for a single post +FETCH_REPLIES_MAX_SINGLE=500 + +# Max number of replies Collection pages to fetch - total +FETCH_REPLIES_MAX_PAGES=500 diff --git a/apps/mastodon/4.3.6/scripts/init.sh b/apps/mastodon/4.3.6/scripts/init.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/apps/mastodon/4.3.6/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/mastodon/4.3.6/scripts/uninstall.sh b/apps/mastodon/4.3.6/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/apps/mastodon/4.3.6/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/mastodon/4.3.6/scripts/upgrade.sh b/apps/mastodon/4.3.6/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/apps/mastodon/4.3.6/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/mastodon/README.md b/apps/mastodon/README.md new file mode 100644 index 000000000..6e854692b --- /dev/null +++ b/apps/mastodon/README.md @@ -0,0 +1,48 @@ +# Mastodon (长毛象) + +自由开源的去中心化的分布式微博客社交网络 + +![Mastodon](https://file.lifebus.top/imgs/mastodon_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +Mastodon 是一款基于 ActivityPub 的免费开源社交网络服务器,用户可以关注好友并发现新朋友。在 Mastodon +上,用户可以发布任何他们想要的内容:链接、图片、文本和视频。所有 Mastodon 服务器都可以作为联合网络互操作(一台服务器上的用户可以与另一台服务器上的用户无缝通信,包括实现 +ActivityPub 的非 Mastodon 软件!) + +## 特征 + +### 不受供应商限制 + +可与任何符合要求的平台完全互操作- 不一定是 Mastodon;无论实现 ActivityPub 的是什么,都是社交网络的一部分!了解更多 + +### 实时、按时间顺序排列的时间线更新 + +您关注的人的更新会通过 WebSockets 实时显示在 UI 中。还有流水线视图! + +### 媒体附件,如图片和短视频 + +上传和查看更新中附加的图片和 WebM/MP4 视频。没有音轨的视频将被视为 GIF;普通视频将连续循环播放! + +### 安全和审核工具 + +Mastodon 包括私人帖子、锁定帐户、短语过滤、静音、屏蔽和各种其他功能,以及报告和审核系统。了解更多 + +### OAuth2 和简单的 REST API + +Mastodon 充当 OAuth2 提供商,因此第三方应用可以使用 REST 和 Streaming +API。这带来了一个拥有众多选择的丰富应用生态系统! + +## 安装说明 + +> 项目使用 软件版本 +> +> Redis 4+ +> +> PostgreSQL 12+ + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/apps/mastodon/data.yml b/apps/mastodon/data.yml new file mode 100644 index 000000000..2900e80b4 --- /dev/null +++ b/apps/mastodon/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: mastodon + name: Mastodon (长毛象) + tags: + - WebSite + - Local + shortDescZh: 自由开源的去中心化的分布式微博客社交网络 + shortDescEn: Your self-hosted, globally interconnected microblogging community + type: website + crossVersionUpdate: true + limit: 0 + website: https://joinmastodon.org/ + github: https://github.com/mastodon/mastodon/ + document: https://docs.joinmastodon.org/ diff --git a/apps/mastodon/logo.png b/apps/mastodon/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e80d6c710f240bc628540cae7ecffc6a5c928d07 GIT binary patch literal 41324 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 literal 0 HcmV?d00001 diff --git a/envs/mastodon/mastodon.env b/envs/mastodon/mastodon.env new file mode 100644 index 000000000..12ab2b6dc --- /dev/null +++ b/envs/mastodon/mastodon.env @@ -0,0 +1,109 @@ +# This is a sample configuration file. You can generate your configuration +# with the `bundle exec rails mastodon:setup` interactive setup wizard, but to customize +# your setup even further, you'll need to edit it manually. This sample does +# not demonstrate all available configuration options. Please look at +# https://docs.joinmastodon.org/admin/config/ for the full documentation. + +# Note that this file accepts slightly different syntax depending on whether +# you are using `docker-compose` or not. In particular, if you use +# `docker-compose`, the value of each declared variable will be taken verbatim, +# including surrounding quotes. +# See: https://github.com/mastodon/mastodon/issues/16895 + +# Federation +# ---------- +# This identifies your server and cannot be changed safely later +# ---------- +LOCAL_DOMAIN=example.com + +# Redis +# ----- +REDIS_HOST=localhost +REDIS_PORT=6379 + +# PostgreSQL +# ---------- +DB_HOST=/var/run/postgresql +DB_USER=mastodon +DB_NAME=mastodon_production +DB_PASS= +DB_PORT=5432 + +# Elasticsearch (optional) +# ------------------------ +ES_ENABLED=true +ES_HOST=localhost +ES_PORT=9200 +# Authentication for ES (optional) +ES_USER=elastic +ES_PASS=password + +# Secrets +# ------- +# Make sure to use `bundle exec rails secret` to generate secrets +# ------- +SECRET_KEY_BASE= +OTP_SECRET= + +# Encryption secrets +# ------------------ +# Must be available (and set to same values) for all server processes +# These are private/secret values, do not share outside hosting environment +# Use `bin/rails db:encryption:init` to generate fresh secrets +# Do NOT change these secrets once in use, as this would cause data loss and other issues +# ------------------ +# ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY= +# ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT= +# ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY= + +# Web Push +# -------- +# Generate with `bundle exec rails mastodon:webpush:generate_vapid_key` +# -------- +VAPID_PRIVATE_KEY= +VAPID_PUBLIC_KEY= + +# Sending mail +# ------------ +SMTP_SERVER= +SMTP_PORT=587 +SMTP_LOGIN= +SMTP_PASSWORD= +SMTP_FROM_ADDRESS=notifications@example.com + +# File storage (optional) +# ----------------------- +S3_ENABLED=true +S3_BUCKET=files.example.com +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +S3_ALIAS_HOST=files.example.com + +# IP and session retention +# ----------------------- +# Make sure to modify the scheduling of ip_cleanup_scheduler in config/sidekiq.yml +# to be less than daily if you lower IP_RETENTION_PERIOD below two days (172800). +# ----------------------- +IP_RETENTION_PERIOD=31556952 +SESSION_RETENTION_PERIOD=31556952 + +# Fetch All Replies Behavior +# -------------------------- +# When a user expands a post (DetailedStatus view), fetch all of its replies +# (default: false) +FETCH_REPLIES_ENABLED=false + +# Period to wait between fetching replies (in minutes) +FETCH_REPLIES_COOLDOWN_MINUTES=15 + +# Period to wait after a post is first created before fetching its replies (in minutes) +FETCH_REPLIES_INITIAL_WAIT_MINUTES=5 + +# Max number of replies to fetch - total, recursively through a whole reply tree +FETCH_REPLIES_MAX_GLOBAL=1000 + +# Max number of replies to fetch - for a single post +FETCH_REPLIES_MAX_SINGLE=500 + +# Max number of replies Collection pages to fetch - total +FETCH_REPLIES_MAX_PAGES=500