From 8c87c2d56616fbdf3b0b23ea0664ba1bdcac12f7 Mon Sep 17 00:00:00 2001 From: Firefly <77047823+Yuri-NagaSaki@users.noreply.github.com> Date: Wed, 28 Jan 2026 14:40:43 +0800 Subject: [PATCH] Add Misaka Danmu Server template with Docker Compose, icon, and metadata (#624) * Introduce Misaka Danmu Server, a self-hosted danmaku server for live streaming, with its corresponding Docker Compose configuration, icon, and metadata entry. * Add template.toml for configuration and environment variables. * Include necessary links for GitHub and documentation. --- .../misaka-danmu-server/docker-compose.yml | 43 ++++++++++++++++++ .../misaka-danmu-server.png | Bin 0 -> 13821 bytes blueprints/misaka-danmu-server/template.toml | 30 ++++++++++++ meta.json | 17 +++++++ 4 files changed, 90 insertions(+) create mode 100644 blueprints/misaka-danmu-server/docker-compose.yml create mode 100644 blueprints/misaka-danmu-server/misaka-danmu-server.png create mode 100644 blueprints/misaka-danmu-server/template.toml diff --git a/blueprints/misaka-danmu-server/docker-compose.yml b/blueprints/misaka-danmu-server/docker-compose.yml new file mode 100644 index 00000000..42252c25 --- /dev/null +++ b/blueprints/misaka-danmu-server/docker-compose.yml @@ -0,0 +1,43 @@ +version: "3.8" +services: + postgres: + image: postgres:18 + restart: unless-stopped + environment: + - POSTGRES_PASSWORD + - POSTGRES_USER + - POSTGRES_DB + - TZ=Asia/Shanghai + volumes: + - postgres-data:/var/lib/postgresql + healthcheck: + test: ["CMD-SHELL", "pg_isready -U danmuapi -d danmuapi"] + interval: 10s + timeout: 5s + retries: 10 + start_period: 60s + + danmu-app: + image: l429609201/misaka_danmu_server:latest + restart: unless-stopped + depends_on: + postgres: + condition: service_healthy + environment: + - PUID=1000 + - PGID=1000 + - UMASK=0022 + - TZ=Asia/Shanghai + - DANMUAPI_DATABASE__TYPE + - DANMUAPI_DATABASE__HOST + - DANMUAPI_DATABASE__PORT + - DANMUAPI_DATABASE__NAME + - DANMUAPI_DATABASE__USER + - DANMUAPI_DATABASE__PASSWORD + - DANMUAPI_ADMIN__INITIAL_USER + volumes: + - danmu-config:/app/config + +volumes: + postgres-data: {} + danmu-config: {} diff --git a/blueprints/misaka-danmu-server/misaka-danmu-server.png b/blueprints/misaka-danmu-server/misaka-danmu-server.png new file mode 100644 index 0000000000000000000000000000000000000000..3099061113b4d8200e33bc9d7d786eeaa5684242 GIT binary patch literal 13821 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 ji3An)|K}mM^B(28&3%(3