From 0624e51a200e1b9410b5d36d2dacdf92befd7fb5 Mon Sep 17 00:00:00 2001 From: QYG2297248353 Date: Fri, 14 Mar 2025 09:21:08 +0000 Subject: [PATCH] Synced apps from source repository via GitHub Actions --- apps/ani-rss/{1.1.318 => 1.1.319}/.env | 0 apps/ani-rss/{1.1.318 => 1.1.319}/data.yml | 0 .../{1.1.318 => 1.1.319}/docker-compose.yml | 2 +- .../{1.1.318 => 1.1.319}/envs/default.env | 0 .../{1.1.318 => 1.1.319}/envs/global.env | 0 .../{1.1.318 => 1.1.319}/scripts/init.sh | 0 .../{1.1.318 => 1.1.319}/scripts/uninstall.sh | 0 .../{1.1.318 => 1.1.319}/scripts/upgrade.sh | 0 apps/byte-muse/{1.7.4 => 1.7.5}/.env | 0 apps/byte-muse/{1.7.4 => 1.7.5}/data.yml | 0 .../{1.7.4 => 1.7.5}/docker-compose.yml | 2 +- .../{1.7.4 => 1.7.5}/envs/default.env | 0 .../{1.7.4 => 1.7.5}/envs/global.env | 0 .../{1.7.4 => 1.7.5}/scripts/init.sh | 0 .../{1.7.4 => 1.7.5}/scripts/uninstall.sh | 0 .../{1.7.4 => 1.7.5}/scripts/upgrade.sh | 0 apps/certimate/{0.3.3 => 0.3.4}/.env | 0 apps/certimate/{0.3.3 => 0.3.4}/data.yml | 0 .../{0.3.3 => 0.3.4}/docker-compose.yml | 2 +- .../{0.3.3 => 0.3.4}/envs/default.env | 0 .../{0.3.3 => 0.3.4}/envs/global.env | 0 .../{0.3.3 => 0.3.4}/scripts/init.sh | 0 .../{0.3.3 => 0.3.4}/scripts/uninstall.sh | 0 .../{0.3.3 => 0.3.4}/scripts/upgrade.sh | 0 apps/mastodon/4.3.6/.env | 72 +++++++ apps/mastodon/4.3.6/data.yml | 194 ++++++++++++++++++ apps/mastodon/4.3.6/docker-compose.yml | 53 +++++ 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 | 21 ++ apps/mastodon/4.3.6/scripts/uninstall.sh | 10 + apps/mastodon/4.3.6/scripts/upgrade.sh | 21 ++ apps/mastodon/README.md | 66 ++++++ apps/mastodon/data.yml | 14 ++ apps/mastodon/logo.png | Bin 0 -> 41324 bytes 36 files changed, 567 insertions(+), 3 deletions(-) rename apps/ani-rss/{1.1.318 => 1.1.319}/.env (100%) rename apps/ani-rss/{1.1.318 => 1.1.319}/data.yml (100%) rename apps/ani-rss/{1.1.318 => 1.1.319}/docker-compose.yml (95%) rename apps/ani-rss/{1.1.318 => 1.1.319}/envs/default.env (100%) rename apps/ani-rss/{1.1.318 => 1.1.319}/envs/global.env (100%) rename apps/ani-rss/{1.1.318 => 1.1.319}/scripts/init.sh (100%) rename apps/ani-rss/{1.1.318 => 1.1.319}/scripts/uninstall.sh (100%) rename apps/ani-rss/{1.1.318 => 1.1.319}/scripts/upgrade.sh (100%) rename apps/byte-muse/{1.7.4 => 1.7.5}/.env (100%) rename apps/byte-muse/{1.7.4 => 1.7.5}/data.yml (100%) rename apps/byte-muse/{1.7.4 => 1.7.5}/docker-compose.yml (94%) rename apps/byte-muse/{1.7.4 => 1.7.5}/envs/default.env (100%) rename apps/byte-muse/{1.7.4 => 1.7.5}/envs/global.env (100%) rename apps/byte-muse/{1.7.4 => 1.7.5}/scripts/init.sh (100%) rename apps/byte-muse/{1.7.4 => 1.7.5}/scripts/uninstall.sh (100%) rename apps/byte-muse/{1.7.4 => 1.7.5}/scripts/upgrade.sh (100%) rename apps/certimate/{0.3.3 => 0.3.4}/.env (100%) rename apps/certimate/{0.3.3 => 0.3.4}/data.yml (100%) rename apps/certimate/{0.3.3 => 0.3.4}/docker-compose.yml (90%) rename apps/certimate/{0.3.3 => 0.3.4}/envs/default.env (100%) rename apps/certimate/{0.3.3 => 0.3.4}/envs/global.env (100%) rename apps/certimate/{0.3.3 => 0.3.4}/scripts/init.sh (100%) rename apps/certimate/{0.3.3 => 0.3.4}/scripts/uninstall.sh (100%) rename apps/certimate/{0.3.3 => 0.3.4}/scripts/upgrade.sh (100%) create mode 100644 apps/mastodon/4.3.6/.env 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 diff --git a/apps/ani-rss/1.1.318/.env b/apps/ani-rss/1.1.319/.env similarity index 100% rename from apps/ani-rss/1.1.318/.env rename to apps/ani-rss/1.1.319/.env diff --git a/apps/ani-rss/1.1.318/data.yml b/apps/ani-rss/1.1.319/data.yml similarity index 100% rename from apps/ani-rss/1.1.318/data.yml rename to apps/ani-rss/1.1.319/data.yml diff --git a/apps/ani-rss/1.1.318/docker-compose.yml b/apps/ani-rss/1.1.319/docker-compose.yml similarity index 95% rename from apps/ani-rss/1.1.318/docker-compose.yml rename to apps/ani-rss/1.1.319/docker-compose.yml index 36ff1c7..f6a3ad1 100644 --- a/apps/ani-rss/1.1.318/docker-compose.yml +++ b/apps/ani-rss/1.1.319/docker-compose.yml @@ -11,7 +11,7 @@ services: - PORT=7789 - CONFIG=/config - TZ=Asia/Shanghai - image: wushuo894/ani-rss:v1.1.318 + image: wushuo894/ani-rss:v1.1.319 labels: createdBy: Apps networks: diff --git a/apps/ani-rss/1.1.318/envs/default.env b/apps/ani-rss/1.1.319/envs/default.env similarity index 100% rename from apps/ani-rss/1.1.318/envs/default.env rename to apps/ani-rss/1.1.319/envs/default.env diff --git a/apps/ani-rss/1.1.318/envs/global.env b/apps/ani-rss/1.1.319/envs/global.env similarity index 100% rename from apps/ani-rss/1.1.318/envs/global.env rename to apps/ani-rss/1.1.319/envs/global.env diff --git a/apps/ani-rss/1.1.318/scripts/init.sh b/apps/ani-rss/1.1.319/scripts/init.sh similarity index 100% rename from apps/ani-rss/1.1.318/scripts/init.sh rename to apps/ani-rss/1.1.319/scripts/init.sh diff --git a/apps/ani-rss/1.1.318/scripts/uninstall.sh b/apps/ani-rss/1.1.319/scripts/uninstall.sh similarity index 100% rename from apps/ani-rss/1.1.318/scripts/uninstall.sh rename to apps/ani-rss/1.1.319/scripts/uninstall.sh diff --git a/apps/ani-rss/1.1.318/scripts/upgrade.sh b/apps/ani-rss/1.1.319/scripts/upgrade.sh similarity index 100% rename from apps/ani-rss/1.1.318/scripts/upgrade.sh rename to apps/ani-rss/1.1.319/scripts/upgrade.sh diff --git a/apps/byte-muse/1.7.4/.env b/apps/byte-muse/1.7.5/.env similarity index 100% rename from apps/byte-muse/1.7.4/.env rename to apps/byte-muse/1.7.5/.env diff --git a/apps/byte-muse/1.7.4/data.yml b/apps/byte-muse/1.7.5/data.yml similarity index 100% rename from apps/byte-muse/1.7.4/data.yml rename to apps/byte-muse/1.7.5/data.yml diff --git a/apps/byte-muse/1.7.4/docker-compose.yml b/apps/byte-muse/1.7.5/docker-compose.yml similarity index 94% rename from apps/byte-muse/1.7.4/docker-compose.yml rename to apps/byte-muse/1.7.5/docker-compose.yml index 81f1193..b76a523 100644 --- a/apps/byte-muse/1.7.4/docker-compose.yml +++ b/apps/byte-muse/1.7.5/docker-compose.yml @@ -7,7 +7,7 @@ services: env_file: - ./envs/global.env - .env - image: envyafish/byte-muse:1.7.4 + image: envyafish/byte-muse:1.7.5 labels: createdBy: Apps networks: diff --git a/apps/byte-muse/1.7.4/envs/default.env b/apps/byte-muse/1.7.5/envs/default.env similarity index 100% rename from apps/byte-muse/1.7.4/envs/default.env rename to apps/byte-muse/1.7.5/envs/default.env diff --git a/apps/byte-muse/1.7.4/envs/global.env b/apps/byte-muse/1.7.5/envs/global.env similarity index 100% rename from apps/byte-muse/1.7.4/envs/global.env rename to apps/byte-muse/1.7.5/envs/global.env diff --git a/apps/byte-muse/1.7.4/scripts/init.sh b/apps/byte-muse/1.7.5/scripts/init.sh similarity index 100% rename from apps/byte-muse/1.7.4/scripts/init.sh rename to apps/byte-muse/1.7.5/scripts/init.sh diff --git a/apps/byte-muse/1.7.4/scripts/uninstall.sh b/apps/byte-muse/1.7.5/scripts/uninstall.sh similarity index 100% rename from apps/byte-muse/1.7.4/scripts/uninstall.sh rename to apps/byte-muse/1.7.5/scripts/uninstall.sh diff --git a/apps/byte-muse/1.7.4/scripts/upgrade.sh b/apps/byte-muse/1.7.5/scripts/upgrade.sh similarity index 100% rename from apps/byte-muse/1.7.4/scripts/upgrade.sh rename to apps/byte-muse/1.7.5/scripts/upgrade.sh diff --git a/apps/certimate/0.3.3/.env b/apps/certimate/0.3.4/.env similarity index 100% rename from apps/certimate/0.3.3/.env rename to apps/certimate/0.3.4/.env diff --git a/apps/certimate/0.3.3/data.yml b/apps/certimate/0.3.4/data.yml similarity index 100% rename from apps/certimate/0.3.3/data.yml rename to apps/certimate/0.3.4/data.yml diff --git a/apps/certimate/0.3.3/docker-compose.yml b/apps/certimate/0.3.4/docker-compose.yml similarity index 90% rename from apps/certimate/0.3.3/docker-compose.yml rename to apps/certimate/0.3.4/docker-compose.yml index 74f1058..d796626 100644 --- a/apps/certimate/0.3.3/docker-compose.yml +++ b/apps/certimate/0.3.4/docker-compose.yml @@ -7,7 +7,7 @@ services: env_file: - ./envs/global.env - .env - image: usual2970/certimate:0.3.3 + image: usual2970/certimate:v0.3.4 labels: createdBy: Apps networks: diff --git a/apps/certimate/0.3.3/envs/default.env b/apps/certimate/0.3.4/envs/default.env similarity index 100% rename from apps/certimate/0.3.3/envs/default.env rename to apps/certimate/0.3.4/envs/default.env diff --git a/apps/certimate/0.3.3/envs/global.env b/apps/certimate/0.3.4/envs/global.env similarity index 100% rename from apps/certimate/0.3.3/envs/global.env rename to apps/certimate/0.3.4/envs/global.env diff --git a/apps/certimate/0.3.3/scripts/init.sh b/apps/certimate/0.3.4/scripts/init.sh similarity index 100% rename from apps/certimate/0.3.3/scripts/init.sh rename to apps/certimate/0.3.4/scripts/init.sh diff --git a/apps/certimate/0.3.3/scripts/uninstall.sh b/apps/certimate/0.3.4/scripts/uninstall.sh similarity index 100% rename from apps/certimate/0.3.3/scripts/uninstall.sh rename to apps/certimate/0.3.4/scripts/uninstall.sh diff --git a/apps/certimate/0.3.3/scripts/upgrade.sh b/apps/certimate/0.3.4/scripts/upgrade.sh similarity index 100% rename from apps/certimate/0.3.3/scripts/upgrade.sh rename to apps/certimate/0.3.4/scripts/upgrade.sh diff --git a/apps/mastodon/4.3.6/.env b/apps/mastodon/4.3.6/.env new file mode 100644 index 0000000..0b1ed72 --- /dev/null +++ b/apps/mastodon/4.3.6/.env @@ -0,0 +1,72 @@ +# Postgres 服务 (前置检查) [必填] +PANEL_POSTGRES_TYPE=postgresql + +# Redis 服务 (前置检查) [必填] +PANEL_REDIS_TYPE=redis + +# 数据持久化路径 [必填] +MASTODON_ROOT_PATH=/home/mastodon + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=3000 + +# Stream 端口 [必填] +PANEL_APP_PORT_STREAM=4000 + +# 数据库加密密钥 [必填] +ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY= + +# 数据库加密盐 [必填] +ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT= + +# 数据库加密主键 [必填] +ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY= + +# 密钥 [必填] +SECRET_KEY_BASE= + +# OTP 密钥 [必填] +OTP_SECRET= + +# 数据库 主机地址 [必填] +DB_HOST=127.0.0.1 + +# 数据库 端口 [必填] +DB_PORT=5432 + +# 数据库 名称 [必填] +DB_NAME=mastodon + +# 数据库 用户名 [必填] +DB_USER=mastodon + +# 数据库 密码 [必填] +DB_PASS= + +# Redis 主机 [必填] +REDIS_HOST=127.0.0.1 + +# Redis 端口 [必填] +REDIS_PORT=6379 + +# Redis 索引 (0-20) [必填] +REDIS_DB=0 + +# Redis 用户名 +REDIS_USERNAME= + +# Redis 密码 +REDIS_PASSWORD= + +# ES数据库 主机地址 +ES_HOST=127.0.0.1 + +# ES数据库 端口 +ES_PORT=9200 + +# ES数据库 用户名 +ES_USER=elastic + +# ES数据库 密码 +ES_PASS= + diff --git a/apps/mastodon/4.3.6/data.yml b/apps/mastodon/4.3.6/data.yml new file mode 100644 index 0000000..dd28335 --- /dev/null +++ b/apps/mastodon/4.3.6/data.yml @@ -0,0 +1,194 @@ +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: "" + edit: true + envKey: ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY + labelZh: 数据库加密密钥 + labelEn: Database encryption key + required: true + type: text + - default: "" + edit: true + envKey: ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT + labelZh: 数据库加密盐 + labelEn: Database encryption salt + required: true + type: text + - default: "" + edit: true + envKey: ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY + labelZh: 数据库加密主键 + labelEn: Database encryption primary key + required: true + type: text + - default: "" + edit: true + envKey: SECRET_KEY_BASE + labelZh: 密钥 + labelEn: Secret key + required: true + type: text + - default: "" + edit: true + envKey: OTP_SECRET + labelZh: OTP 密钥 + labelEn: OTP secret + required: true + type: text + - 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 0000000..622c767 --- /dev/null +++ b/apps/mastodon/4.3.6/docker-compose.yml @@ -0,0 +1,53 @@ +networks: + 1panel-network: + external: true +services: + mastodon: + command: bundle exec puma -C config/puma.rb + container_name: mastodon + env_file: + - ./envs/global.env + - ./envs/mastodon.env + - .env + environment: + - TZ=Asia/Shanghai + image: ghcr.io/mastodon/mastodon:v4.3.6 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3000 + restart: always + volumes: + - ${MASTODON_ROOT_PATH}/system:/mastodon/public/system + sidekiq-mastodon: + command: bundle exec sidekiq + container_name: sidekiq-mastodon + env_file: + - ./envs/global.env + - ./envs/mastodon.env + - .env + environment: + - TZ=Asia/Shanghai + image: ghcr.io/mastodon/mastodon:v4.3.6 + networks: + - 1panel-network + restart: always + volumes: + - ${MASTODON_ROOT_PATH}/system:/mastodon/public/system + streaming-mastodon: + command: node ./streaming/index.js + container_name: streaming-mastodon + env_file: + - ./envs/global.env + - ./envs/mastodon.env + - .env + environment: + - TZ=Asia/Shanghai + image: ghcr.io/mastodon/mastodon-streaming:v4.3.6 + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_STREAM}:4000 + restart: always 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 0000000..cd05f46 --- /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 0000000..e10989f --- /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 0000000..12ab2b6 --- /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 0000000..a1156ba --- /dev/null +++ b/apps/mastodon/4.3.6/scripts/init.sh @@ -0,0 +1,21 @@ +#!/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 "APP_ENV_FILE=${CURRENT_DIR}/envs/mastodon.env" >> .env + + # setup-2 add update permission + chown -R 991:991 "$MASTODON_ROOT_PATH" + + 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 0000000..c86c4fb --- /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 0000000..a1156ba --- /dev/null +++ b/apps/mastodon/4.3.6/scripts/upgrade.sh @@ -0,0 +1,21 @@ +#!/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 "APP_ENV_FILE=${CURRENT_DIR}/envs/mastodon.env" >> .env + + # setup-2 add update permission + chown -R 991:991 "$MASTODON_ROOT_PATH" + + 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 0000000..88fbd12 --- /dev/null +++ b/apps/mastodon/README.md @@ -0,0 +1,66 @@ +# 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+ + +### 密钥 + +您必须提供唯一的加密密钥:`ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY` `ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY` `ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT` + +您可以通过命令:`bin/rails db:encryption:init` 生成。 + +您也可以使用终端的 `openssl` 命令生成: + +```bash +echo "ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY=$(openssl rand -hex 32)" +echo "ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY=$(openssl rand -hex 32)" +echo "ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT=$(openssl rand -hex 32)" +``` + +### 其他密钥 + +安装后,进入安装目录,查看 `env/mastodon.env` 文件,里面有其他密钥的配置说明,在您有需要的情况下。 + +--- + +![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 0000000..2900e80 --- /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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

Y)Y@j#%2Ro3=_MxVm57|8HK`*^D$Kq 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